跳转至

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 Bands 的顶部,cBot 将其解释为看涨突破并执行买入订单。
  • 看跌突破 - 如果买价低于 Bollinger Bands 的底部,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\) – 布林带高度(点)

\(P\) – 点值

\(C_{\text{Counter}}\) – 盘整计数器

盘整期检查

如果盘整计数器大于盘整期,则执行突破逻辑。

突破逻辑

如果卖价大于上轨,则下达买入订单。 如果买价小于下轨,则下达卖出订单。

参数

参数 单位 定义 提示
数量 每笔交易的交易量。 风险偏好较低的交易者可以从较低的金额开始,以最小化潜在损失。

风险承受能力较高的用户可以设置更高的金额,以追求更大的利润。
止损 交易将自动关闭以防止进一步损失的点数。 风险厌恶的交易者可以设置严格的止损值以限制潜在损失。

能够承受市场波动的用户可以设置更宽的止损值,允许交易在关闭前有更多的喘息空间。
止盈 交易将自动关闭以防止进一步损失的点数。 偏好快速退出的交易者可以使用较低的止盈值,以利用短期波动。

目标较长期趋势的用户可以设置较高的止盈值,以便交易可以运行更长时间。
布林带高度 Bollinger Bands 在盘整阶段的最大宽度,使 cBot 能够识别低波动性时期。 专注于紧密盘整的交易者可以使用较低的带高度值,以瞄准低波动性时期的主要突破。

习惯于较宽范围的用户可以使用增加的带高度值,使 cBot 能够将稍宽的盘整视为潜在的设置。
Bollinger Bands 偏差 用于计算 Bollinger Bands 宽度的标准偏差值。 专注于紧密盘整的交易者可以使用较低的带高度值,以瞄准低波动性时期的主要突破。

习惯于较宽范围的用户可以使用增加的带高度值,使 cBot 能够将稍宽的盘整视为潜在的设置。
Bollinger Bands 周期 用于计算 Bollinger Bands 的周期数。 专注于短期市场波动的交易者可以使用较小的周期,这使得 Bollinger Bands 对最近的价格变化更加敏感。

对长期趋势感兴趣的用户应考虑较大的周期,这会使 Bollinger Bands 平滑并降低其对短期波动的敏感性。
盘整周期 在考虑突破交易之前,必须满足盘整标准的连续柱数。 寻找更频繁交易的交易者可以减少盘整周期,使 cBot 能够更快地进入交易。

偏好确认突破的用户可以增加盘整周期,以确保价格在采取行动之前在盘整范围内停留更长时间。

应用

趋势市场

Breakout cBot 在趋势市场(上涨或下跌)中表现良好。 在此类市场中,突破通常与盘整期后的整体趋势一致,导致大幅价格波动。

用例

考虑一个场景,其中 EURUSD 处于强劲的上升趋势中,但暂时在窄幅范围内盘整。 Bollinger Bands 收窄,表明波动性降低。 cBot 检测到这种盘整并等待突破。 随着趋势恢复,价格突破上方 Bollinger Band。 cBot 执行买入订单,利用趋势的延续。

最佳实践

  • 使用较大的周期。 cBot 在趋势市场中的较大周期(1小时、4小时等) 上特别有效。 这种设置有助于捕捉产生更高回报的显著价格波动。
  • 避免短盘整周期。 在强劲的趋势市场中,您可能希望避免导致短盘整周期的设置,因为它们可能导致假突破。

形态后的突破

cBot 可用于交易图表形态的突破,这些形态通常会导致强劲的价格波动,例如三角形、旗形或三角旗形。 这些形态通常会导致盘整阶段,随后是突破。

用例

考虑一个场景,其中 EURGBP 符号在1小时图表上形成对称三角形形态。 随着三角形收窄,Bollinger Bands 也收紧,表明波动性降低。 该cBot识别出三角形态内的盘整。 一旦价格突破上方 Bollinger Band 并退出三角形形态,cBot 执行买入订单以捕捉突破。

最佳实践

  • 将 cBot 与其他形态结合。 手动识别重要的图表形态,然后在形态完成后使用 cBot 自动化突破交易。
  • 延长盘整周期。 对于形成时间较长的形态,考虑增加盘整周期,以确保 cBot 仅在形态完全形成后触发。

新闻后交易

cBot 在重大经济新闻、事件或公告发布的日子里可能有效。 在某些新闻发布后,一些市场需要时间来盘整,因为交易者消化信息。 当市场方向变得明确时,可能会发生突破。

用例

考虑一个场景,在美国发布后。 非农就业数据公布后,JPYUSD货币对进入盘整状态,交易者正在评估报告的影响。 Bollinger Bands收窄,表明波动性较低。 cBot识别出这种盘整状态并等待突破。 当市场确定方向时(例如,由于数据优于预期导致美元走强),价格突破下方Bollinger Band。 cBot执行卖出订单以捕捉这一走势。

最佳实践

  • 监控经济日历。 配置cBot在重要经济数据发布前后运行。 确保调整盘整期设置以捕捉新闻发布后的盘整阶段,然后等待突破。
  • 调整止损。 由于新闻事件后波动性增加,考虑扩大止损以应对市场在突破完全形成前的潜在波动。

摘要

Breakout cBot 使交易者能够利用市场波动性、高交易量和增加的活动。 虽然cBot在执行突破策略时效率很高,但其对Bollinger Bands的依赖可能会在某些市场条件下导致性能问题。

根据特定货币对和您的交易偏好定制Breakout cBot可以显著提高其有效性。 通过将您自己的策略融入cBot并修改其代码以使其能够使用其他指标,您可以进一步提高其准确性和性能。