PLO - ページ 2

 
Interesting:

実際、MQL5で実装されたOOPは、(端末自体のリソースと合わせて)大幅なスピードアップを実現します。

動作速度とは、プログラムの速度なのか、書き込みの速度なのか、どちらを指しているのでしょうか?

 
Integer:

OOPでは性能は上がらない。これはいくつかの利点があります。例えば、いくつかのパラメータで呼び出される関数(例えばEMA計算)がある場合、関数内で静的変数が使用され、以前のEMA値が保存されます。この関数は、計算が行われる最後の値を保存するので、次にこの関数を 呼び出すときには、他のパラメータ(シンボル、タイムフレーム、平滑化期間)で呼び出すことはできません。したがって、この関数を別のパラメータで呼び出す必要がある場合は、別の名前でコピーするか、静的変数ではなく、参照渡しグローバル変数を使用する必要があります。これは、オブジェクトを使った方が便利な唯一のケースです。オブジェクトのインスタンスをロードして、そのパラメータを設定し、パラメータなしでメソッドを呼び出すのです。もしオブジェクトがメソッドを含んでいて、その実行が以前の実行や、一般的にオブジェクトがロードされたパラメータに依存しない場合、それはリソースの消費以外には何も与えません。

そうなんです、そうなんです、本当にそうなんです。しかし、すべては経験と想像力とプログラマーの手の曲がり具合に依存する......(以下略)。:)

そして実際、OOPが(最もひどいアプローチで)ランタイムを増加させない、あるいはランタイムを取るに足らないものと仮定しても(10倍の増加が取るに足らないと言えるのか、個人的には疑問ですが)、OOPのありとあらゆるデメリットよりも、開発者の理解にとって有用であることは間違いないでしょう。

MQL5がOOPを含むなら、MQL4にはない(ライブラリを除く)プログラミングのモジュール(単位)アプローチの発展に何らかの形で貢献することになる、ということです。これは、構造体やクラス、あるいはそれらのグループを別のファイル(モジュール)に配置し、必要なときに利用するのが便利だからである。

また、抽象化、カプセル化、継承、ポリモーフィズムにより、クラスを使用することで、準備のできたブロック(モジュール)をデバッグし、その内容を考えずに自分の作業に使用することができるようになります。

また、OOPの使用により、トレーディングシステムにおいて外部DLLなどのソフトウェアチューニングを使用する際のレベルや利便性が向上するはずです。

ライブラリの活用と合わせて、開発者の負担は何十倍にもなり、かなり複雑なEAの開発スピードも大幅に向上します。

 
Integer:

動作速度とは、プログラムの実行速度と書き込み速度のどちらを指しているのでしょうか?

両方です。開発速度に関する詳細は上に書いたとおりですが(もちろん、ある程度クラスを開発・使用した経験があれば、すべて理解できます)...。
 
Interesting:

そうなんです、そうなんです、そうなんです...。

誰がそんなこと言ったんだ?そんなことないですよ。その他はすべて正しい。

 
Integer:

誰がそんなこと言ったんだ?そんなことないですよ。その他はすべて正しい。

繰り返しになりますが、増えるんです、増えるんです、どれだけ増える んでしょう。しかし、それは経験と想像力、そしてプログラマーの手の曲がり 具合に左右される......。

昔々、私のEAの初期化速度を比較したことがあります。細かい点を除けば、プログラムコードは同じでした(MQL5ではマイグレーションライブラリを使用)。そして、MQL5の初期化は平均で2.5倍速いことが判明しました。

もちろん、指標にならないことは承知していますが、それでも正しいアプローチでMQL5のスピードは今からでも10倍は速いと確信しています。

永遠に議論することができますが、OnTrade() またはOnChartEventを 実装してみてください、すべてが明らかになります。でも、これら以外にも「いいもの」はたくさんあるんです...。

追記

もちろん、ストラテジーテスターやインジケーターにはスピードの問題があります。しかし、これらの欠点は、端末の開発者やトレーディングエキスパートアドバイザーの作者によって、やがて解消されるでしょう。

なお、MQは「プログラムコードの実行速度の最大値はまだ出ていない(まだ私が知る限り)」と複数回発言している...。

 
増加する...増加する...あとは、鐘を片手にカソックを着て、マントラに合わせて歌うだけです。MQL5がMQL4より速いのは、オブジェクトをサポートしているからではありません。
 
Integer:
増加する...を増やす......鈴を片手にマントラで歌い、フロックに身を包んだ方がいい。

Integer:
MQL5がMQL4より速いのは、オブジェクトをサポートしているからではありません。
それでも、ほとんどの場合、その方が速いんです。私見ですが、MQL5と MQL4(あるいは他のプログラミング言語)を、オブジェクトを扱う スピードという点で比較するのは適切ではありません。
 

GetTickCount() 関数を使用して、OOP を 使用した場合と使用しない場合の同様の Expert Advisor をテストしてみました。

my_oop_ea のテスト ( OOP を使用 )

RJ 0 Core 1 15:12:15 テスト時間 =115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 bars) generated within 115203 ms (total bars in history 9199)

RP 0 Core 1 15:12:15 Disconnected


My_First_EAテスト(OOPなし)

RH 0 Core 1 15:18:54 Test Time =90578

CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 ticks (3052 bars) generated within 90578 ms (total bars in history 9199)

OR 0 Core 1 15:18:54 Disconnected


その差はわずかですが、OOPに有利なわけではありません。そして、最適化の場合は、この差に実行回数を乗算する、というのが私の理解です。

自分自身で結論を出した。

また、標準のMACDサンプルEAをMT5用(OOP付き)とMT4用で比較してみました。

MacdサンプルMT5

FO 0 Core 1 18:03:21 テスト時間 =126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 bars) generated within 126016 ms (total bars in history 545615)


MacdサンプルMT4

18:12:52 2010.06.30 23:59 MACDサンプルEURUSD,M1:タイムテスト=64406

結果は驚くべきもので、OOPを使ったMT5とMQLはリソースを食うだけでなく、時間も食うのです。

 

異なるMT4とMT5プラットフォームをテストする場合、OOPに特化した結論を出すことはできません。結果の違いは、システムアーキテクチャの違いによるものが90%です。

なお、MQL5のコードオプティマイザは当面の間、無効化されており、現在微調整中です。有効にすると、すぐに結果が何倍にも改善されます。

昨日、MQL4とMQL5の速度を比較した記事が公開されましたが、一読されることをお勧めします。

MQL5 移動平均のパフォーマンスに関する分析」を公開しました。

最初の単純移動平均の指標が作られて以来、様々な指標が登場しました。その多くは、類似の原理に基づいていたり、計算の際にある種の価格系列処理の方法を用いていたりする。しかし、このような指標の計算速度や使用するアルゴリズムの最適性については、未解決のままであることが多い。この記事では、移動平均を使用するためのすべての可能なオプションについて説明し、それぞれの比較分析を行っています。

著者:セルゲイ

 


別のパラメータを持つ関数の方が明らかに遅い。本当にパラメータのせいだけなのでしょうか?

ファイル:
test.mq5  2 kb