記事"ユニバーサルEA:カスタムストラテジーと補助トレードクラス(その3)"についてのディスカッション

 

新しい記事 ユニバーサルEA:カスタムストラテジーと補助トレードクラス(その3) はパブリッシュされました:

この記事では、ストラテジーの取引エンジンのアルゴリズムを分析していきます。シリーズの3番目の部分は、このアプローチを使用して、特定の取引ストラテジーを開発する方法の詳細な分析があります。特別な注意が補助アルゴリズムに必要です - EAは、従来のインデクサーを使用して、システムとデータへのアクセスをログに記録します(Close[1]、Open[0]など)

すべてのストラテジーを説明した後、そのインスタンスを作成し、必要なパラメータを指定 して、それらを初期化し、取引エンジンに追加する必要があります。エンジンにロードされたストラテジーは、それが返すべきいくつかの必要な属性(完全なプ ロパティ)を持っている必要があります。これらの属性は、次のプロパティが含まれます。

  • ストラテジーの一意の識別子(マジックナンバーです)。ストラテジーIDは、それらが同じクラスのインスタンスとして作成された場合でも、一意である必要があります。一意の番号を指定するには、ストラテジーのExpertMagic()を設定し、メソッドを使用します。
  • ストラテジーの時間枠(またはその動作期間)。ストラテジーは、同時に複数の期間で実行されている場合でも、作業時間枠を指定する必要があります。この場合、例えば、最も頻繁に使用される時間枠であってもよいです。期間を指定するには、時間枠を設定し、メソッドを使用します。
  • ストラテジーのシンボル(またはその作業インストゥルメンタル)。ストラテジーは、複数のシンボル(多通貨ストラテジー)で動作する場合でも、作業シンボルを指定する必要があります。これは、ストラテジーによって使用されるシンボルのいずれかになります。
  • ストラテジー名。上記の属性に加えて、各ストラテジーはまた、独自のstringの 名前を持つ必要があります。EA名はExpertNameセットメソッドを使用して指定されています。Strategies.xmlファイルからストラテ ジーの自動生成に使用されるため、このプロパティは必要とされます。同じプロパティは、第四の記事で説明するユーザパネルでストラテジーを表示するために 使用されます。

作者: Vasiliy Sokolov

 
実に興味深い。確かに開発プロセスをスピードアップし、簡素化することは可能だ。ポジションをオープンするために標準ライブラリの メソッドを使用していますが、他の標準クラス(マネー・マネジメント、トレイリング・ストップ)についてはどうでしょうか。それらをエンジンに追加することは可能ですか?
 
hftech:
実に興味深い。確かに開発プロセスをスピードアップし、簡素化することは可能だ。ポジションをオープンするために標準ライブラリの メソッドを使用していますが、他の標準クラス(マネー・マネジメント、トレイリング・ストップ)についてはどうでしょうか。それらをエンジンに追加することは可能ですか?

特別なアダプターを通して 他の標準クラスを使用することができます。しかし、ここで難しいのは、これらのクラスはMetaTrader 5用に設計されており、プラットフォームに依存しているのに対し、CStrategyエンジンはそうではないということです。注意深い読者なら、エンジンが意図的にすべてをOOPレイヤーで包んでいることにすでにお気づきだろう。

CStrategyをMetaTrader 4に移植するのだ。そうすれば、エンジンの助けを借りて書かれたストラテジーはコンパイルされ、両方のプラットフォームで同時に実行されることになる。

P.S.実際、このエンジンは標準のCTrade取引クラスを使用せず、CTradeによく似ており、CTradeを継承しているがCTradeではない、ある種のCTradeControlを使用してポジションをオープンする。将来的にはMT4に移植することで、CStrategyをプラットフォームに依存しないものにすることができるでしょう。

 
Vasiliy Sokolov:

また、特別なアダプタを介して 他の標準クラスを使用することもできます。しかし、ここで難しいのは、これらのクラスはMetaTrader 5用に設計されており、プラットフォームに依存しているのに対し、CStrategyエンジンはそうではないということです。注意深い読者ならすでにお気づきだろうが、CStrategyエンジンはすべてをOOPレイヤーでラップしている。

CStrategyをMetaTrader 4に移植するのだ。そうすれば、エンジンの助けを借りて書かれたストラテジーはコンパイルされ、両方のプラットフォームで同時に実行されることになる。

P.S.実際、このエンジンは標準のCTrade取引クラスを使用せず、CTradeによく似ていて、CTradeを継承しているがCTradeではない、ある種のCTradeControlを使用してポジションをオープンする。将来的にはMT4に移植することで、CStrategyを真にプラットフォームに依存しないものにすることができるでしょう。

将来ということですが、アップデートはどのように行われるのですか?ライブラリの新バージョンを定期的に掲載するのですか?そうでなければ、新しいバージョンをダウンロードしても、現在の開発で何かが欠けてしまうでしょう。


特別なアダプターを 使えば、他の標準クラスを使うことができる。

そのようなアダプターの例を読むのは面白いだろう。

P.S.実際、このエンジンは標準的なCTrade取引クラスを使用しておらず、CTradeによく似ていて、CTradeを継承しているがそれではないCTradeControlを使用してポジションをオープンしている。将来的には、これをMT4に移植することで、CStrategyを真にプラットフォームに依存しないものにすることができるでしょう。

はい、CTradeCustomにも似たようなCTradeメソッドがありますが、標準ライブラリは まだ使用されています:

#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
 

プラットフォームの独立性については、コンセプトは確かに面白いが、実際にそれを必要とする人はいない。私の意見では、誰もがとっくに選択している。MT5は、主に証券取引所で働く人にとって興味深いものです。MT4はFXとCFDに最適です。通常、外国為替に従事する人は株式市場に従事しませんし、その逆も同様です。1つのストラテジーを書いて、両方のプラットフォームで実装する必要があるのは誰でしょうか?ロボット販売者だけだ。しかし、これは私の個人的な意見であり、もしかしたら間違っているかもしれない。

MT5だけで仕事をしている者として、同じCTradeControlの機能を拡張することに興味があります。例えば、指値注文のみでポジションを建てる ことや、現在のボラティリティやスタック内の需給を考慮した興味深いアプローチを使用することなどです。

 
hftech:

将来的にはとおっしゃっていますが、アップデートはどのように行われるのですか?ライブラリの新バージョンを定期的にアップするのですか?今日のコードが変更されない、あるいは新しいバージョンをダウンロードして、現在の開発で何かが落ちないという保証はあるのでしょうか?

残念ながら保証はありません。エンジンのシンプルさ/信頼性/インフラストラクチャーを大幅に改善するような変更が必要な場合、少なくともコードベースを形成する最初の段階では、そのような変更が行われるでしょう。

しかし、このような変更の可能性については、あまり心配する必要はありません。なぜなら、第一に、変更が行われるとしても、ほとんどの場合、エンジンの内部構造で行われ、ユーザーはこのような変更を感じることはないからです。第二に、与えられたアルゴリズムは、長年の実践と他のプラットフォームでテストされています。それらは本当に機能する。有限オートマトンやWealth-Labが提供するようなテンプレートに基づくモデルなどです。

新しいバージョンについては......いずれわかるだろう。まだカバーできていない部分がいくつかある(プラットフォーム非依存性と保留中の注文の 処理)。私はエンジンを完成させるための力を見つけるつもりです。 - その後、新しい拡張版と、記事の形でこれらの機能に対応するドキュメントがあるでしょう。

 
hftech:

プラットフォームの独立性については、コンセプトは確かに面白いが、実際にそれを必要とする人はいない。 私の意見では、誰もがとっくに選択している。MT5は、主に証券取引所で働く人にとって興味深いものです。MT4はFXとCFDに最適です。通常、外国為替に従事する人は株式市場に従事しませんし、その逆も同様です。1つのストラテジーを書いて、両方のプラットフォームで実装する必要があるのは誰でしょうか?ロボット販売者だけだ。しかし、これは私の個人的な意見であり、もしかしたら間違っているかもしれない。

MT5だけで仕事をしている者として、同じCTradeControlの機能を拡張することに興味があります。例えば、指値注文のみでポジションを建てる ことや、現在のボラティリティやスタック内の需給を考慮した興味深いアプローチを使用することなどです。

実際には、多くの人が2つのプラットフォームを同時に操作しなければなりません。例えば、MT4では独自のデータでテストし、MT5では取引を行う(MT5が独自のデータフィードを持つまで、状況は変わらない)。そして、ここでは、両方のプラットフォームで同時に同じアルゴリズムを実装することが非常に重要です。そうでなければ、不愉快なサプライズが起こり得る。

また、ベンダーやフリーランサーにとっては、悪名高い非互換性を心配することなく、同時に2つのプラットフォーム用に書くことができ、非常に便利です。ところで、フリーランサーを後景に追いやるのは間違っている。フリーランサーは非常に大量のコードを書くし、とても忙しい。さまざまなコンセプトやエンジンを開発する時間はない。だからこそ、彼らにツールとその明確な説明を与えることが重要なのだ。多くの人にとって、たとえプログラミングに詳しくない人でも、このツールは生活をずっと楽にし、TORをより明確に(エンジンのルールに)定式化するのに役立つだろう。

 
Vasiliy Sokolov:

実際には、多くの人が同時に2つのプラットフォームで作業しなければならない。例えば、MT4では独自のデータでテストし、MT5では取引を行う(MT5が独自のデータフィードを持つまで、状況は変わらない)。そして、ここでは、両方のプラットフォームで同時に同じアルゴリズムを実装することが非常に重要です。そうでなければ、不愉快なサプライズが起こり得る。

また、ベンダーやフリーランサーにとっては、悪名高い非互換性を心配することなく、同時に2つのプラットフォーム用に書くことができ、非常に便利です。ところで、フリーランサーを後景に追いやるのは間違っている。フリーランサーは非常に大量のコードを書くし、とても忙しい。さまざまなコンセプトやエンジンを開発する時間はない。だからこそ、彼らにツールとその明確な説明を与えることが重要なのだ。多くの人にとって、たとえプログラミングに精通していなくとも、それは人生をはるかに容易にし、TORをより明確に(エンジンのルールに)定式化するのに役立つだろう。

記事をありがとう!続きを待っています。

Cstrategyをmt4に移植するためのシェルクラスがすぐに追加で書かれると思いますし、Trade.Buy(MM.GetLotFixed(), ExpertSymbol(), "");

のような単純な行は、両方のプラットフォームで同じようにコンパイルされます。

しかし、これまでのところ、ユニバーサルエキスパートアドバイザーはコンパイル段階でのみプラットフォームに依存しないことが判明しています。

1) mt4 tester と mt5 real/demo account で同じポジションを開く ことは可能ですか?mt4 のデータを使用し、もちろんエンジンも使用します。テスターとリアル口座の間のOHLCはそれに応じて異なる可能性があり、インジケーターの読みは異なり、したがって取引の可用性も異なります。

2) プラットフォーム間の注文と取引の概念の乖離についても考える必要があります。つまり、mt5 のロジックに従った mt4 での多方向ポジションのオープンの可能性を排除する必要があります。

この2つの問題をどのように解決しますか?または、エンドユーザーが自分で対処できますか?)

ありがとうございます。

 
Arnold Bobrinskiy:

2) プラットフォーム間の注文と取引の概念の乖離についても考える必要がある。つまり、mt5 のロジックに固執して、mt4 で多方向のポジションを建てる可能性を排除する必要があります。

エンジンには多方向のポジションを建てることに関する制限はありません。それどころか、もともと多方向のポジションを管理するように書かれています。つまり、MT4ではMT5よりもすべてが標準的であることに変わりはありません。
 
Vasiliy Sokolov:
つ目の質問にはすぐに答えられる。エンジンは多方向のポジションを開くことに何の制限もない。それどころか、もともと多方向のポジションを管理するように書かれています。つまり、MT4ではMT5よりもすべてが標準的です。
しかし、その場合、Expert Advisorはどのように同じようにロジックを繰り返すのでしょうか?例えば、mt5では買いポジションが 0.2ロットで建てられ、0.2ロットの売りコマンドの後、ポジションは決済されます。この場合、mt4では多方向のポジションが2つありますが、mt5ではオープンポジションはなくなります。
 
Arnold Bobrinskiy:
では、Expert Advisorはどのようにして同じようにロジックを繰り返すのでしょうか?例えば、mt5で買いポジションを 0.2ロットでオープン し、0.2ロット売りコマンドの後にポジションをクローズします。この場合、mt4では多方向のポジションが2つありますが、mt5ではオープンポジションはなくなります。

MT5では、Expert Advisorが管理するポジションは1つだけになります。MT4では、Expert Advisorは複数のポジションを順次受け取ります。MT5で現在のポジションを確認せずに(売りポジションがある場合は買い、買いポジションがある場合は売り)転換操作を行うと、ポジションはクローズされ、次のコールでExpert Advisorはポジション維持モジュールを呼び出さなくなります。

トップダウンの互換性も明らかです。MT5用に作成され、一方向に1つのポジションのみを取引するExpert Advisorは、MT4で正常に機能します。MT4で一度に複数のポジションを取引するExpert Advisorは、MT5で同じロジックを実行することはできません。しかし、ポジションが一方向にのみ取引される場合、MT5では何の問題もないはずです。