MT5 RAMメモリの容量不足、大容量ファイルの読み書きに問題がある。 - ページ 3

 
Vladislav Andruschenko:
ウヘッ

おーぷんは分かるが、バイナリで一気に書けるのに、なぜ文字列で配列を書くのか

 
Maxim Dmitrievsky:

おーぷんは分かるんだけど、バイナリで一気に書けるのに、なんで文字列で配列を書くんだろう?

書いてある、男がエクセルで加工している。

 
Sergey Savinkin:

男がエクセルで加工していると書いてある。

とは書いてない

 
Maxim Dmitrievsky:

とは書いていない。

一番最初の投稿です。よく読むと、このファイルはMT5とは関係ないような気がします。または特定の方法で処理される。

 
Sergey Savinkin:

一番最初の投稿です。よく読むと、このファイルはMT5とは関係ないのかもしれません。または特定の方法で処理される。

だから、彼がどこから得ているのかを判断させましょう

配列としても読めますね。
 
Aleksey Vyazmikin:

コードの解析ありがとうございました。

私はOOPを理解するのに苦労しているので、編集をするのは拷問です。私が理解したところでは、読み込みを担当するクラスは、そこでファイル全体を文字列配列に分割し、必要であれば、これらの文字列値を別の型に変換して、私のスクリプトでint型の配列に配置する、ということです。もし私の理解が正しければ、処理を高速化するには、ファイル全体を読んで、行と列がいくつあるか、各セルに記号がいくつあるかを把握し、すぐに配列サイズを選択すればいいのですね。では、どうすればいいのか。

400メガバイトが一度にどこから取られているのか理解したいのですが?メモリは確保されるが、先に確保されたものはクリアされない/手放される、ということでよかったでしょうか?

400Mbは、空の行が3600万セルで、それぞれ12バイト、12*36=432となります。

より良い方法を教えてもらうために、あなたが解決しようとしている問題について教えてください。ファイルの変更頻度や量、すべての人が毎回ファイルから読み込む必要があるかどうか、空でないセルの数は行ごとに一定かどうか、すべてのセルが整数だけを含むかどうか。多分、9分は週に1回使うべきで、それは全く大したことではありません - それなら、何も変える必要はありません。

一般に「どこをどうすれば速くなるか」という点では、整数値に対応する57個のフィールドを持つ構造体を宣言し、それを書き込みと読み出し(ファイルはバイナリ)の両方に使用するのが主な方向となる。すると、78MBがディスクからメモリに直接、区切り文字や文字列表現なしに、1秒よりも速く読み込まれることになる。デバッグのために、出力も.csvに保存してください。ファイルサイズは、これらの構造体の配列の要素数を即座に決定する。

 
Vladimir:

400MBは、空の行を持つセルが3600万個で、それぞれ12バイト、12*36=432となります。

計算方法は明快です。

ウラジミール

より良い方法を教えてもらうために、あなたが解決しようとしている問題について教えてください。ファイルの変更頻度や量、毎回すべてを読み込む必要があるかどうか、空でないセルの数は行ごとに一定かどうか、すべてのセルが整数値のみを含むかどうか。多分、9分は週に1回使うべきで、それは全く大したことではありません - それなら、何も変える必要はありません。

CSV形式は、現在データを提供してくれているさまざまなプログラムにとって普遍的な形式であるため、このタスクは普遍的なものです。特にこのスクリプトのことを指しているのであれば、そうですね、Excelは数式が原因でクラッシュするので、全部読んで計算すればいいだけです。セルには整数でない数字が含まれていてもよい(この例では特になし)。週1回なら9分って少ないな...。しかし、とりわけ、このような量のデータをオプティマイザで処理し、ファイルを サイドに渡してそこでエージェントの助けを借りて処理を行い、結果をcsv形式(ここではもちろん他の形式でも可能)で取得し、再び処理を行う必要があります。そこで、MT5を使って大きなデータ配列を処理したいので、この問題を公に議論することにしました。

ウラジミール

一般に、「どこをどうすれば速くなるか」という点では、「構造体を宣言し、その57フィールドが整数値に対応し、それを書き込みと読み出しの両方に使用する(ファイルはバイナリ)」というのが主な方向性である。すると、78MBがディスクからメモリに直接、区切り文字や文字列表現なしに、1秒よりも速く読み込まれることになる。デバッグのために、出力も.csvに保存してください。ファイルサイズは、これらの構造体の配列の要素数を即座に決定する。

どうやったらできるのか、想像もつかない。それとも、初期ファイルを特殊な条件で生成する必要があるのでしょうか?それなら、CSVからバイナリへのコンバータを作ればいいのでは?

2番目のクラス、列の数を無制限に書くように教える方法も見ていただけますか?

 
Maxim Dmitrievsky:

WriteArray / Readは高速で、最大サイズは300mbまで、すべてが非常に高速で、RAMを消費しない。

なぜ読み書きのコードがこんなに多いのか、4行で終わっている。

その方法を実演していただけますか?

 
Maxim Dmitrievsky:

だから、どこから入手するかは、本人に決めさせればいい

は、配列として読むこともできるのでしょう。

CSVは世界共通のファイル形式であり、MOに関連するものをはじめ、さまざまなソフトウェアでサポートされています。

また、異なるプログラム(スクリプト/アドバイザー)MT5間でデータを転送するのに便利なファイルであり、容量もそれほど多くありません。

 
Aleksey Vyazmikin:

その方法を実演していただけますか?

このようにファイルを読み込んでみてください。

https://www.mql5.com/ru/docs/files/filereadarray

今は端末を開く時間がないので、明日にでも)

Документация по MQL5: Файловые операции / FileReadArray
Документация по MQL5: Файловые операции / FileReadArray
  • www.mql5.com
//| Структура для хранения данных о ценах                            | //| Script program start function                                    |