助けてください問題が解決できない、ハードウェアの限界にぶつかる - ページ 14

 
komposter:

...

似たような取引のシーケンスがたくさんあり、それぞれのシーケンスは時間によってソートされています。

1つのシーケンスがメモリに収まるか?

Expert Advisorを書く ことができます。開始時にExpert Advisorはシーケンス#(プロパティウィンドウのパラメータ)をロードし、このシーケンスで取引します。を最適化する。

いろいろなものが実装できる一方で、タスクはなかなか明確ではありません。

 
Integer:

1つのシーケンスがメモリに収まるか?

Expert Advisorを書く ことができます。Expert Advisor は起動時にシーケンス番号を読み込み(プロパティウィンドウのパラメータ)、このシーケンスで取引します。を最適化する。

いろいろなものがファナティックにできる一方で、タスクはなかなか明確ではありません。

仮に20Gb(21 474 836 480バイト)、100万配列とすると、1配列あたり平均約21 475バイト(~21Kb)になります。携帯電話でも、メモリに収まるはずです ))

О.ところで、分散コンピューティングについてはどうでしょうか。 そちらの方向も考えていかなければなりませんが...。

 
信号の履歴ファイルを持ってると思うんだけど)
 

またまた間が空いてしまい申し訳ありません、RAMドライブの実験をしていました(今のところあまり成功していません)。みんなに順番に返信すること。

Candid:

でも、配列はそれぞれ独立しているんですよね?では、なぜシングルロードされたシーケンスの日付を一度にループさせることができないのでしょうか?ところで、ここで、ちょうど効率的な再帰アルゴリズムに行く機会があるかもしれませんが、それは運次第です。100万に100万のサイズはそのままで、1回だけファイルを読み込むことになります。

もちろん、次の反復でステップ数が変わらない(計算が進んでも探索領域が狭くならない)問題は、あまりロバストには見えません。しかし、もちろんこれは主観的なものです。

独立系。また、メモリにロードすることなく、すべてのシーケンスを一度にループさせるにはどうしたらよいでしょうか。

正しい場所(現在の分析日から過去X回の取引)からシーケンスを読み取る方法を理解すれば、ステップ数を減らすことができます。

ウラン です。
全ベースが10年単位に収まるかどうか?

100万配列につき1ファイル(便宜上、それぞれを9行で書いています)。

まあ、100万ファイルでもいいんですけどね。

ALXIMIKS

以下のように正しく理解できましたか?

1) 20gbのファイルには、約100万個のシーケンスが時間順に並んでいます。

2) 各シーケンスのサイズは、シーケンスに含まれるトレードの数 によって異なる場合があります。

3) 配列の平均サイズは20/10^6 = 20 Mbであり、1つの配列を完全にダウンロードするために何を保証できるのか?

4) K係数は与えられたシーケンス内のトレードにのみ依存する

5) 各配列について、K個(合計10^6個)を求め、上位10個を選択すること

  1. はい
  2. はい
  3. 20K、私達は保証してもいい
  4. はい、1本のランで1つのクライテリオンを固定設定で使用します。でも、今後は(クライテリオンなどの設定を変えた)次のランも早くカウントしてほしいです。
    これだけのボリュームがあるまでは、すべてをメモリにダウンロードしてループで動かし、必要なものをすべてカウントしていたのです。
  5. 基準値は、取引番号Xから順番に各取引ごとに計算される(計算に必要な金額)。
    履歴の各時点で最適なシーケンスを選択する必要があります(最適なもの - 現在の時点で最高のCriterionを持つシーケンス、Criterionは最後のクローズドトランザクションを使用して計算されます)。

ALXIMIKS

配列間の距離の値が入ったファイルをもう一つ作るとA。

これと次がわからなかった。

キャンディッド
ちなみに、シーケンスのバッチを一度に読み込むことは可能です。

保存されません、全部必要です。

サイレント

どこかで理解できていない。

ここでは、Date1からDate2までの区間における 基準 -all - を示しています。

すなわち、次のように読み取ります。

ファイルをDate1からDate2までの 多くの間隔に分割してはどうでしょうか?クローズできるワークシーケンスも出てきますよね?

現在、「Date1 - Date2」の区間は、すべてのシーケンスのすべてのトランザクションをカバーしています。

そして、それをいくつかに分割するという発想は非常にセンスがいい。確かに、そうすると、パラメータを変更するたびにディスクから情報を読み込まなければならなくなりますね......。でも、それはそれでいいんです。

キャンディッド
どうやら1回の日付パスの結果の1つは、新しい日付になるようです。

でも、どの案件もシークエンスがない点を探して、区切りをつけることもできると思います。

そして、次のインターバルに移行します。試してみます。

 
ALXIMIKS:

ということであれば

列挙 1 2 3 4 5 6 7 8 9

幅は例えば4と指定され、この幅で行全体を移動し、幅の内側にある値(例えば最小値)を見つける必要があります。

まず、1 2 3 4 で検索し、2 3 4 5、3 4 5 6、4 5 6 7、......の順で検索します。など

X(トレード数)が固定で(例では4)、他のパラメータがない場合 - はい。それで......ダメなんです。

ヴィン
私はこの作業を熟考する

条件は上記の とおりで、仲間になることを歓迎します ;)

マーケター
せっかくアカデミックな問題(プログラマーを雇うための質問みたいなもの)なのに、多くの人が興味を示してくれたのだから、入力データの記述形式をもっと厳密に定式化して、みんなが20ギガのテストデータを作って、その実用解を提出したらどうだろう。

問題ありません。

ランダムな取引のシーケンス(時系列、1年でも可)を、そのすべての属性(開始日時、開始価格、SL、TP、終了日時、終了価格)とともに生成する。配列に1から100万までの番号をつけてください。

課題は、全シーケンスのトレードの中から(時間的に重ならない)、ある基準で選んだ連続したトレードの新シリーズを作ることである。

基準は、一連の取引のうち、直近20回の取引の平均利益とする。

結果例

  1. シーケンス#250、トレード#53、基準=51: 2013.01.31 00:00 - 2013.02.12 12:30 (基準はトレード#32-52で計算されており、つまり53番目は使用されていない)
  2. シーケンス#1222, ディール#28, 基準=75: 2013.02.13 10:00 - 2013.02.13 02:21
  3. そして、年末に向けて。

ジュ
ということは、自作のテスターや最適化装置の話なんでしょうか?

ええ、そんな感じです。

セルゲイ

いや、何か違うんです。

どこかのブローカー・プロバイダーが取引データベースを手に入れたのだろう。:)

もしそうなら =)

セルゲイ

もっと簡単な言葉で、課題を繰り返す。

いいえ、そんなことはありません。具体的な例を挙げたのは、限りなく現実の問題に近いと考えられるからです。

 
elugovoy:

データベースの代表的なもの。しかし、データのアグリゲーションがなければどうしようもない。配列の固有属性(c-date)、利益Kの平均値、分散Dを別の表に書き、必要な条件に近い上位10個の配列を探せばいい。これらのフィールドにインデックスがあれば、(100万件のレコードでも)検索にそれほど時間はかからないだろう。そして、正しい10個の配列が得られたら、生データをつつくことができるのですが、日付の制限があるので、もう100万回検索することはできません。

もし、クライテリオンが静止していたら...。

パラメータが変わったらどうする?

エルゴヴォイ

まだ謎のままです。 何を探すべきか? すべての操作の結果はどうあるべきか?もし、注文の開閉を判断するのであれば、そのようなボリュームの処理にはかなり大きな時間がかかる。

はい、それならトレードがありますね。しかし、再計算が必要になるのは最も新しいデータだけで、履歴全体を再計算する必要はない。

エルゴヴォイ

もうひとつポイントがあります。せっかくだから、シンボルごとに案件を分ける意味もあるのでは?また、EURUSDやUSDJPYなどのために設計された同様の取引ロボットを作成すること。

ひとつの楽器として...

エルゴヴォイ

その方法だと、あるシーケンスの取引に使われたストラテジー(またはロボットのパラメータセット)を特定し、ある相場状況でそれに切り替えるだけでいいような気がするのですが。

その通りです。

 
Integer:

1つのシーケンスがメモリに収まるか?

Expert Advisorを書く ことができます。開始時にExpert Advisorはシーケンス番号(プロパティウィンドウのパラメータ)をロードし、このシーケンスで取引します。番号を最適化する。

そうなります。

しかし、一回の(最終的な)結果ではなく、それぞれの時点の結果が必要です。

基本的には、シーケンス番号と読み込むまでの日付をパラメータとして与えることで、クラウドを利用することができました。しかし、ファイルの再計算より速いとは到底思えません)

エルゴヴォイ

О.ところで、分散コンピューティングについてはどうでしょうか。 こちらも考えていかなければなりませんね...。

何を並行して計算しようか。異なるシーケンスに対する基準の価値?

しかし、そのためにはメモリに読み込ませる必要がある。また、1つのプロセス(Expert Advisor、ターミナル)からロードされるか、複数のプロセスからロードされるかは問題ではありません。もしかしたら、4Gbの代わりに8Gb(あるいは12、16、20)が出てくるかもしれません。しかし、人はその結果を後から「糊付け」しなければならないのです。

 
komposter:

何をもってパラレルとするか?シーケンスの違いによる基準の意味とは?

すべてのストーリーを例えば100のグループに分け、それぞれのグループごとに最適なセットを別々に計算するというものです。

そして、各グループごとに、そのグループの最適セットに含まれるストーリーだけを残し、より少ない数のストーリーで次のステップに進むのです。すると、理論上では100回平行移動することになります。

そして、記憶ではすべて問題なく、グループのサイズを調整することができます

 
TheXpert:

すべてのストーリーを例えば100のグループに分け、各グループごとに最適なセットを別々に計算するというものです。

そして、各グループについて、最適なグループセットのストーリーだけを残し、より少ないストーリーで次のステップに進みます。すると、理論上では100回平行移動することになります。

そして、記憶ではすべて問題なく、グループのサイズを調整することができます

100個のパーツを100個並列に読み込むと、メモリが足りなくなる =)

また、順次ロードする場合(毎回1つの最適なバリエーションを記憶する)、パラレリングはどこにあるのでしょうか?そして、そのファイルは、あなたがマシンに行くたびに読み込まれることに変わりはありません。

巧妙な部分装填機構を発明することは可能だと思いますが、発明しなければならない。

例えば、最初の読み取りで、各パスについて、開始日前に終了した最後の取引を見つけ、戻ってX個の前の取引を読み取り、その取引が終了したファイルのポイントを記憶します。

その後、結果の最初の取引を見つけ、その後、新鮮なデータでのみ動作:目的のポイントから新しい実際の日付にファイルを読み、毎回配列(固定サイズの配列を 取得 - X要素)の情報をシフトします。

これにより、多読の問題(単純に必要ない)と、メモリの問題(X百万トランザクションを収容できる場合のみ)を解決することができます。

この方向で進めていきます。

 

ちなみに、バイナリファイルに切り替えた場合、サイズの増加はほとんどありませんでした。

私が最適化したテキストフォーマットは、日付を1パス(最初の取引の開始)、それ以外(開始と終了の両方)を前の日付からのオフセットとして記憶し、SL、TP、PriceCloseも開始価格からのオフセットとして記憶するという、非常にコンパクトなものでした。

秒単位のシフト(uint)は完全な日付(私はlong-aを拒否し、2030年で十分です)と同じくらいスペースを取りますが、ushortは十分ではありません(最大シフトは18時間のみ)。価格についても同様で、オフセットをushortに移動することもできますが、その場合はオーバーフローのチェックを追加しなければならず(たとえば、SL = 0の場合)、3つの価格すべてで6バイトしか増加しません。やめておくことにした。

でも、ちょっと不要な情報を削除したので、20%になりました。元ファイルの予想サイズ(20Gbだった)-7〜8Gb、2〜3時間で変換できます。

まあ、セリフの変換に 使ったCPUタイムも勝ったんですけどね。