- 締切済み
★ 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; } } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- xyz0abcde
- ベストアンサー率0% (0/2)
あなたのソースコードの場合、start関数はティックごとに実行されるため、5ティック後に買いサインが出てしまいます。 このようにしてみてはいかがでしょうか。 datetime lastdate; int start() { /// 300秒後=5分後までポジションを持たない if(TimeCurrent() - lastdate > 60 * 5) { /// 売買処理 /// 最終売買時間を記録 lastdate = TimeCurrent(); } }
補足
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); }