最適化中の単一アレイ計算 - ページ 2

 
fxsaber:
リソースの添付。方法は聞かないでください。ソースコードを書かなかった
アレイの作成にサードパーティーのソフトウェアが必要ですか?
 
forexman77:

そこで、あるファイルから一度だけ読み込んで、それを配列に詰め、すべてのパスでこの配列を使用できるようにするにはどうしたらよいかというジレンマがあります。

配列は常に変化しないので、毎回読み込むのはコストがかかるので、最適化時間を短縮するために必要です。

まあ、例えば、すべてのデータを用意して配列に集め、完成した配列をファイルに書き出すスクリプトを書けばいい。そして、Expert Advisorの初期化時に、この配列をファイルから読み込む。このファイルは、EAを実行するたびに、何度でも使用することができます。
この解決策はすでに提案されているかと思います。似合わない?
 
forexman77:
サードパーティーのソフトウェアを使用してアレイを作成する?
はい、同じMQL5で、最適化の前に1回だけ別のパスで行います。
 
BlackTomcat:
例えば、配列の全データを準備・収集し、完成した配列をファイルに書き出すスクリプトを作成します。そして、EAでの初期化時にこの配列をファイルから読み込みます。このファイルは、EAを実行するたびに、何度でも使用することができます。
この解決策はすでに提案されているかと思います。似合わない?

ああ、それがね、合わないんですよ。最適化には15,000のパスがある。そして、計算するのは一度だけで、その後のパスでは配列のアドレスを指定するだけでいいのです。

つまり、先に計算してレベル分けされたデータがすでにファイルに入っていて、それが事前に分かっているのです。また、initで毎回ファイルを読み込むのでさえ、非常にコストがかかります(数千行あります)。MQL5は知りませんが、MQL4ではプログラムがinitをパスする度にパスするとフォーラムに書かれていました。

 
forexman77:
パス毎にイニテを読み込む必要があるのでしょうか?
はい、難しくもなく、コストもかかりません。バイナリーモードを使用する。ファイル全体を読まずに、任意の位置から読み始めてもかまいません。
 
forexman77: また、毎回initeでファイルを読むにも、パス毎に読むと非常にコストがかかります(数千行)。MQL5は知りませんが、MQL4では、プログラムはパスごとにinitを取るとフォーラムに書いてありました。
ファイルから配列を読み出すための費用については、大げさなのでは?Windowsはスリープモードから復帰するたびに、すべてのアプリケーションの状態を含め、スリープに入った瞬間の状態のイメージをハードディスクから復元します。そこにあるモノや情報が少ないと思っていませんか?そして、そのように眠りから覚めるまで、どれくらいの時間がかかるのでしょうか?
大げさですね、IMHO。
 
forexman77:

ああ、それがね、合わないんですよ。最適化には15,000のパスがある。そして、計算するのは一度だけで、その後のパスでは配列のアドレスを指定するだけでいいのです。

つまり、先に計算してレベル分けされたデータがすでにファイルに入っていて、それが事前に分かっているのです。また、initで毎回ファイルを読み込むのでさえ、非常にコストがかかります(数千行ありますから)。MQL5は知りませんが、MQL4ではプログラムがinitをパスする度にパスするとフォーラムに書かれていました。

C/C++の世界の古典的なトリック:ファイルから静的配列を 作成/変換して(単にテキスト: double arr[100500]={1,2,3...}) #includeで取り込めばいいのです。

 
BlackTomcat:
ファイルから配列を読み出すコストについては、大げさなのでは?Windowsはスリープモードから復帰するたびに、すべてのアプリケーションの状態を含め、スリープに入った瞬間の状態のイメージをハードディスクから復元します。そこにあるモノや情報が少ないと思っていませんか?そして、そのように眠りから覚めるまで、どれくらいの時間がかかるのでしょうか。大げさですね、IMHO。

コストは一義的に大きくなります。インジケータの設定を 変更せず、同じ値を持つ2つのバリエーションがありますが、すでにファイルに書き込まれているため、配列にダンプされます。

ファイルを使ったバリアントは、Expert Advisorのインジケータ計算を使ったバリアントより何倍も計算時間がかかります。

私はちょうど、配列を一度保存して、それを最適化のすべてのパスに使用することで、アルゴリズムへの負荷を軽減する方法があるのではないかと考えていたところです。

 
Maxim Kuznetsov:

C/C++の世界の古典的なトリックです。ファイルから静的配列を 作成/変換し(テキストのみ: double arr[100500]={1,2,3...}) #includeでインクルードするだけです。

その場合、新しいパスに切り替えたときに配列は保存されるのでしょうか?
 
forexman77:

コストは一義的に大きくなります。インジケータの設定を 変更せず、同じ値を持つ2つのバリエーションがありますが、すでにファイルに書き込まれているため、配列にダンプされます。

ファイルを使ったバリアントは、Expert Advisorのインジケータ計算を使ったバリアントより何倍も計算時間がかかります。

ただ、配列を一度保存しておいて、最適化のすべてのパスでそれを使うことで、アルゴリズムの負荷を軽減する方法があるのではないかと思いました。

ONEタイムを計算し、結果を含む配列をファイルに保存します。そして、初期化時にファイルからready配列を読み込んで、すぐに使用します。再計算の必要はありません。以前からすべて計算し、保存していたのですね。なぜまた数えるのか?:)