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

 
少し作り直し、メインのforループの代わりにwhileを行うようにしましたが、それでも2番目のネストされたループで最初の条件が発生しません!
int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}
 
MakarFX #:

そうなんですか!))

試してみましたか?

私は長い間、色の変化をそのように動作させてきましたが、ライン上では、違いはないはずですが、そうではありません

                     if(SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle(32+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(32+(num*8), SubSymbol);
                        SetIndexStyle(33+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(33+(num*8), SubSymbol);
                        SetIndexStyle(34+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(34+(num*8), SubSymbol);
                        SetIndexStyle(35+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(35+(num*8), SubSymbol);

PS.私の他のコードを見てみると、そこの線の色が変わっています。

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);
 
Vitaly Muzichenko #:

私は長い間、カラーチェンジがそのように動作していましたが、ライン上では、違いはないはずですが、そうではありません

PS.私の他のコードを見てみると、線の色が変わっています。

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);

目的の部分ではなく、行全体を変更します

 
MakarFX #:

右側部分ではなく、行全体を変更します

まあ、行を全部変えないといけないと書いてありましたが

 
そこで、テスト用のコードを適応して、実行してみると、2次で無限ループになる :(
ファイル:
 
Nerd Trader #:
そこで、テスト用のコードを適応して、実行してみると、2次で無限ループになる :(

どうなんだろう!?なぜ?

なぜこれが、どんな神聖な意味を持っているのか。

int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}

---

番号で検索しているのだから、番号で検索してください。

2つの令状があれば、彼はそれを調べますが、3つ目や23つ目を見つけることができません。

---

課題がはっきりしていないようなので、その解決策です。

 
Nerd Trader #:

ループが正しく設定されていない。

for(int i = OrdersTotal(); i > 0 ; i --){

はこうでなければならない。

for(int i = OrdersTotal()-1; i >= 0 ; i --){
 
Aleksei Stepanenko #:

ループが正しく設定されていない。

はこうでなければならない。

はい!うまくいきました。しかし、なぜ以前はまだ2番目のループを入力し、私は次の行を挿入した場合Print() - それは(無限)実行されますが、先に行くことはありません?いずれにせよ、ありがとうございます。これで少なくとも寝ることができます。
 
Vitaly Muzichenko #:

どうなんだろう!?なぜ?

なぜこれが、どんな神聖な意味を持っているのか。

---

番号で検索しているのだから、番号で検索してください。

2つの令状があれば、彼はそれを調べますが、3つ目や23つ目を見つけることができません。

---

課題がはっきりしていないようなので、その解決策です。

ただ、そのマジクがユニークでなければならない、つまり他と一致するものがあってはならないのです。
 
Aleksei Stepanenko #:

ループが正しく設定されていない。

はこうでなければならない。

何が違うの?また、オーダーナンバリングは1ではなく0からではないでしょうか?