コンテンツにスキップ

Breakout cBot

戦略概要

Breakout cBotは、シンボル価格が事前に定義されたサポートまたはレジスタンスのレベルを超えて動く瞬間を利用します。

このcBotは、上部と下部のBollinger Bands間の距離をユーザー定義のしきい値と比較して価格の統合を監視し、次の操作を行います:

  • シンボル価格が指定された期間、統合範囲内にとどまる場合、cBotは市場が統合中であると識別します。
  • 価格が上部バンドを上回ると、買いポジションを開きます。 価格が下部バンドを下回ると、売りポジションを開きます。
  • ポジションを開く際、ユーザー定義のストップロスとテイクプロフィットの値を適用します。

cBotは統合フェーズ後のブレイクアウト動向を利用するため、明確な統合期間と急激な方向性の動きを示す市場やシンボルに適しています。

cBotの作成

C#またはPythonを使用してcBotを作成する方法を、ステップバイステップのガイドで学びます。

Breakout cBotのコードは、公開されているC#およびPythonリポジトリで利用可能です。 同じコードが、cTrader WindowsまたはMacのアルゴリズム作成ウィザードでテンプレートとして提供されており、以下のスニペットをコピーして使用することもできます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleBreakoutcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Stop Loss (pips)", Group = "Protection", DefaultValue = 20, MinValue = 1)]
        public int StopLossInPips { get; set; }

        [Parameter("Take Profit (pips)", Group = "Protection", DefaultValue = 40, MinValue = 1)]
        public int TakeProfitInPips { get; set; }

        [Parameter("Source", Group = "Bollinger Bands")]
        public DataSeries Source { get; set; }

        [Parameter("Band Height (pips)", Group = "Bollinger Bands", DefaultValue = 40.0, MinValue = 0)]
        public double BandHeightPips { get; set; }

        [Parameter("Bollinger Bands Deviations", Group = "Bollinger Bands", DefaultValue = 2)]
        public double Deviations { get; set; }

        [Parameter("Bollinger Bands Periods", Group = "Bollinger Bands", DefaultValue = 20)]
        public int Periods { get; set; }

        [Parameter("Bollinger Bands MA Type", Group = "Bollinger Bands")]
        public MovingAverageType MAType { get; set; }

        [Parameter("Consolidation Periods", Group = "Bollinger Bands", DefaultValue = 2)]
        public int ConsolidationPeriods { get; set; }

        BollingerBands bollingerBands;
        string label = "Sample Breakout cBot";
        int consolidation;

        protected override void OnStart()
        {
            bollingerBands = Indicators.BollingerBands(Source, Periods, Deviations, MAType);
        }

        protected override void OnBar()
        {
            var top = bollingerBands.Top.Last(1);
            var bottom = bollingerBands.Bottom.Last(1);

            if (top - bottom <= BandHeightPips * Symbol.PipSize)
            {
                consolidation = consolidation + 1;
            }
            else
            {
                consolidation = 0;
            }

            if (consolidation >= ConsolidationPeriods)
            {
                var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);
                if (Ask > top)
                {
                    ExecuteMarketOrder(TradeType.Buy, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
                else if (Bid < bottom)
                {
                    ExecuteMarketOrder(TradeType.Sell, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleBreakoutcBot():
    Label = "Sample Breakout cBot"
    def on_start(self):
        self.bollingerBands = api.Indicators.BollingerBands(api.Source, api.Periods, api.Deviations, api.MAType)

    def on_bar(self):
        top = self.bollingerBands.Top.Last(1)
        bottom = self.bollingerBands.Bottom.Last(1)

        if top - bottom <= api.BandHeightPips * api.Symbol.PipSize:
            self.consolidation += 1
        else:
            self.consolidation = 0

        if self.consolidation >= api.ConsolidationPeriods:
            volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
            if api.Ask > top:
                api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 
            elif api.Bid < bottom:
                api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 

インジケーターの統合

Bollinger Bandsインジケーターは、Breakout cBotが採用する戦略の中心です。

cBotはBollinger Bandsの幅(上部バンドと下部バンドの間の距離)を使用して、統合期間を識別します。 バンドが狭い(低ボラティリティを示す)場合、cBotはこれを統合期間と見なします。

上部バンドと下部バンドの差が指定されたしきい値(BandHeightPips)以下の場合、統合カウンター(consolidation)が増加します。 cBotは潜在的なブレイクアウトを考慮する前に、一定数の連続した統合期間(ConsolidationPeriods)を必要とします。

cBotは次のようにブレイクアウトの価格を監視し解釈します:

  • 強気のブレイクアウト - アスク価格が上部のBollinger Bandを超えると、cBotはこれを強気のブレイクアウトと解釈し、買い注文を実行します。
  • 弱気のブレイクアウト - ビッド価格が下部のBollinger Bandを下回ると、cBotはこれを弱気のブレイクアウトと解釈し、売り注文を実行します。

取引を実行した後、統合カウンターはゼロにリセットされます。

計算とロジック

Bollinger Bandsのセットアップ

\[ B_{\text{top}} = MA + (D \times \sigma), \quad B_{\text{bottom}} = MA - (D \times \sigma) \]

\(B_{\text{top}}\) – 上部バンド

\(B_{\text{bottom}}\) – 下部バンド

\(MA\) – 移動平均

\(D\) – 偏差の数

\(\sigma\) – 標準偏差

統合条件

\[ \text{もし } (B_{\text{top}} - B_{\text{bottom}}) \leq (H \times P), \text{ なら、 } C_{\text{counter}} = C_{\text{counter}} + 1 \]

それ以外の場合、

\[ C_{\text{counter}} = 0 \]

\(H\) – バンドの高さ(pips)

\(P\) – pipsサイズ

\(C_{\text{Counter}}\) – 統合カウンター

統合期間チェック

統合カウンターが統合期間を超えた場合、ブレイクアウトロジックを実行します。

ブレイクアウトロジック

買値が上限バンドを上回る場合、買い注文を実行します。 売値が下限バンドを下回る場合、売り注文を実行します。

パラメーター

パラメーター 単位 定義 ヒント
数量 ロット 各取引の取引高。 リスク許容度の低いトレーダーは、潜在的な損失を最小限に抑えるために少額から始めることができます。

リスク許容度の高いユーザーは、より大きな利益を目指して高額を設定することができます。
損切り Pip これ以上の損失を防ぐために取引が自動的にクローズされるpips数。 リスク回避型のトレーダーは、潜在的な損失を制限するために厳しい損切り値を設定することができます。

市場の変動を許容できるユーザーは、より広い損切り値を設定し、クローズする前に取引により多くの余裕を持たせることができます。
利食い Pip これ以上の損失を防ぐために取引が自動的にクローズされるpips数。 素早い退出を好むトレーダーは、短期的な動きを活用するために低い利食い値を使用することができます。

長期的なトレンドを狙うユーザーは、取引をより長く継続できるように高い利食い値を設定することができます。
バンドの高さ Pip cBotが低ボラティリティ期間を識別できるようにする、統合フェーズ中のBollinger Bandsの最大幅。 タイトな統合に焦点を当てるトレーダーは、低ボラティリティ期間からの大きなブレイクアウトを狙うために低いバンドの高さの値を使用することができます。

より広い範囲に慣れているユーザーは、バンドの高さの値を増やすことで、cBotがやや広い統合を潜在的なセットアップとして考慮できるようにすることができます。
Bollinger Bandsの偏差 Bollinger Bandsの幅を計算するために使用される標準偏差値。 タイトな統合に焦点を当てるトレーダーは、低ボラティリティ期間からの大きなブレイクアウトを狙うために低いバンドの高さの値を使用することができます。

より広い範囲に慣れているユーザーは、バンドの高さの値を増やすことで、cBotがやや広い統合を潜在的なセットアップとして考慮できるようにすることができます。
Bollinger Bandsの期間 Bollinger Bandsを計算するために使用される期間の数。 短期的な市場の動きに焦点を当てるトレーダーは、小さな期間を使用することができます。これによりBollinger Bandsが最近の価格変動により敏感になります。

長期的なトレンドに興味のあるユーザーは、大きな期間を検討すべきです。これによりBollinger Bandsが平滑化され、短期的な変動への感度が低下します。
統合期間 ブレイクアウト取引が検討される前に、統合基準を満たす必要がある連続バーの数。 より頻繁な取引を求めるトレーダーは、統合期間を減らすことで、cBotがより早く取引に参入できるようにすることができます。

確認されたブレイクアウトを好むユーザーは、アクションを取る前に価格が統合範囲内により長く留まるようにするために、統合期間を増やすことができます。

応用

トレンド相場

Breakout cBotはトレンド市場(上昇または下降)でよく機能します。 このような市場では、ブレイクアウトは統合期間後に全体的なトレンドに沿って発生することが多く、大幅な価格変動につながります。

ユースケース

EURUSDが強い上昇トレンドにあるが一時的に狭い範囲で統合している状況を考えてみましょう。 Bollinger Bandsが狭まり、ボラティリティの低下を示します。 cBotはこの統合を検出し、ブレイクアウトを待ちます。 トレンドが再開すると、価格が上部Bollinger Bandを上回ります。 cBotは買い注文を実行し、トレンドの継続を活用します。

!!! info "情報" 「ベストプラクティス」

- より大きな期間を使用します。 cBotは特にトレンド市場の大きな期間(1時間、4時間など) で効果的です。 このセットアップは、より高いリターンをもたらす大きな価格変動を捉えるのに役立ちます。
- 短い統合期間を避けます。 強いトレンド市場では、短い統合期間を引き起こす設定を避けたほうがよいかもしれません。なぜなら、それらは偽のブレイクアウトにつながる可能性があるからです。

パターン後のブレイクアウト

cBotは、三角形、フラッグ、ペナントなど、通常強い価格変動につながるチャートパターンからのブレイクアウトを取引するために使用できます。 これらのパターンは、しばしば統合フェーズの後にブレイクアウトをもたらします。

ユースケース

EURGBP通貨ペアが1時間チャートで対称三角形パターンを形成している状況を考えてみましょう。 三角形が狭まるにつれて、Bollinger Bandsも締まり、ボラティリティの低下を示します。 cBotは三角形パターン内の統合を識別します。 価格が三角形パターンを抜けて上部Bollinger Bandを上回ると、cBotは買い注文を実行してブレイクアウトを捉えます。

!!! info "情報" 「ベストプラクティス」

- cBotを他のパターンと組み合わせます。 重要なチャートパターンを手動で識別し、パターンが完成したらcBotを使用してブレイクアウト取引を自動化します。
- 統合期間を延長します。 より長期間にわたって形成されるパターンについては、パターンが完全に形成された後にのみcBotがトリガーされるように、統合期間を増やすことを検討してください。

ニュース後の取引

このcBotは、主要な経済ニュース、イベント、発表がある日に効果的かもしれません。 特定のニュースの後、トレーダーが情報を消化する間、一部の市場は consolidation(整理)に時間がかかります。 市場の方向性が明確になると、ブレイクアウトが発生する可能性があります。

ユースケース

米国の非農業部門雇用者数データ発表後のシナリオを考えてみましょう。 JPYUSDペアは、トレーダーがレポートの影響を評価する間、consolidation(整理)します。 Bollinger Bandsが狭くなり、ボラティリティが低いことを示します。 cBotはこのconsolidation(整理)を識別し、ブレイクアウトを待ちます。 市場が方向性を決定すると(例えば、予想を上回るデータにより米ドルが強くなる)、価格が下部Bollinger Bandを下回ってブレイクアウトします。 cBotは売り注文を実行して、この動きを捉えます。

!!! info "情報" 「ベストプラクティス」

- 経済指標カレンダーを監視します。 主要な経済指標の発表の前後でcBotを実行するように設定します。 ブレイクアウト前のニュース後のconsolidation(整理)フェーズを捉えるために、consolidation(整理)期間の設定を調整します。
- 損切りを調整します。 ニュースイベント後のボラティリティ上昇に対応するため、ブレイクアウトが完全に形成される前の市場の変動に対応できるよう、損切りを広げることを検討します。

Summary

Breakout cBotは、市場のボラティリティ、高い取引量、および活動の増加を活用するためにトレーダーを支援します。 このcBotはブレイクアウト戦略の実行に効率的ですが、Bollinger Bandsに依存しているため、特定の市場状況下ではパフォーマンスに問題が生じる可能性があります。

Breakout cBotを特定の銘柄やあなたの取引スタイルに合わせてカスタマイズすることで、その効果を大幅に向上させることができます。 あなた独自の戦略をcBotに組み込み、追加のインジケーターを利用できるようにコードを修正することで、さらに精度とパフォーマンスを向上させることができます。