一体どうなっているのでしょうか。 - ページ 5

 
Andrey F. Zelinsky:

変数をグローバルに宣言し,宣言時に初期化する(例:int kk=0).

で、OnTick()でunprintして値を変更します。例えば Print("kk=",kk); ++kk;

で、TFを変えてみて、その結果を見てください。

は、TF が変更されてもグローバル変数が その値を保持することは明らかです - しかし、テスターではそのようなことは起こりません。

 
Andrey Dik:

は、TFが変更されてもグローバル変数が その値を保持することは明らかです - しかし、テスターではそのようなことは起こりません。

これで、結果の違いの原因に対する答えが見つかりました。

最適化する場合、パラメータは再選択され、Expert Advisor は異なる設定で再起動されます。

 
Andrey F. Zelinsky:

これで、結果の違いの答えがわかりましたね。

EAのグローバル変数は、過去のオプティマイザーの実行からその値を保持し、次の実行に引き継がれるのでしょうか?

 
Andrey F. Zelinsky:

は、推測するより確認する方が簡単です。

上のRenatは、オプティマイザは「時計仕掛けのように」動作し、その原因はコードにあると書いています -- 彼は何度かアンプライムをするよう勧めていますが、誰もやっていないのでしょう。

最適化と単体での動作が異なる明確な例があれば教えてください。

例えば、テスターでハンドルを削除すると、以前はメモリオーバーになり、システムとともにターミナルがクラッシュしたことを覚えています。この問題はすでに解決されているかもしれませんが、インジケータハンドルの作成と削除にはまだ落とし穴があり、オプティマイザと単一のインジケータランで違いがあります。

 
Andrey Dik:

1回の実行で、最適化とは異なる動作をするような明確な例はあるのでしょうか?

この場合、1本ではありません。

 
Andrey F. Zelinsky:

グローバルに宣言された変数の初期化を 確認する。

初期化がOnInit()内ではなく、宣言内であり、コード内でその値が変更された場合。

  1. 確認しました。
  2. それが変数というもので、変更することができるのです。
  3. 間違っていたら訂正してください。
  • 変数が定義されている場合、その変数のためにメモリが確保されます。
  • 初期化されていない場合は、何でも格納される可能性があります。
  • すぐにゼロで初期化するのと、計算結果をある場所に代入するのと、何が違うのでしょうか?
  • 初期化されていない変数を使用しようとすると、コンパイラは警告を発生します。

簡単な例です。

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

とはいえ...。グローバルスコープに宣言を入れると、コンパイラはなぜか警告を出さない((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

もっと違うものを期待していたのですが...。

 
Сергей Таболин:

  1. 確認しました。
  2. 変数はあくまで変数であり、変更することができます。
  3. 間違っていたら訂正してください。
  • 変数が宣言されると、その変数のためにメモリが確保されます。
  • 初期化されていない場合は、何でも格納される可能性があります。
  • すぐにゼロで初期化するのと、計算結果をある場所に代入するのと、何が違うのでしょうか?
  • 初期化されていない変数を使用しようとすると、コンパイラは警告を発生します。

簡単な例です。

とはいえ...。グローバルスコープに宣言を入れると、コンパイラはなぜか警告を出さない((

違うものを期待していました。

5ページ目は進んでいたのですが、まだmql5のコードはありませんでした...。また、テストに関しても、シンボル、時間枠、テストの設定など、謎が多く、闇に包まれている。

 

さて、下塗りを始める前にもう一つ質問です。

例えば、記録した結果です。

オプティマイザー - 買い;売り;売り;買い;買い;売り

テスター - 買い;売り;買い;売り;買;買い;買い;売り

これらの「おまけ」案件のデータは、どのような天井から来たものかを理解するのに役立つのでしょうか?もしかしたら、以前のバーの価格も書くべきかもしれませんし、他に何かありますか?

 
Vladimir Karputov:

5ページ目は進んでいたのですが、mql5のコードはまだありませんでした...。また、テストに関しても、シンボル、時間枠、テストの設定など、謎が多く、闇に包まれている。

休暇からお帰りなさい ))))

ここですべてを見る ことができます。

 
Сергей Таболин:

  1. 確認しました。
  2. 変数はあくまで変数であり、変更することができます。
  3. 間違っていたら訂正してください。
  • 変数が宣言されると、その変数のためにメモリが確保されます。
  • 初期化されていない場合は、何でも格納される可能性があります。
  • すぐにゼロで初期化するのと、計算結果をある場所に代入するのと、何が違うのでしょうか?
  • 初期化されていない変数を使用しようとすると、コンパイラは警告を発生します。

簡単な例です。

とはいえ...。グローバルスコープに宣言を入れると、コンパイラはなぜか警告を出さない((

もっと違うものを期待していたのですが...。

x' がdouble 型の 場合、与えられた例は根本的に間違っており、どちらの場合も 'y' の状態は未定義である

つまり、ニューラルネットワークの奥底には、inf-typesやnan-typesといった特殊なダブル値や、eps値に似た値が存在する可能性があるのです。

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...