MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1652

 

みなさん、こんにちは。

私の簡単なExpert Advisorで、ある条件が発生したときに、その中のTake ProfitとStop Lossを削除する注文を書く(修正する)最も簡単な方法は何ですか、1方向に最大3つの注文まで(それが重要なら)、注文数は使われていると思いますが、新しく書くべきですか?気にかけてくれる人を待っています。

 
Порт-моне тв #:

みなさん、こんにちは。

私の簡単なExpert Advisorで、ある条件が発生したときに、その中のTake ProfitとStop Lossを削除する注文を書く(修正する)最も簡単な方法は何ですか?最大は、一方向に3つ以上の注文を出さないことになっています(それが重要なら)、注文カウント、私の理解ではそれが使われていますが、もう一度書くべきでしょうか。気にかけてくれる人を待っています。

OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0);
 
Ivan Butko #:

残念ながら、このようなコードの使い方は理解しがたい。


買い注文を開くときにフラグを1に、閉じるときにフラグを0にし、後者をオープン条件に追加してみた。うまくいきませんでした)
おかしいですね、実はフラグ=0なら開くというルールが崩れているのです。そして、どうせ同じローソク足で1で開いたままなのだから。

どうやったか見せてください。
 
Alexey Viktorov #:

なぜそんなに複雑なのか?

利口になるな。質問の趣旨と違いますね。

 
MakarFX #:
どうやったか見せてください。

うまくいっているようです、このようにやり直しました。今度は売り物で試してみて、互いに独立した存在になれるかどうかを確認します

int Buy=0,
    Sell=0;

void OnTick(void)
  {
    double 
    ma=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0),
    ma2=iMA(NULL,0,80,0,MODE_SMA,PRICE_CLOSE,0);

    if (ma>ma2 && Buy==0) 
      { 
        OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue);
        Buy=1; 
      }
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=888 || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(perceptron_B() < Porog_B)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
            Buy=1;
           }
           
         break;
        }

UPD
ふぅ、うまくいきました。) 売りも同じようにしました。これで、それぞれ独立して開くことができ、異なるロジックを持つようになりました。

 
Ivan Butko #:

うまくいっているようです、このようにやり直しました。今度は売り物で試してみて、互いに独立した存在になれるかどうかを確認します

UPD
ふぅ、デザインはうまくいった) 売りも同じようにしました。

おそらく、コンパイル時にスワイプされるのでしょう)))

 
MakarFX #:

おそらくコンパイルで悪態をつかれる))))

そうなんだ!ちょっと、「『OrderSend』の戻り値を確認すべき AI (2).mq4 34 9"」。

しかし、それは動作しているようです)
 
Ivan Butko #:

そうなんだ!ちょっとだけ、"「OrderSend」の戻り値を確認すること AI (2).mq4 34 9"。

しかし、それは動作しているようです)

このように作る

    if (ma>ma2 && Buy==0) 
      { 
        if(OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue))
        Buy=1; 
      }
 
MakarFX #:

そうしてください!

ありがとうございました。

 
MakarFX #:

ありがとうございました。