記事「多通貨エキスパートアドバイザーの開発(第3回):アーキテクチャの改訂」についてのディスカッション

 

新しい記事「多通貨エキスパートアドバイザーの開発(第3回):アーキテクチャの改訂」はパブリッシュされました:

複数の戦略が並行して動作する多通貨EAの開発はすでにある程度進んでいます。蓄積された経験を考慮し、先に進みすぎる前に、ソリューションのアーキテクチャを見直し、改善を試みましょう。

EAオブジェクト(CAdvisorクラスまたはその子孫)を割り当てたが、これは取引戦略オブジェクト(CStrategyクラスまたはその子孫)のアグリゲーターです。EA操作の最初に、OnInit()ハンドラで以下のことが起こります。

  • EAオブジェクトが作成されます。
  • 取引戦略のオブジェクトが作成され、EAの取引戦略の配列に追加されます。

OnTick()イベントハンドラでは、次のことが起こります。

  • CAdvisor::Tick()メソッドが EA オブジェクトのために呼ばれます。
  • このメソッドは、すべての戦略を反復処理し、それらのCStrategy::Tick()メソッドを呼び出します。
  • CStrategy::Tick()内の戦略は、マーケットポジションのオープンとクローズに必要なすべての操作を実行します。

これを図式化するとこうなります。

このモードの利点は、ある取引戦略に従ったEAのソースコードがあれば、比較的簡単な操作で他の取引戦略のインスタンスとEAを連動させることができることでした。

しかし、主な欠点がすぐに浮かび上がった。複数の戦略を組み合わせる場合、戦略の各インスタンスで建てるポジションのサイズをある程度小さくしなければなりません。このため、一部の、あるいはすべての戦略インスタンスが取引から完全に排除される可能性があります。並行作業に含める戦略インスタンスが多ければ多いほど、あるいは初期預託金が少なければ少ないほど、そのような結果になる可能性は高くなります。

作者: Yuriy Bykov