布林带策略,重点关注上轨

概览

BollingerStrategyUpBandStrategy 是一种基于 布林带 指标的策略。当价格达到布林带上轨时开多仓,当价格达到中轨时平仓。

主要组件

该策略继承自 Strategy 并使用参数进行配置:

public class BollingerStrategyUpBandStrategy : Strategy
{
	private readonly StrategyParam<int> _bollingerLength;
	private readonly StrategyParam<decimal> _bollingerDeviation;
	private readonly StrategyParam<DataType> _candleType;

	private BollingerBands _bollingerBands;
}

策略参数

该策略允许自定义以下参数:

  • BollingerLength - 布林带指标周期(默认 20)
  • 布林格偏差 - 标准差乘数(默认值 2.0)
  • K线类型 - 要使用的K线类型(默认5分钟)

所有参数都可以在指定的取值范围内进行优化。

策略初始化

OnStarted2 方法中,会创建布林带指标、设置K线订阅,并准备可视化:

protected override void OnStarted2(DateTime time)
{
	base.OnStarted2(time);

	// 创建指标
	_bollingerBands = new BollingerBands
	{
		Length = BollingerLength,
		Width = BollingerDeviation
	};

	// 创建订阅并绑定指标
	var subscription = SubscribeCandles(CandleType);
	subscription
		.BindEx(_bollingerBands, ProcessCandle)
		.Start();

	// 在图表上设置可视化
	var area = CreateChartArea();
	if (area != null)
	{
		DrawCandles(area, subscription);
		DrawIndicator(area, _bollingerBands, System.Drawing.Color.Purple);
		DrawOwnTrades(area);
	}
}

处理 K线

ProcessCandle 方法在每个完成的K线上被调用,并实现交易逻辑:

private void ProcessCandle(ICandleMessage candle, IIndicatorValue bollingerValue)
{
	// 跳过未完成的K线
	if (candle.State != CandleStates.Finished)
		return;

	// 检查策略是否已准备好交易
	if (!IsFormedAndOnlineAndAllowTrading())
		return;

	var typed = (BollingerBandsValue)bollingerValue;

	// 交易逻辑:
	// 价格触及上轨时买入(仅在无持仓时)
	if (candle.ClosePrice >= typed.UpBand && Position == 0)
	{
		BuyMarket(Volume);
	}
	// 价格到达中轨时卖出平仓(仅在持有多头时)
	else if (candle.ClosePrice <= typed.MiddleBand && Position > 0)
	{
		SellMarket(Math.Abs(Position));
	}
}

交易逻辑

  • 买入信号:当没有持仓时,K线收盘价达到或超过上布林带
  • 卖出信号(平多仓):当存在多仓时,K线收盘价达到或跌破布林带中轨
  • 开仓时持仓固定,平仓时等于当前持仓的全部

特征

  • 该策略通过 GetWorkingSecurities() 方法自动确定要使用的工具
  • 该策略仅适用于已完成的K线
  • 该策略仅使用布林带指标的上轨和中轨
  • 只开多头持仓
  • 当图表区域可用时,指标和交易会在图表上可视化
  • 支持参数优化以寻找最佳策略设置