• 締切済み

★ MT4のEAで待ち時間を設定する ★

いつもご質問に答えていただいてありがとうございます。 メタトレーダーのEAの自作に挑戦しているのですが うまく動作せず困っています。(注文が執行されない)。 EAの内容は、 ストップロスでポジションが無くなったあと、 5分間ウェイト時間をおいてから、 次の買いの条件になったら(BB下を割ったら) 買い注文を出す、というものです。 すいませんが何かヒントを教えてくださいませんでしょうか? Sleep関数を使ってもうまくいきませんでした… // ポジションチェック 無し if(CurrentPosition == -1){    if (BarCount != Bars) { BarCount = Bars; if (WaitTime != 0) WaitTime--; }   if(WaitTime <= 0)  {     //買いサイン      if(iClose(NULL,0,0) < iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0)){       //買いポジション       Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(200*Point), Ask+(400*Point), "Buy", 0, 0, Blue);      //ストップロスかかったとこでWaitTimeを5分にセットする WaitTime = 5;  }   } }

みんなの回答

回答No.1

あなたのソースコードの場合、start関数はティックごとに実行されるため、5ティック後に買いサインが出てしまいます。 このようにしてみてはいかがでしょうか。 datetime lastdate; int start() { /// 300秒後=5分後までポジションを持たない if(TimeCurrent() - lastdate > 60 * 5) { /// 売買処理 /// 最終売買時間を記録 lastdate = TimeCurrent(); } }

uno577
質問者

補足

xyz0abcdeさま ご回答ありがとうございます! 以下のようにしてみたのですが やはりウェイトが実行されませんでした。。。 申し訳ないのですが少しばかりで結構ですので助言を 頂ければ幸いです。 int start() { //変数の宣言 int cnt, CurrentPosition; int Ticket; int lastdate; double kakoa,gennzaia; double kakob,gennzaib; double bbh,bbl; double OpenPrice = 0.0; //建値 double StopPrice = 0.0; //ストップ double LimitPrice = 0.0; //リミット //現在の・20日線 gennzaia = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0); //現在のs﨎・ gennzaib = iMA(NULL,0,120,0,MODE_SMA,PRICE_CLOSE,0); bbh = iBands(NULL,0,24,3,0,PRICE_CLOSE,MODE_UPPER,0); bbl = iBands(NULL,0,24,3,0,PRICE_CLOSE,MODE_LOWER,0); CurrentPosition =-1; for(cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt,SELECT_BY_POS); if(OrderSymbol() == Symbol()) { CurrentPosition=cnt; } } if(CurrentPosition == -1) { if(iClose(NULL,0,0)< bbl) { if(TimeCurrent() - lastdate > 600 *50) { Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3,0,Ask + 300 *Point, "se", 0, 0, Red); } } } for (int orderIndex = 0; orderIndex < OrdersTotal(); orderIndex ++) { OrderSelect(orderIndex, SELECT_BY_POS, MODE_TRADES); //ポジを一個取り出す OpenPrice = OrderOpenPrice(); //建てた値段 } switch (OrderType()) { case OP_BUY: //買いポジション StopPrice = NormalizeDouble(OpenPrice - 100 * Point, 2); //10ストップ LimitPrice = NormalizeDouble(OpenPrice + 250 * Point, 2); //30リミット if (StopPrice > Bid) { //ストップ決済 { OrderClose(OrderTicket(), OrderLots(), Bid, 100); } if (LimitPrice < Bid) { //リミット決済 OrderClose(OrderTicket(), OrderLots(), Bid, 100); } break; lastdate = TimeCurrent(); } } return(0); }