基于布林带的智能追踪交易策略


创建日期: 2024-01-17 14:05:36 最后修改: 2024-01-17 14:05:36
复制: 1 点击次数: 490
avatar of ChaoZhang ChaoZhang
1
关注
1370
关注者

基于布林带的智能追踪交易策略

概述

本策略基于布林带指标设计,当价格突破布林带上轨时做空,突破下轨时做多,实现智能追踪交易。

策略原理

该策略使用布林带中的中线、上轨、下轨为基础指标。中线为n天收盘价的移动平均线,上轨是中线上偏移两个标准差,下轨是中线下偏移两个标准差。当价格从下轨顺势上穿时,做多;当价格从上轨顺势下穿时,做空。这样可以根据市场波动性智能追踪价格。

具体来说,策略主要判断两个指标:

  1. ta.crossover(source, lower):收盘价上穿下轨,做多

  2. ta.crossunder(source, upper):收盘价下穿上轨,做空

当触发平仓条件时,使用strategy.cancel()函数平掉当前持仓。

策略优势分析

该策略主要有以下优势:

  1. 基于布林带指标设计,可以捕捉市场波动性,有效跟踪价格走势
  2. 规则清晰简单,容易理解实现
  3. 可自定义参数如周期长度、标准差倍数等,适应性强
  4. 可配置移动止损、固定止损及移动止盈等优化策略效果

策略风险分析

该策略也存在一些风险:

  1. 布林带突破容易假突破,可能造成虚假信号
  2. 效果依赖参数优化,参数选择不当可能影响盈利能力
  3. 追踪止损困难,无法有效控制单笔损失

对应解决方法:

  1. 结合其他指标过滤信号,避免假突破
  2. 做好参数测试,选择最佳参数组合
  3. 加入移动止损或趋势跟踪止损 clips

策略优化方向

该策略还可进一步优化:

  1. 结合其他指标判断趋势方向,避免不适宜布林带策略的市场
  2. 测试不同周期参数的效果,找到最佳周期
  3. 加入移动止损或趋势跟踪止损机制,有效控制单笔亏损

总结

本策略基于布林带指标设计,使用价格突破上下轨的方式实现自动追踪。策略简单易懂,对市场波动性敏感,可通过参数优化和止损方式进一步优化效果。总体来说,该策略适用于波动性较大的股指或商品市场。交易者可根据自己的交易偏好,选择合适的品种和参数进行回测优化,从中获得astika的交易策略。

策略源码
/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bollinger Bands Strategy with alerts (incl. pending orders) via TradingConnector to Forex", overlay=true)
source = close
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50)
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev
buyEntry = ta.crossover(source, lower)
sellEntry = ta.crossunder(source, upper)
if (ta.crossover(source, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE")
    alert(message='long price='+str.tostring(lower), freq=alert.freq_once_per_bar_close)
else
	strategy.cancel(id="BBandLE")
    alert(message='cancel long', freq=alert.freq_once_per_bar_close)
if (ta.crossunder(source, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="BBandSE")
    alert(message='short price='+str.tostring(upper), freq=alert.freq_once_per_bar_close)
else
	strategy.cancel(id="BBandSE")
    alert(message='cancel short', freq=alert.freq_once_per_bar_close)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

//Lines of code added to the original built-in script: 14, 17, 20 and 23 only.
//They trigger alerts ready to be executed on real markets through TradingConnector
//available for Forex, indices, crypto, stocks - anything your broker offers for trading via MetaTrader4/5