これは主に理論的な質問です (ただし、サンプル コードは常に歓迎されます)。
本当の問題は、複数のカスタム インジケーターから複数のシナリオをテストする EA の「フレーム」を正しくコーディングする方法です。
私が (忙しい) EA を構築する方法は、1 つの戦略にあまり焦点を当てていませんが、複数の戦略を「テスト」し、最も適切なものを「選択」しようとしています。
そのため、すべて「ステータス データ」の配列を返すいくつかのカスタム インジケーターを作成しました。
たとえば、次の指標があります。
- クロス移動平均インジケータ, 平均がクロスされたときにシグナルを発し、現在の位置が MA から移動したパーセンテージで示されます.
- ボリンジャー バンド インジケーター。バンド間の「余裕」を返し、バンドが「圧迫」を開始したときにシグナルを出します。
- 複数の時間枠の「方向/トレンド」インジケーター(上昇または下降に向かって移動する特定の時間枠です)。これは現在の方向を返し、時間枠の方向が変化した場合にシグナルを発します。
- 「小規模な」動きをチェックし、最良の売買ポイントを選択するためのADX インジケーター。
巨大なシナリオを 1 つ書くこともできますが、もっとうまくできると思います。たとえば、すべての時間枠が下降している場合 (下降トレンド)、多くの下降の動きを処理するための特別なシナリオを用意できます。しかし、現在の傾向がない場合は、別のシナリオが最適です。
なので、複数のシナリオを作るのがベストだと思います (まだ 1 EA です)。最初にすべてのカスタム指標データが収集され、次に各シナリオがそのデータを使用して計算を行います。次に、「スコア」を返し、最高のスコアが選択されます。
しかし、コードを最適な「概要」の方法でレイアウトするにはどうすればよいでしょうか?
シナリオごとにクラスを作成し、データを使用して手動で「チェック」する必要がありますか? そして、それらを複数のファイルに分割するだけ#include
ですか?
それともイベント駆動型ですか?リスナーを特定の指標イベントに対して実行、計算、および設定し続け、独自の方法でそこに移動するクラスを作成しました (それは素晴らしいことです)。
どんな考えでも大歓迎です!
アップデート2016-01-11,12:00
今は UML を作成する時間がありません..しかし、私は今のところ次のことを行います ->
Order
(Order
シングルトンで、注文リクエストを実行するだけです)Indicator
(各指標が拡張する基本クラス)Strategy
(各戦略が拡張する基底クラス)IndicatorFetcher
(すべてのインジケーターを保持し、各ティックで実行されます)StrategyRunner
(すべての戦略を保持し、各ティックで実行されます。IndicatorFetcher
)
各Strategy
インスタンスはIndicatorFetcher
(すべてのインジケーターのデータを含む概要を保持し、Order
シングルトンを使用して取引を実行する) へのアクセスを取得します。