MT5とスピードの関係 - ページ 54 1...474849505152535455565758596061...94 新しいコメント Slava 2020.10.12 18:34 #531 Roman:なるほど、言い直します。mql以内であれば、プロセッサのクロック周波数にもよりますが、おおよそ可能です。 PWMについてはどうでしょうか?- 周波数が一定で、デューティサイクルが可変のパルス信号。 定数を設定しないのですか? まず、WinAPIのSleep 関数とは何か、そして実際に何をするのかを読みます。 PS Windowsはリアルタイムシステムではない Roman 2020.10.12 18:42 #532 Slava:まず、WinAPIのSleep関数がどのようなもので、実際に何をするものなのかについて読んでみましょう。PS Windowsはリアルタイムシステムではない エヘン、WinAPI Sleepがどう関係するんだ?マイクロ秒のスリップについて話して いるとき 個別に、プロセッサのために、タイマーの周波数を決定し、繰り返し数を計算することができます。 では、mqlで独自のMicrosecondCountを書くことは可能だが、その意味は何だろうか?標準のもので十分です。 MT5 и скорость в боевом исполнении 2020.10.10www.mql5.com MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли... Renat Fatkhullin 2020.10.12 20:30 #533 Roman:エヘン、お恥ずかしい話ですが、WinAPI Sleepはどんな関係があるのでしょうか?マイクロ秒スリップの 話をするとき 個別に、プロセッサのために、タイマーの周波数を定義し、繰り返し回数を計算することができます。 では、mqlで独自のMicrosecondCountを書くことは可能だが、その意味は何だろうか?標準のもので十分です。 コンテキストスイッチなしで自分の保留中のスリップが100%コアを食いつぶすことになる。 これはキワモノ的なプログラミング手法だ。そのようなコードが市場に流出することを神は禁じています。 Roman 2020.10.12 20:45 #534 Renat Fatkhullin:コンテキストスイッチのない待ち受けは、コアを100%食いつぶしてしまいます。恐ろしいプログラミング方法です。そのようなコードが市場に流出することを神は禁じています。 そして、誰もそのハードコアを否定しなかった )) コンテキストスイッチングの例を示せば、改善されるかも? 2コア4スレッドしかないVirtualBox上でのμsSLEEP(μsRange)のCPU負荷はこんな感じです。 鉱夫はもっとひどいことをする )) fxsaber 2020.10.13 10:57 #535 トレーディング、自動売買システム、ストラテジーテストに関するフォーラムライブラリ:配列fxsaber, 2020.10.13 12:54 ほとんどのVPSを殺すEAの一例。 #include <fxsaber\Sequence.mqh> // https://www.mql5.com/ru/code/31446 #define PRINT(A) Print(#A + " = " + (string)(A)) input datetime inFrom = D'2020.09.01'; // С какой даты анализировать историю void OnInit() { SEQUENCE Sequence; // Последовательный запуск расчетов // if (Sequence.Init()) // Раскомментируйте для последовательного выполнения. { MqlTick Ticks[]; PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (long)inFrom * 1000)); PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED)); Sleep(10000); // Ждем освобождения CopyTicks-данных. } }異なるシンボルのいくつかのチャートで動作させています。この 動作を自動化するために、inAmount = 5で このスクリプトを 使用しました。結果2020.10.13 13:26:53.199 Test9 (AUDCAD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5406953 2020.10.13 13:26:53.326 Test9 (AUDCAD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 2838 2020.10.13 13:26:53.528 Test9 (EURCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 3430958 2020.10.13 13:26:53.807 Test9 (EURCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3144 2020.10.13 13:26:53.924 Test9 (EURUSD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4244747 2020.10.13 13:26:54.214 Test9 (EURUSD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3464 2020.10.13 13:26:54.344 Test9 (AUDCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4327679 2020.10.13 13:26:54.702 Test9 (AUDCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3797 2020.10.13 13:26:54.864 Test9 (GBPCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5340006 2020.10.13 13:26:55.457 Test9 (GBPCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 4308 2020.10.13 13:26:55.666 Test9 (EURAUD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 7730155 2020.10.13 13:26:55.756 Test9 (EURAUD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 4316これら6つのExpert Advisorを実行するには、Terminalに4Gb以上のメモリが必要です。初期化にのみ必要で、これらのEAの運用には必要ないことにご注意ください。Expert Advisorをぶら下げた状態でターミナルを起動することを想像してください。正直4GbのRAMが使えないと......ほとんどダメですね。では、この行のコメントをソースコードから削除してみましょう。 if (Sequence.Init()) // Раскомментируйте для последовательного выполнения.このように、Expert Advisorの逐次初期化を可能にしました。結果を見てみましょう(再コンパイル後)。2020.10.13 13:27:24.002 Test9 (AUDCAD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5406980 2020.10.13 13:27:24.021 Test9 (AUDCAD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1234 2020.10.13 13:27:35.407 Test9 (EURUSD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4244772 2020.10.13 13:27:35.422 Test9 (EURUSD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1095 2020.10.13 13:27:46.886 Test9 (GBPCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5340072 2020.10.13 13:27:46.905 Test9 (GBPCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1224 2020.10.13 13:27:58.293 Test9 (AUDCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4327724 2020.10.13 13:27:58.310 Test9 (AUDCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1114 2020.10.13 13:28:09.683 Test9 (EURCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 3430999 2020.10.13 13:28:09.696 Test9 (EURCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1015 2020.10.13 13:28:21.339 Test9 (EURAUD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 7730313 2020.10.13 13:28:21.363 Test9 (EURAUD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1519Expert Advisors の起動時に、Terminal のメモリ消費量を 2.5 Gb 以上削減することに成功しました。VPSがクラッシュする(自宅のパソコンが弱くなる)確率が大幅に減少した。両ランをダイナミクスで見るとこのようになります。 順次起動することで、全体の初期化時間は伸びますが、ターミナルが膨大な量のRAMを消費することは何とか抑えられました。上下のグラフは、並列の初期化処理(左の高いピーク)と6回連続の初期化(中央の6つのピーク)を明確に示して います。SZY 実験中にスリープの不快なニュアンスが明らかになりました - ソースコード参照。 CopyTicksを使用した後、強制的にメモリを解放できるようにしたいのですが。そんなSleepの松葉杖を作らないこと。 fxsaber 2020.10.13 11:19 #536 指定された間隔でティック履歴を照会するために、最も安くメモリを消費する方法を教えてください。 Igor Makanu 2020.10.13 18:20 #537 fxsaber: 一定間隔でダニ履歴を要求する最も安価な方法を教えてください。 安いものを探しているのではなく、早くメモリを解放する方法を探しているように思えます。 をオプションでチェックすることができます。 - 動的配列MqlTick Ticks[]をクラスでラップし、newでオブジェクトを作成(つまり動的オブジェクト)、不要になったら削除する。 - 同じですが、構造体があり、ローカルスコープ(または関数、ローカルブロック{ } - または1回の繰り返しによるループ?私はEAコードの大半をクラスからデータ構造に置き換えたところ、最適化速度が大幅に向上しました。 - デストラクタにArrayFree()を追加してみる。 fxsaber 2020.10.13 18:23 #538 Igor Makanu:安いものを求めているわけではなく、手っ取り早くメモリを解放する方法を探しているのだと思います ターミナルはメモリーを解放しません。MQLの変数は関係ありません。 Igor Makanu 2020.10.13 18:32 #539 fxsaber:端末がメモリを解放していない。MQLの変数は関係ありません。 強制的にsize = 1にしたらどうでしょう? したらどうだろう MqlTick Tick[]; MqlTick ZeroTick[1] = {0}; ..... ArrayResize(Tick,1); ArrayCopy(Tick,ZeroTick) fxsaber 2020.10.13 18:36 #540 Igor Makanu:で、もし CopyTicksを呼び出した後、端末はすべてのデータを数秒間メモリに保持します。ティックの歴史の 一端を読み直したい人がいるかもしれないので、念のため。 つまり、Terminal が消費するメモリ量は、MQL 変数のサイズに依存しません。 タスクは、ターミナルにメモリーを強制的に解放させることです。 1...474849505152535455565758596061...94 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
なるほど、言い直します。mql以内であれば、プロセッサのクロック周波数にもよりますが、おおよそ可能です。
PWMについてはどうでしょうか?- 周波数が一定で、デューティサイクルが可変のパルス信号。
定数を設定しないのですか?
まず、WinAPIのSleep 関数とは何か、そして実際に何をするのかを読みます。
PS Windowsはリアルタイムシステムではない
まず、WinAPIのSleep関数がどのようなもので、実際に何をするものなのかについて読んでみましょう。
PS Windowsはリアルタイムシステムではない
エヘン、WinAPI Sleepがどう関係するんだ?
マイクロ秒のスリップについて話して いるとき
個別に、プロセッサのために、タイマーの周波数を決定し、繰り返し数を計算することができます。
では、mqlで独自のMicrosecondCountを書くことは可能だが、その意味は何だろうか?標準のもので十分です。
エヘン、お恥ずかしい話ですが、WinAPI Sleepはどんな関係があるのでしょうか?
マイクロ秒スリップの 話をするとき
個別に、プロセッサのために、タイマーの周波数を定義し、繰り返し回数を計算することができます。
では、mqlで独自のMicrosecondCountを書くことは可能だが、その意味は何だろうか?標準のもので十分です。
コンテキストスイッチなしで自分の保留中のスリップが100%コアを食いつぶすことになる。
これはキワモノ的なプログラミング手法だ。そのようなコードが市場に流出することを神は禁じています。
コンテキストスイッチのない待ち受けは、コアを100%食いつぶしてしまいます。
恐ろしいプログラミング方法です。そのようなコードが市場に流出することを神は禁じています。
そして、誰もそのハードコアを否定しなかった ))
コンテキストスイッチングの例を示せば、改善されるかも?
2コア4スレッドしかないVirtualBox上でのμsSLEEP(μsRange)のCPU負荷はこんな感じです。
鉱夫はもっとひどいことをする ))
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ:配列
fxsaber, 2020.10.13 12:54
ほとんどのVPSを殺すEAの一例。異なるシンボルのいくつかのチャートで動作させています。この 動作を自動化するために、inAmount = 5で このスクリプトを 使用しました。
結果
これら6つのExpert Advisorを実行するには、Terminalに4Gb以上のメモリが必要です。初期化にのみ必要で、これらのEAの運用には必要ないことにご注意ください。Expert Advisorをぶら下げた状態でターミナルを起動することを想像してください。正直4GbのRAMが使えないと......ほとんどダメですね。
では、この行のコメントをソースコードから削除してみましょう。
このように、Expert Advisorの逐次初期化を可能にしました。
結果を見てみましょう(再コンパイル後)。
Expert Advisors の起動時に、Terminal のメモリ消費量を 2.5 Gb 以上削減することに成功しました。VPSがクラッシュする(自宅のパソコンが弱くなる)確率が大幅に減少した。
両ランをダイナミクスで見るとこのようになります。
順次起動することで、全体の初期化時間は伸びますが、ターミナルが膨大な量のRAMを消費することは何とか抑えられました。
上下のグラフは、並列の初期化処理(左の高いピーク)と6回連続の初期化(中央の6つのピーク)を明確に示して います。
SZY 実験中にスリープの不快なニュアンスが明らかになりました - ソースコード参照。
CopyTicksを使用した後、強制的にメモリを解放できるようにしたいのですが。そんなSleepの松葉杖を作らないこと。
一定間隔でダニ履歴を要求する最も安価な方法を教えてください。
安いものを探しているのではなく、早くメモリを解放する方法を探しているように思えます。
をオプションでチェックすることができます。
- 動的配列MqlTick Ticks[]をクラスでラップし、newでオブジェクトを作成(つまり動的オブジェクト)、不要になったら削除する。
- 同じですが、構造体があり、ローカルスコープ(または関数、ローカルブロック{ } - または1回の繰り返しによるループ?私はEAコードの大半をクラスからデータ構造に置き換えたところ、最適化速度が大幅に向上しました。
- デストラクタにArrayFree()を追加してみる。
安いものを求めているわけではなく、手っ取り早くメモリを解放する方法を探しているのだと思います
ターミナルはメモリーを解放しません。MQLの変数は関係ありません。
端末がメモリを解放していない。MQLの変数は関係ありません。
強制的にsize = 1にしたらどうでしょう?
したらどうだろう
で、もし
CopyTicksを呼び出した後、端末はすべてのデータを数秒間メモリに保持します。ティックの歴史の 一端を読み直したい人がいるかもしれないので、念のため。
つまり、Terminal が消費するメモリ量は、MQL 変数のサイズに依存しません。
タスクは、ターミナルにメモリーを強制的に解放させることです。