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

 
elugovoy:

ユリチク ファイル加工や圧縮など、一切手を加えずにという意味です。純粋にSQLとロボット・インジケータのロジックで作業しています。私は多くのデータベースを扱いましたが、唯一の問題はMQLとSQLを一緒に動作させることでした))。 私は配列や構造体を使わないで、見栄えの良い ソリューションを作りました。

一般的に、私は車輪の再発明をせず、最適な手段で問題を解決することを好みます。

Zhenya はい、わかりました.

それこそ、私の好みです

...特に、プロ用のツールがあれば...。うまく まとめたほうがいい

 

なんという議論でしょうか。皆様、ご参加ありがとうございました。

何も(誰も)見逃さないように、みんなにまとめて返信します。

1. Перейти на x64

ターミナルのバージョンを指定していないことに気づくのに時間がかかりました。私は4で作業していますが、このEAを5に移行するのはまだ先です。MT4は、残念ながら32bitのみ です。

32ビット版Windows 8 / 8.1の4GBメモリ制限を解除しても、私のシステムはそのままx64なので、何の解決にもなりません。

2.バラバラに切る/部分的に読む/小さなブロックを積む

タスクの条件ではうまくいかない。

以下にその詳細を記しますので、もしかしたら問題の理解が深まるかもしれません。

3.メモリを買い足す/強力なサーバやクラウドを借りる/すべてをSSDに移行する

もちろん空いているスロットにもう1枚16GBのメモリーを入れるつもりですが、それでは答えになりません。

そのボリュームが限界ではなく、容量を拡大しても特殊なケースを解決するだけです。

100%アルゴリズムで絞られていることが確実な場合のみ頼るべきだと思います。

4.データを圧縮する

それが今、私がやっていることです。

テキストキャッシュ(20GB)は2倍に圧縮されましたが、おそらくさらに圧縮されるでしょう。
メモリ内のデータ量の問題を解決することはできませんが、他のいくつかの解決策(RAMディスク)に近づくことができます。

私も2進数に変換するつもりです。読むのが速くなるし、量も減ります。


http://www.nanex.net/historical.htmlのウィザードがどのように データを圧縮して いるかは不明です。そのデータ構造はかなり冗長です。

5.データを圧縮/エンコードし、使用前に目的のチャンクを圧縮/解凍する

オプションとして受け付ける。

しかし、何だかそれも時間がかかりそうな気がします(ここで、プロセッサに頭を悩ませることになります)。

6.外部プログラム(Matlab/Rなど)に計算を転送する。

したくない、いろいろな理由がある。

MT環境とうまく統合されている場合は別ですが。しかし、その場合でも、ソフトウェアや環境を学んだり、サードパーティの開発者にソリューションを注文したりする時間が必要です。開発段階では不便だし、コストもかかる(私がそうだ)。

とにかく、今は長所も短所も含めてサンドボックスの中にいようと思っています。


7.インデックスファイルの作成とインデックスの操作

これでは、どうしようもないですね。

それでもメインファイルからデータを繰り返し取得する必要がある(常に再読み込みする)。


8.データベースを利用する

非常に魅力的な選択肢だと思います。

  • スケーラビリティとポータビリティ(サーバーを借りたり、近所のPCを接続するだけでよい)。
  • を自動化し、手動で行わなければならない多くの工程を、良いワークフローにすることができます。
  • などの特典があります。

しかし、デメリットもあります。

  • 私にとっては比較的新しい環境です(しっかり働いたことがなく、基本的なクエリのみ)。
  • 1台のクライアントマシン(スタンドアロン版)へのインストールが複雑であること。
  • おそらく他のものでしょう。
とにかく、他のオプションがダメなら、これに戻ると思います。


9.新しい用語や曖昧な用語を理解し、テストする

これは、今後のための自分へのメモであり、また、作者への情報提供のお願いでもある ;)

未公開:ファイルマッピングハッシュベース解、B-tree。


10.すべてのキャッシュを持つ端末を仮想RAMディスクに移動する

今のところ、これが(コスト・ベネフィット比の点で)最も有望な選択肢です。

SoftPerfectのRAM Diskを インストールし、キャッシュ圧縮を済ませ、計算機を永久ファイル読み込みに書き換え、パフォーマンスをチェックする。

11.タスクを正しく把握する =)

特にインプット情報の少なさを考慮すると、非常に良いアドバイスだと思います。

約束通り、もっと詳しく説明しようと思います。

似たような取引のシーケンスが多数あり、各シーケンスは時間ごとにソートされています。

異なるシーケンスでの取引は、時間的に不均等に分布している(各シーケンスで異なる方法)。案件の数が違う。しかし、それらはすべてDate1からDate2までの区間である。

タスクは,D1 から D2 へ M 分のステップで移動し (あるいは,よりよい方法 - すべてのシーケンスの取引を行うポイントによって正確に),基準 K によって他よりもよいシーケンスを見つけることです (別のタスク - 最高のシーケンスを見つけるだけでなく,基準によってセット全体を分類してトップ 10 を出力 - しかしそれはオプションで,まだ必要ではありません).

基準Kは、対応するシーケンスにおけるX回の過去の取引に基づいて計算され、X回の各取引に関するほぼすべての情報が計算に使用されます(例えば、利益だけでは十分ではありません)。


基準(K)、ディール数(X)、その他結果に影響を与えるパラメータは、ユーザーによって変更されます。つまり、アルゴリズムに「書き込む」ことができないのです。

こんな感じ。

アイデアとしては、すべての配列のすべての取引について線形になるようにファイルを再構築することができます。

しかし、すべての情報をメモリに入れずに、どうやってこれを実現するのでしょうか?また、1つのシーケンスの情報がファイル全体に「不鮮明」になってしまう場合、どのように基準を再計算すればよいのでしょうか?

これで、うまくいけば、課題はクリアです。

改めて、ご参加、議論、ご質問、リンク、具体的なご返答をいただき、誠にありがとうございました。

TheXpertUrainsergeevelugovoy匿名ALXIMIKSIvanIvanovIntegerC-4marketeerbarabashkakvnSilentGT788papaklassgrizzly_vartemiusgreatYuraZCandidContender、およびserver

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

 
komposter:

なんという議論でしょうか。皆様、ご参加ありがとうございました。

....

そう考えると、とても魅力的な選択肢です。

  • スケーラビリティとポータビリティ(サーバーを借りたり、近所のPCを接続するだけでもOK)。
  • を自動化し、ワークフローを改善することができます。
  • などの特典があります。

しかし、デメリットもあります。

  • 私にとっては比較的新しい環境です(しっかり働いたことがなく、基本的なクエリのみ)。
  • 1台のクライアントマシン(スタンドアロン版)へのインストールが複雑であること。
  • おそらく他のものでしょう。
一般的には、他の選択肢がうまくいかなかった場合、またこれに戻ると思います。


SQLの方向に進むと


  • 比較的新しい環境である(じっくりと作業したことがない、基本的な問い合わせのみ)。

学習の足をかなり引っ張ることになります。

この方法を選択した場合、すべてのビジネスロジックをストアドプロシージャで構築することをお勧めします。

Expert Advisorの機能は、サーバーにリクエストを送信し、完全に終了した結果を得ることの2つだけです。

サーバー上のすべての計算

  • 1台のクライアントマシン(スタンドアロン版)へのインストールが複雑であること。

実際には、ネットワークは、SQLサーバーを配置する方法の多くの記述を見つけることができます。

( ORACL, SYBASE + CENTOS の例 ) ORACL, SYBASE, MS SQL+WINDOWS の別マシン。

ORACLは、専門家が少なく、文献も少ないので、学ぶのが少し大変です。

MS SQL - おそらくウェブ上で最大の情報量とより多くの文献があります。

ウェブにはたくさんの解説がありますし、ショップにはもっとたくさんの本がありますから、難しいことはありません。

MSSQL 2012は、そのパラメータによって、ORACLに非常に近くなっています - すでに2014年に。

SQL + LINUXは、通常、本番環境での運用に選択されます - LINUXについて何も知らない場合は、WINDOWSを使用する方がよいでしょう

 

komposter:

似たような案件の並びがたくさんあり、それぞれの並びは時間ごとにソートされています。

異なるシーケンスでのトランザクションは、時間的に不均一に分布している(各シーケンスで異なる方法)。案件の数が違う。しかし、それらはすべてDate1からDate2までの区間である。

タスクは,D1 から D2 へ M 分のステップで移動し (あるいは,よりよい方法 - すべてのシーケンスの取引を行うポイントによって正確に),基準 K によって他よりもよいシーケンスを見つけることです (別のタスク - 最高のシーケンスを見つけるだけでなく,基準によってセット全体を分類してトップ 10 を出力 - ただしこれはオプションで,まだ必要ありません).

基準Kは、対応するシーケンスにおけるX回の過去の取引に基づいて計算され、X回の各取引に関するほぼすべての情報が計算に使用されます(例えば、利益だけでは十分ではありません)。


基準(K)、ディール数(X)、その他結果に影響を与えるパラメータは、ユーザーによって変更されます。つまり、アルゴリズムに「書き込む」ことができないのです。

こんな感じ。

アイデアとしては、すべての配列のすべての取引について線形になるようにファイルを再構築することができます。

しかし、すべての情報をメモリに入れずに、どうやってこれを実現するのでしょうか?また、1つのシーケンスの情報がファイル全体に「不鮮明」になってしまう場合、どのように基準を再計算すればよいのでしょうか?

さて、課題はクリアできたでしょうか。

伝統的に朝はゆっくりしているんです :) 。

1つのシーケンスがメモリに収まるのか、それともすでに問題があるのか?

前者の場合、ディスクからの多重読み出しは、ユーザーが条件やパラメータを変更したときに発生するのでしょうか?

もしそうなら、その変更は何らかのアルゴリズムによるものなのか、それとも何らかの主観的な根拠に基づく手動によるものなのか?

 
Candid:

伝統的に朝はゆっくりしているんです :) 。

1つのシーケンスがメモリに収まるのか、それともすでに問題があるのか?

前者の場合、ディスクからの多重読み出しは、ユーザーが条件やパラメータを変更したときに発生するのでしょうか?

もしそうなら、その変更は何らかのアルゴリズムによるものなのか、それとも何らかの主観的な根拠に基づく手動によるものなのか?

100万シークエンス。

そして、それぞれの中に正しい日付のドットが見つかり、過去の履歴が分析される。

そして、その中からベストなシークエンスが選ばれる。

そして、「物語」の次のポイントに移っていく。

 
DBMSのインストールでエンドユーザーを煩わせたくないのであれば、典型的なK基準(例えば、保守的取引、積極的取引などと呼ぶ)をいくつか(十数個)合成して実際にアルゴリズムに入れ、選択した指標の時間的変化をすべてのシーケンスに対して一度計算し、一次元ベクトルで作業するオプションもあると思います。
 
marketeer:
DBMSのインストールでエンドユーザーを煩わせたくないのであれば、典型的なK基準(例えば、保守的取引、積極的取引などと呼ぶ)をいくつか(十数個)合成して実際にアルゴリズムに保存し、選択した指標の時間的変化をすべてのシーケンスに対して一度計算し、一次元ベクトルで作業すればよいと思う。

基準が2つしかないとします。

しかし、基準を設定するパラメータはいくつかあり、それぞれ異なる値をとることができます。

各パラメータの値をごく大雑把にいくつかとっても、1次元のベクトルではなく、3次元、4次元の配列になります。

そうすると、確実にメモリが足りなくなります =)。

 
komposter:

100万シークエンス。

そして、それぞれの中に正しい日付のドットが見つかり、過去の履歴が分析される。

そして、その中からベストなシークエンスが選ばれる。

そして、「物語」の次のポイントに移っていく。

シーケンス全体がメモリに読み込まれます。そして、「目的の日付のポイントを探し出し、過去の履歴を解析する」。基準値は、達成されたベストと比較される。より良い場合は、最高のシーケンスについての基準と何を知っているかが記憶されます。そして、処理済みのシーケンスに代わって次のシーケンスが読み込まれる。などと、100万回も言っている。

ファイルは順次読み込まれ、一度だけ読み込まれます。

どうしたんですか?

 
Candid:

シーケンス全体がメモリに読み込まれます。そして、「正しい日付のポイントを探し出し、過去の履歴を分析する」のです。基準値は、達成されたベストと比較される。より良い場合は、最高のシーケンスについての基準と何を知っているかが記憶されます。そして、処理済みのシーケンスに代わって次のシーケンスが読み込まれる。などと、100万回も言っている。

ファイルは順次読み込まれ、一度だけ読み込まれます。

どうしたんですか?

そうなんです。

そして、「正しい日付」は、選択されたシーケンスのディールクロージングポイントによってシフトされ、このアルゴリズムが繰り返されるのです。

などと、もう100万回くらい言っている =)

 
komposter:

こんな感じです。

そして、選択されたシーケンスから取引の終値分だけ「正しい日付」がシフトし、このアルゴリズムが繰り返されるのです。

などと、もう100万回くらい言っている =)

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

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