どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 429

 
Trader7777:

みんな、この機能をチェックしてくれ、疑問があるんだ


まあ、クローズなら逆にループさせた方がいいんですけどね。
 
splxgf:

ということで、クローズがある場合は、逆にループさせた方が良い。

いや、旧体制から新体制に移行すべきです。
 
Trader7777:

否、旧体制から新体制に移行すべきである。

順番を変更する場合は、古いものから新しいものへとなります。そうしているうちに、新しいものから古いものへ、そして時には1つのものを通して、それが起こるかもしれないのです。
 
evillive:

順番を変更する場合は、古いものから新しいものへとなります。今のところ、新しいものから古いものへ、そして、1つのものを通してでも、そうなることがあるかもしれません。 。

for (int i =OrdersTotal()-1; i>0; i--) とすると、新しいものから古いものへと閉じていきます。
 
evillive:

順番を変更する場合は、古いものから新しいものへとなります。しかし、その間にも、新しいものから古いものへ、時には次から次へと起こることがあります。

よくわからないのですが、エラーを提案するのが面倒なら、私のTSによれば必要ない機能をなぜ私に押し付けるのですか?
 

こんばんは.

私のEAでこのhttps://www.mql5.com/ru/code/9767 インジケータは正しいのでしょうか?

if(iCustom( NULL,0, "wave(MACD_FZR)",1,0)<Low[1] )

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,「macd sample」,16384,0,Green)。

if(チケット>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

}

else Print("買い注文の開始エラー:",GetLastError()).Print("Error opening BUY order : ");

return(0)です。

}

// ショートポジションのチェック(売り)

if(iCustom( NULL, 0, "wave(MACD_FZR)",1,1)>High[1] )

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) とする。

 
Trader7777:

よくわからないのですが、エラーを提案するのも面倒なのに、なぜ私のTSによると必要ない機能を押し付ける必要があるのでしょうか?

では、この関数を見てみましょう。例えば、最初の注文を取り、条件に合うものは削除する...。その代わり、2次が登場します。

次のループでは、3番目のオーダーがチェックされ、2番目のオーダーはスキップされます。

だから、列挙がおかしいと指摘したのですが...。

自分の順番が本当に大事なら、削除するときにループ変数をデクリメントすればいい。

 
Trader7777:

よくわからないのですが、エラーを提案するのが面倒なら、なぜ私のTSによると必要ない機能を押し付けるのでしょうか?

ながらでやれということです。いいね!(アップデート3)。

void CloseHalfOrders(int otype) {
   int count = 0;
   double CTexisting = CountTrades(otype), nCloseOrdersCnt = NormalizeDouble(CTexisting/2,1), price;
   int i = 0;
   while (i < OrdersTotal()) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) {
            if (otype == OP_BUY) price = Bid;
            else if (otype == OP_SELL) price = Ask;
            else return;//работаем только с OP_BUY/OP_SELL
            if (count < nCloseOrdersCnt) {
               OrderClose(OrderTicket(),OrderLots(),price,0,Lime);
               count++;
               Sleep(1000);
               i = 0;
               continue;
            } else i = OrdersTotal();
         }
      }
      i++;
   }
}
 

または

           OrderClose(OrderTicket(),OrderLots(),Bid,0,Lime);
           i--;
 
                    if (count<n)

なぜ、kとnはクローズしたオーダーの総数と比較されるのですか?