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

 

そして、メッセージの出力をコメントではなく、オブジェクトで、より大きな形で行うことも必要になる...。

そのような考え方は、人間には決して身につきません。

 
artmedia70:
ただ、この変数は再起動時に再初期化されることに留意してください。ですから、このやり方はテスターとしては許容範囲ですが、実際の取引には向きません。


情報ありがとうございます、ではどうすればいいのでしょうか?GVに値を書き込めばいいのか?それとも、リアルトレードの他の選択肢があるのか・・・。

 
ALXIMIKS:

情報ありがとうございます、ではどうすればいいのでしょうか?GVの価値を評価する ?それとも、何か他の選択肢はないのか、リアルに...。
グローバルフラッグのことは忘れてください。なぜ国旗が必要なのか、国旗が何を示しているのかがわからない。だから、あなたの状況との関連でアドバイスするのは難しいんだ。
 
Zolotai:
皆さん、指標を提示していただけませんか?2枚のスライドがベースになっています。そして、交差するときは矢印で方向を知らせます。見つかりません、ありがとうございます。
i-PSI@MA_Signal ここからが 本題です
 
ALXIMIKS:

こんばんは、難しくなければ、初心者にアドバイスお願いします。

1) ある変数の値と同じ大きさの配列を宣言するには?(i=7なら配列double Muss[7]を宣言するなど);

既出

2) ユーザー関数内の配列は、条件が常に偽の場合、なぜ適切に宣言され使用されているとみなされるのでしょうか?

while (false){

Alert("aaaaaaaaa" );

静的ダブルBuf_max [9000000];

static double Buf_min [9000000];}.

というのは、staticとして宣言されていたからです。MQLでは、すべての静的 変数はinit()関数を呼び出す前に初期化されます。

3) ユーザ関数や一般的に単純配列と静的配列の違いはあるのでしょうか?

単純な配列は、それが宣言されている関数に最初に入ったときに初期化されます。しかし、終了時に、以前にサイズを変更していた場合、新しい値はリセットされず、次にこの関数が呼ばれたとき、配列は前回残したのと同じサイズになります。

つまり、大体において、シンプルとスタティックの違いは、初期化の瞬間にしかないのです。

 
エラー "1"-->(エラーはないが、結果が不明 )の場合はどうすればよいのでしょうか?
 

ここに保留中の注文を削除する 関数を書いています。しかし、なぜか削除されない。以下はそのコードです。

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

なぜ正常に動作しないのか?別の方法で書き換えることができることは理解していますが、このコードが目的を果たさない理由を理解したいのです。

 
hoz:

ここに保留中の注文を削除する関数を書いています。しかし、なぜか削除されない。以下はそのコードです。

なぜ正常に動作しないのか?別の書き方ができることは理解していますが、なぜこのコードが意図したとおりに動作しないのかを理解したいのです。

特にコードを変更する必要がないように、1行だけ挿入したい。

            while (!IsTradeAllowed()) Sleep(5000);
            err=0;
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
 
Sepulca:

特にコードを変更しないように、1行挿入していたはずです。


そして、これによって何が得られるのでしょうか?まだ注文が成立しておらず、エラーも出ていない。

コードが変更されました。

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
                err = 0;
              Print("IsTradeAllowed() = ", IsTradeAllowed());
              Print("err = ", err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3;
                Print("NumberOfTry", NumberOfTry);
            }
            else
            {
                err = GetLastError();
                Print("err = ", err);
            }
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

ログブックの右側部分。

2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: modify #10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: open #10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: NumberOfTry3
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: delete #9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: err = 0
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
注文が削除されていることが判明。でも、ひとつ。もう一人、もう一人いた。しかし、削除されることはなかった。しかし、このサイクルはすべての注文に対応するものです。
 

NumberOfTry 変数に注目

は、チケット ごとに0にする必要があります。そうしないと、3以上の値が割り当てられ、すべてのチケットに対してさらなる条件が実行されなくなります。

を満たすのは1つだけです。