バーイベントは、任意のcBotのライフサイクルにおいて重要な要素です。これらのイベントを適切に処理することは、新しい市場状況に対するcBotの反応を管理する上で非常に重要です。この記事と対応するビデオでは、主要なバーイベントの種類を示し、cTrader APIによって公開されているこれらのイベントのハンドラーについて説明します。
注記
「バー」という用語は、cTraderによって取引チャート上に順次描かれるさまざまなタイプのオブジェクトを指します。これには、ローソク足、レンコブリック、レンジバー、さらにはヘイキンアシキャンドルも含まれます。
BarOpenedイベントの処理
バーイベントは、新しいバーがcBotにアタッチされた取引チャート上に描画され始めたときに発生します。BarOpened
イベントは、チャート上に描画され始めた新しいバーに対して発生します。
このイベントの処理は、Robot
クラスから継承されたOnBar()
メソッドを介して行われます。ここでは、BarOpened
イベントを処理するcBotを作成し、市場のセンチメントを分析するための戦略の一部として使用します。テンプレートからOnStart()
およびOnStop()
メソッドを削除し、OnTick()
ハンドラーをOnBar()
ハンドラーに置き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
このcBotはD1タイムフレームのチャート上で起動することを想定しています。各バーごとに、前のバーのオープン価格と比較し、適切な方向に新しい注文を出します。価格差がわずかである場合、ボットは代わりにすべての現在のポジションを閉じます。
このシンプルなボットのバックテストを実行すると、結果は有望です。
BarClosedイベントの処理
新しいバーが開くと、そのオープン価格以外の価格データは実質的に存在しません。多くの場合、戦略をスムーズに実行するために、前のバーのデータにアクセスすることが望ましいです。このため、BarClosed
イベントは、閉じたばかりのバー(つまり新しいバーの直前のバー)に対して発生し、その価格とボリュームデータを簡単に使用できるようにします。BarClosed
イベントがトリガーされると、新しく開かれたバーはBars
コレクションから完全に除外されます。
BarClosed
イベントを処理するには、APIはOnBarClosed
メソッドを公開しています。
注記
前の例では、Bars.LastBar.Open
プロパティを使用して、新しく開かれたバーのオープン価格を取得しました。同じプロパティをOnBarClosed()
メソッドで使用すると、閉じたばかりのバーのオープン価格を取得することになります。
以下のように、OnBarClosed()
ハンドラーを使用するシンプルなcBotを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
このcBotは、ローソク足の下ヒゲの長さを評価して強気の「ハンマー」パターンを検出します。ハンマーパターンが検出された場合、以前に開かれたすべてのポジションが閉じられ、50ピップのストップロス付きで新しい買い注文が出されます。
このボットのバックテストを実行すると、良好な結果が得られます。
カスタムイベントハンドラーの追加
BarOpened
およびBarClosed
イベントを処理する際には、カスタムハンドラーを割り当てることで、やや異なる構文を使用することもできます。OnBar()
およびOnBarClosed()
は一度しかトリガーされませんが、カスタムハンドラーを必要なだけ割り当てることができ、複雑なロジックを追加することができます。
注記
カスタムイベントハンドラーは、OnStart()
メソッド内で追加する必要があります。カスタムハンドラーはまた、BarOpenedEventArgs
(BarOpened
イベントの場合)またはBarClosedEventArgs
(BarClosed
イベントの場合)の引数を受け入れる必要があります。
1 2 3 4 5 6 7 8 9 10 |
|
次に、強気と弱気の反転に反応するために、BarOpened
イベント用の2つのカスタムハンドラーを使用するcBotを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
このボットは、新しく開いたバーのオープン価格が2つ前のバーのクローズ価格よりも高い場合に買い注文を出します。オープン価格が2つ前のバーのクローズ価格よりも低い場合には、売り注文を出します。2つの別々のイベントハンドラーを使用することで、取引ロジックを小さなコンポーネントに分割し、必要に応じて簡単に変更できるようにします。
D1タイムフレームでのバックテストの結果も良好です。
まとめ
バーイベントの適切な処理方法を学ぶことで、cBotがあなたの望むとおりに動作し、望むタイミングで実行されるようにすることができます。cBotの使用方法や開発について詳しく知りたい場合は、ドキュメントの他のセクションをご覧いただき、新しいビデオを公開した際に通知を受け取るためにYouTubeチャンネルを購読してください。
Subscribe to our YouTube channel