MT開発者向けではない!?INIT_PARAMETERS_INCORRECTを何に置き換えたらいいのでしょうか? - ページ 4

 
fxsaber:

オプティマイザーのマットモード用のExpert Advisorをテスト的に作ってみました。

これは、8つのエージェントが並列で、インターリーブパスなしのフルブルートフォースモード(Rand = false)で、最適化グラフがどのように見えるかを示しています。

このように、Agentはタスクを一括して実行していることがよくわかる。


パラメータへの依存性を見るために、表示モードに切り替えてみましょう。

これが、GAで探す原始的な放物線の頂点(ユニット)です。


シャッフルモード(Rand = true)では、もちろんフルブルートフォースで頂点が見つかります


 
fxsaber:

ここにネイティブパラボラがあり、その頂上(1つ)をGAで求めることになる。

GAミキシングを行わなかった場合、極限は見つからなかったが、その近くまで来た

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

179回ものパスが必要だったのです。念のため言っておくと、タスクの完全なセットは10001パスである。そう、問題はとてもシンプルなのだが、それでもだ。


では、シャッフルありの変形版(Rand = true)を試してみましょう。

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

また閉じる。ログを見ると、182個のパスが完全に計算され、970個がキャッシュから取得されていることがよくわかります。


良い結果なので、間隔を空けて点数を増やしてみよう。

 
fxsaber:

これは良い結果なので、区間内の点数を増やしてみよう。

区間内の点数は100万点である。


Rand = false

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = true (100万点のうち、ランダムに選んだペアを1億回入れ替えたもの)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


その結果、私の自己満足的な発言は

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MT開発者向けではありませんINIT_PARAMETERS_INCORRECTを何に置き換えたらいいのでしょうか?

fxsaber さん 2018.07.10 16:27

y = x^2 の完全な列挙をトレースすれば明らかです。次に、オプティマイズの行をランダムにシャッフルし、シャッフルに基づいた新しいセットを作成します。そうすると、GAは放物線の頂点を見つけることができません。

真実というより、むしろ虚偽です。


一方、フィットネス関数を放物線にしたのは、1に近い点の数が桁外れに多いため、当初は極めて短絡的な選択でした。


なぜ、混合を行わずに厳密な極限を見つけられなかったのか?

 
fxsaber:

一方、フィットネス関数を放物線にしたのは、1に近い点の数が桁外れに多いため、当初は極めて短絡的な考えでした。

ピークが鋭い関数を選ぶと、混合してもGAが壊れるのでは?そして、そのような機能は、よりTCに近いものです。

 
fxsaber:

オプティマイザーの演算モードのテストEAを出してみました

残念ながら、私の知識では全てを理解することはできません ))))

もっとシンプルにしようと思ったんです。一般的に、私はExpert Advisorに正当な鎖のファイルに記録を追加しました。117649個のうち、1953個のバリエーションが見つかりました。ちなみに、3日間隔で、建値のみ、0トレードで全探索したところ、3日かかりました。

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

今、ファイルを持っています。最適化にどう使うかはまだわかりません。明日、考えてみます・・・。

そして、なぜ成功者が少ないのか。またやることになるのでしょうか?
 
fxsaber:

ピークが鋭い関数を選択した場合、ミキシング後もGAが壊れることを想定しています。そして、そのような機能は、よりTCに近いものです。

つまり、遺伝学はピークを捉えるためのものではなく、安定領域を見つけることが目的であり、それがTCに求められていることです。 そして、ピークは原則としてノイズです。

間違ったパラメータの組み合わせについては、集団形成の段階で排除する必要があります。 つまり、遺伝子交換や突然変異で間違った個体ができた場合は、正しい個体ができるまで再度世代を繰り返す必要があります。 そうすれば、すべてうまくいくのです。

INIT_PARAMETERS_INCORRECTによる ふるい落としが、母集団が形成された後に発生し、それによってこの母集団のサイズが小さくなるとすれば、これはもちろん通常の遺伝的選択のメカニズムに違反する。 MQはこの変種であるらしい。 そしてこの場合、話題提供者の仕事は(一般の場合)ほとんど解決不可能である。タンバリンを持って踊ってもどうしようもないのである。

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

ご意見ありがとうございます。しかし、ここではプログラムのアーキテクチャについての議論はしていません。念のために言っておくと...

違う、違う。

あなたの問題は、まさにプログラムのアーキテクチャが間違っていることだと思います。フルブルートフォースでしか最大値を出せないので、非常に不安定になると思います。

 
じゃあ、もう5コペック入れるね。
ほとんどの場合、フルオーバーシュートはすべてのティックで 使用されます。それ自体が動作の遅さにつながる。その場合、Expert Advisorのスタート/オープンバー 時のみフルサーチを行い、その後最新データを確認することを検討する必要があります。このような最適化により、常にリソースの消費を抑えることができます。
 
Alexey Navoykov:

遺伝学はピークを捉えるためのものではなく、安定領域を見つけるためのものであり、TCはそれを必要としている。 そしてピークは原則的にノイズである。

しかも、最適化空間が安定した領域でも、凹みやピークがある領域で、FFはスムーズとは言い難いのです。

Geneticsは多機能なツールで、破損したFFを最適化するために手を加えることもできますが、この場合、滑らかなFFを最適化するのに時間がかかるでしょう。

標準的なジェネティクスは、INIT_PARAMETERS_INCORRECTの半分を持つセットを、何も考えずに消化すべきなのだと思います。特に、このような地域は、通常、よくまとまっているので。

が、一般的には入力パラメータ空間を変換することが最適解となる。

 
Georgiy Merts:

無駄なこと、無駄なこと

あなたの問題は、プログラムの間違ったアーキテクチャにあるということに同意します。フルブルートフォースでしか最大値を出せないので、非常に不安定になると思います。

建築の話じゃないんです。それは、機能のセットとそれを適用する順番のことです。実は、もともとこれらの関数は、1つの定数列を持っていた。そこで、もしかしたら、呼ぶ順番と呼ばない順番を実験してみようかと思い立ちました。INIT_PARAMETERS_INCORRECTで実装してみました。経過を見ることができます。でも、遺伝的最適化には問題があるんです。

さて、本題です。正規のチェーンでファイルを作成しました。今、どう使うか?onTesterを使うべきかと思いますが、フレームが...。ドキュメントを見たが、何か腑に落ちない。対処の仕方がわからない。

配列に読み込んで、そこからデータを取り出そうと考えているのですが・・・。