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

 

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

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

2) ユーザー定義関数内の配列は、条件が常に偽であれば、適切に宣言され使用されると考えられるのはなぜですか?

while (false){

Alert("aaaaaaaaa" );

静的ダブルBuf_max [9000000];

static double Buf_min [9000000];}.

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

 
ALXIMIKS:

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

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

...

1)ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
削除済み  

そんな

MarketInfo(Symbol(),MODE_TRADEALLOWED) を呼び出すと、-1=取引可が返されます。

しかし、マーケット概要でシンボルにカーソルを合わせると、ツールチップに「取引:閉じる」というテキストが表示されます。

どうしたものか

本当に取引できないのですが、なぜMODE_TRADEALLOWEDは間違った値を返すのでしょうか?

 
chief2000:

インジケーターは何回作動させたのですか?何度かあるようです(周期性が成績に顕著に現れています)。
deinitにseparatorを追加して、入力条件を設定するか、複数回実行されないようにスクリプトでやり直すと、より明確になります。


素晴らしいアイデアです))

もっとシンプルに、こんな風にしました。

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

日誌の冒頭はこんな感じです。

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

サイクルもまったくない。秩序がないのです。出力が全く安定しない。

 
hoz:


素晴らしいアイデアです))

もっとシンプルに、こんな風にしました。

日誌の冒頭はこんな感じです。

サイクルもまったくない。秩序がないのです。出力が全く安定しない。


テスト段階では、バリエーションにもよりますが、すべて1〜2行で済みます。イナテですべてを行うことが可能です。出力の順番は規定されていない。


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

チェックの段階では、品種にもよりますが、すべて1〜2行で済みますから、少し複雑にしましたね。イナテですべてを行うことが可能です。出力の順番は規定されていない。





フラグを導入して、ループが一回実行されて終わりということでしょうか?実行を止めない...。 そういうことなんです。

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

しかし、本質的には、一旦、INITAと同じようにコードが動作することが望ましいのです。すると、ブール変数Status_runはすぐにfalseに設定され、if条件は二度と実行されない...。しかし、私のログはなぜか出力が尽きない。

 
hoz:


フラグを導入して、ループが一回実行されて終わりということでしょうか?走ることを止めない...。そういうことなんです。

本質的には、INITEと同じように、一度だけ、それだけで動作するコードであるべきですが。すると、ブール変数Status_runはすぐにfalseに設定され、if条件は二度と実行されない...。でも、なぜかログの出力が尽きないんです。


ループの結果がおかしいというので、テストする方法を提示したんです。必要な動作をするのであれば、そのアルゴリズムに従うべきだし、そうでなければ、チェック時に変更すべきです。PS "Status_run "は、start()の前に作成する必要があり、

グローバル変数 です。
 

達人たち、ひとことお願いします。 bool 変数 Flag=true; を設定し、起動 しました。

取引を開始する

あいは

{

Opn_S = trueです。

Flag=false。

}

フラグについて、オープン時にfalseを 返すフラグで、オープン条件にこのフラグがある場合、疑問があります。フラグに渡された真偽はいつまで保持されるのか、翌日にはゼロにリセットされるのか。

 
Forexman77:

達人たち、ひとことお願いします。 変数bool=true; を設定し、起動 しました。

取引を開始する

あいは

{

Opn_S = trueです。

Flag=false。

}

フラグについて、オープン時にfalseを 返すフラグで、オープン条件にこのフラグがある場合、疑問があります。フラグに渡された真偽はいつまで保持されるのか、翌日にはゼロにリセットされるのか。


いいえ、そうではありません。新しいティックごとに、 Flag の値が真になります。https://book.mql4.com/ru/variables/types

グローバルに変数を宣言するか、例えばプログラムの先頭で、すべての関数の外側で宣言します。

あるいは、変数を静的にする - static bool flag=true; .

 
ALXIMIKS:

いいえ、そうではありません。新しいティックごとに、 Flag の値が真になります。https://book.mql4.com/ru/variables/types

プログラムの最初に、すべての関数の外側で、グローバルに変数を宣言するか、どちらかです。

あるいは、変数を静的にする - static bool flag=true; .

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