MQL バックテストについて1,2ヶ月程前からMQLを学

Writer: admin Type: foresth Date: 2019-01-05 00:00
MQL バックテストについて1,2ヶ月程前からMQLを学び初め、現在FXDDのMT4でバックテストに挑戦しているのですが決済の処理について解決出来ない部分があるので質問させていただきます。//-------------------------------------------------------------------------------- int OrdersTotal_ = OrdersTotal(); for( int i=0; i<OrdersTotal_; i++) { if( Minute()%5 == 0 ) { bool R =OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if( OrderType() == OP_BUY && TimeCurrent() > OrderOpenTime() + 600) {R =OrderClose(OrderTicket(),OrderLots(),Bid,1,clrYellow);} if( OrderType() == OP_SELL && TimeCurrent() > OrderOpenTime() + 600) {R = OrderClose(OrderTicket(),OrderLots(),Ask,1,clrYellow);} } }//-----------------------------------------------------------------------------------------私はFXではなくバイナリーオプションの為にバックテストを行おうとしています。なので決算するタイミング(判定時間)が決まっている為、この様に時間を基準に決算処理を行っています。しかしここで困った事が起きます。ストラテジーテスターでバックテストを行った際の操作履歴を確認すると「RSI_EA USDJPY,M5: invalid ticket for OrderClose function」「RSI_EA USDJPY,M5: OrderClose error 4051」と表示されます。私が調べ検証してみた感じでは、決められた同じ時間に複数のポジションを決済しなければならない場面だと上手くOrderClose ()内でチケット番号を取得出来ていないようなのです、、、一応取引結果では指定したタイミング(1分単位)で決算はされている事から、一度チケット番号が取得出来ず決済処理がなされなくとも、次のティックデータ更新の際に再度決算処理が行われてくれているとは思うのです。なので勝率を知る為にはこのままでもギリいける気がするのですが、どうも気持ち悪いので改善方法を知っている方がしましたら教えてください。また本当はBar[1] = Bar[0];Bar[0] = iBars(NULL,PERIOD_M1);をif文の中に「Bar[1] != Bar[0]」と入れる事で、同じ足での決算処理を行わない様にしたかったのですが、そうすると結局、決済処理を行わないと行けないポジションのいくつかがチケット番号を正しく取得出来ずエラーが出て次のティック更新まで後回しにされる際に、、、今度はif文で弾かれるという事が起こってしまいます。もしエラーを出さずにしっかりとチケット番号を取得し決算処理を行う事が可能ならこのあたりの問題も解決できるのではないかと考えています。どなたかMQLやプログラムに詳しい方がいましたらぜひ教えてください。解決につながるヒントの様なアイディアでも教えていただければとても嬉しいです。よろしくお願いいたします。共感した0###オーダー情報のチケット、時間はエントリーした時に1回だけ取得でよければ。。ナイス0
###回答ありがとうございます。コメントを読みいろいろ調べ考えて見たのですが、いまいちomoさんの言っている事が理解できていません。初歩的な何かが私の中で抜け落ちているのかもしれませんが、もしよろしければもう少しヒントいただけないでしょうか。
###質問へのコメントありがとうごいざいました。OrderSelect()を使う為のfor文の書き方が悪かったようです。無事解決出来ました。

 

TAG