前提・実現したいこと
EA(MQL4)でのバックテスト時のエラーを治したい
発生している問題・エラーメッセージ
バックテスト時にOrderModify のエラー4051がすべてのオーダーで出てしまいます。おそらく初歩的なミスだと思われるのですがなかなか直すことができません。コンパイル時にはエラーは出ません。
該当のソースコード
MQL4
static double pips;
extern double Lots = 0.05;
int gPrvBars = 0;
int OnInit()
{
//起動時に現在のバーを記録
gPrvBars = Bars;
pips=1.0;
for(int i=0; i<MarketInfo(Symbol(), MODE_DIGITS); i++){
pips /= 10;
}
if( MarketInfo(Symbol(),MODE_DIGITS) == 3 || MarketInfo(Symbol(),MODE_DIGITS) == 5 ){
pips *= 10;
}
return(INIT_SUCCEEDED);
}
void OnTick()
{
int iCurrentBars = Bars;
if(iCurrentBars == gPrvBars){
gPrvBars = iCurrentBars;
return;
} else {
//バーの始まりで1回だけ処理したい内容をここに記載する
int i = FirstEntry();
if(i > 0 && i < 4 )
{
int TicketNumber = OrderSend(NULL,OP_SELL,Lots,Bid,10,0,0,NULL,Magic,0,clrRed);
OrderSelect(TicketNumber,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(TicketNumber,OrderOpenPrice(),OrderOpenPrice()+3pips,OrderOpenPrice()-10pips,0,clrNONE);
}
else if(i > 3)
{
int TicketNumber= OrderSend(NULL,OP_BUY,Lots,Ask,10,0,0,NULL,Magic,0,clrBlue);
OrderSelect(TicketNumber,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(TicketNumber,OrderOpenPrice(),OrderOpenPrice()-3pips,OrderOpenPrice()+10pips,0,clrNONE);
}
} //今のバー数を記録 gPrvBars = iCurrentBars; }
試したこと
関連部分のみ書かせていただきました。Oninit,Ontickはすべて書いています。上記ソースコードのFirstEntry関数は私が作ったもので、は戻り値が1,2,3だったら売り注文で4,5,6だったら買い注文をするというものです。OrderSendは条件道理に動いています。バックテスト時、OrderModifyだけエラー4051が出てしまっている状況です。当初OrderModifyの中の第二、第三、第四引数をAskとBidで書いていたのでそれが原因かと思い、OrderSelectを介してOrderOpenPriceでやってみたのですが同じ結果でした。プログラミングというものをやり始めて二週間のよちよち歩きの者です。基本的なことを聞きすぎていたら申し訳ありません。何卒ご教示くだされば幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー