記事"トレーダーのライフハック: インジケーターで作られたファストフード"についてのディスカッション - ページ 13

 
Vladimir Karputov:

- 素晴らしいコードと測定結果の説明がありました。

私はコードを見る機会がなかった。

 

インジケータを呼び出すと、速度が40%低下します。

MQL5スタイル

i = 0 Pass = 0 OnTester = 7.679 s.: Count = 9986677, 1300517.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 7.645 s.: Count = 9986677, 1306301.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4スタイル(キャッシュなし)

i = 0 Pass = 0 OnTester = 14.117 s.: Count = 9986677, 707422.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 14.067 s.: Count = 9986677, 709936.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4スタイル(キャッシュあり)

i = 0 Pass = 0 OnTester = 10.077 s.: Count = 9986677, 991036.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 10.104 s.: Count = 9986677, 988388.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755

キャッシュありのバリアントはMQL5スタイルのバリアントより32%遅い。キャッシュなしのバリアントに関しては、前述の40%は得られなかった。先ほどと同様、2倍遅い。しかし、利益という点では一致している。

 

申し訳ないが、なぜこの記事がMetaquotesに掲載されたのか理解できない。

mql5のインジケータハンドルの主な利点は、バッファから複数の値を取得する機能であり、あなたは完全にそれを破棄します。そして、ほとんどの場合、大きく効率が悪くなるコードを提供することです!私は、関数の 戻り値をチェックしないことからなる悪いコーディングのやり方についてでさえない。

この記事は役に立たないというか、最悪だ。人々がmql4を使い続けたいと思っていることに驚かないでほしい。

 
Alain Verleyen:

申し訳ないが、なぜこの記事がMetaquotesに掲載されたのか理解できない。

mql5のインジケータハンドルの主な利点は、バッファから複数の値を取得する機能であり、あなたは完全にそれを破棄します。そして、ほとんどの場合、大きく効率が悪くなるコードを提供することです!私は、関数の 戻り値をチェックしないように構成された悪いコーディングプラクティスについてでさえありません。

この記事は役に立たないというか、最悪だ。人々がmql4を使い続けたいと思っていることに驚かないでください。

あなたが正しいとは思わない。この記事は、第一に、あまり教育を受けていない、柔軟性のない趣味のプログラマーが、mql4と比べたmql5のインジケータの扱い方を理解する のに役立ち、第二に、MQL4で慣れ親しんだのと同じようにインジケータを使う方法を示している。
 

MQL5で単純なiVolumeをループで実行すると、プラットフォームがフリーズし、大量のコピーバッファコールが オペレーティングシステムへのddos攻撃のように作用し、ただトリップするだけだ。

同じマシンで、このことは私に必要以上のことを教えてくれている。

コミュニティからのすべてのシグナルとノイズを組み合わせると、私の結論は最初から正しかったということになる。

 
マークのみ
 

問題は、なぜインジケータの値を読み取るたびにバッファをコピーしなければならないのか、ということです。バッファはそこにあり、すでに計算されているのに、なぜその値に直接アクセスできないのか?

これはナンセンスだ!

インジケータ・バッファに 直接アクセスするだけでよく、何度も何度もコピーするのはパフォーマンスを低下させるだけです。

なぜMetaquotesがこのようなやり方をするのか、本当に理解できません。

CopyBuffer(...) vs buffer[i] ?

 
ludoz:

問題は、なぜインジケータの値を読み取るたびにバッファをコピーしなければならないのか、ということです。バッファはそこにあり、すでに計算されているのに、なぜその値に直接アクセスできないのか?

これはナンセンスだ!

インジケーター・バッファーに 直接アクセスするだけでいいのです。何度も何度もコピーしても、パフォーマンスが低下するだけです。

なぜMetaquotesがこのようなやり方をするのか、本当に理解できません。

CopyBuffer(...) vs buffer[i] ?

それはそれほど単純ではないからです。インジケータは1つのスレッドで実行され、EAは別のスレッドで実行されます(そして、複数のインジケータ/複数のEAを持つことができます)。handle/CopyBufferのような単純なプロシージャに文句を言うのであれば、マルチスレッド・アプリケーションを進めたくはないでしょう。

mql5は、ほとんどの "普通の "状況を管理できる汎用的なソリューションを提供します。もしあなたのプロジェクトで特定の問題があれば、いつでも解決策があります。

 
今はMQL5だが、ほとんどの人はまだmt4を使っている。