作者:老余捞鱼
原创不易,转载请标明出处及原作者。
写在前面的话:
本文介绍了鼎鼎大名的Citadel 量化对冲基金公司的一种结合超级趋势和布林线指标的交易策略,用于识别市场趋势并捕捉交易机会。同时还提供了实施策略的具体步骤,此外,本文还强调了在实际应用中需要编程和获取市场数据,并根据回溯测试和特定市场条件选择合适的参数值。
一、序言
该策略结合了超级趋势指标和布林线指标,以识别市场中的趋势性机会。超级趋势指标确定当前市场的趋势方向,而布林线指标则衡量市场的波动性。当收盘价超过超级趋势线并保持在布林带下轨下方时,就会出现做多信号。相反,当收盘价跌破超级趋势线并保持在布林带上轨上方时,就会出现空头信号。这种策略的优势在于,当趋势明显时,可以迅速入市,同时避免在市场波动时过早入市。
二、战略原则
要实施所述策略,我们将遵循以下步骤:
1.计算平均真实范围(ATR)和超级趋势指标,以确定当前的市场趋势方向。
2. 计算布林线上下轨,以衡量市场波动性。
3. 当收盘价突破超级趋势线并低于布林带下轨时,发出做多信号;当收盘价突破超级趋势线并高于布林带上轨时,发出做空信号。当持有多头头寸时,如果收盘价低于超级趋势线,则平仓;当持有空头头寸时,如果收盘价高于超级趋势线,则平仓。
以下是如何实施每个步骤的大纲:
1.使用公式计算 ATR: ATR = (Previous ATR * (n - 1) + TR) / n,其中 TR(真实范围)= max(high,close_prev)- min(low,close_prev)。
2.使用 ATR 和乘数计算超级趋势指标: Supertrend = EMA(典型价格 +/- (ATR * 乘数)),其中典型价格 = (最高价 + 最低价 + 收盘价) / 3
3.使用标准偏差计算布林线的上下限: 上限 = SMA + (标准偏差 * K) 下限 = SMA - (标准偏差 * K) 其中 SMA = 简单移动平均线,K = 标准偏差数
4.按描述执行信号生成和位置管理逻辑。
请注意,实际执行时可能需要使用特定编程语言进行编码,并从合适的来源获取市场数据。此外,诸如 ATR 的 "n"、Supertrend 的 "乘数 "和 Bollinger Bands 的 "K "等参数值需要根据特定市场和时间框架的回溯测试和优化来选择。
三、战略优势
- 结合趋势和波动两个维度的见解,可以更全面地了解市场机遇。
- 在趋势明朗时及时入市,有助于在趋势市场中获取收益。
- 在波涛汹涌的市场条件下,布林线和超级趋势的结合使用能有效过滤虚假突破信号,将损失风险降至最低。
- 代码逻辑简单明了,只需几个参数,易于理解和实施。
四、策略缺点
- 在单边趋势市场中,频繁的突破信号可能会导致交易频率过高和交易成本增加。
- 捕捉突破点的有效性取决于超级趋势指标,该指标对参数很敏感。在不同的参数下,该指标的趋势会有很大的不同,从而可能影响策略的有效性。
- 市场波动性的变化会改变布林线的宽度,在高波动性条件下可能会扩大止损水平。
五、战略优化方向
- 为了提高信号的可靠性,还可以引入额外的过滤条件,如交易量和市场情绪。
- 可以对超级趋势指标的参数进行优化测试,以选择最合适的值,从而提高策略的稳定性。
- 在交易执行方面,可以实施更全面的头寸管理和风险控制措施,如设置追踪止损和动态调整头寸,以降低单笔交易的风险敞口。
六、总结
超级趋势布林带组合策略的确是一种强大的趋势跟踪方法,它可以利用趋势和波动因素来捕捉市场机会。但是,必须承认它的局限性,包括对参数的敏感性和在波动条件下的高风险。因此,在现实世界中应用这一策略时,必须根据当时的市场条件和个人的风险承受能力来优化和完善策略。通过这样做,交易者可以提高策略的有效性和适应性,从而更好地适应自己的交易目标和市场动态。
七、战略源代码
/*backtest
start: 2024-03-21 00:00:00
end: 2024-03-28 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sabhiv27
//@version=4
strategy("Supertrend & Bollinger Bands Strategy", shorttitle="ST_BB_Strategy", overlay=true)
// Input options
factor = input(3, title="Supertrend Factor")
length = input(10, title="ATR Length")
bollinger_length = input(20, title="Bollinger Bands Length")
bollinger_deviation = input(2, title="Bollinger Bands Deviation")
// Calculate True Range for Supertrend
truerange = rma(tr, length)
// Calculate Supertrend
var float up_trend = na
var float dn_trend = na
var float trend = na
up_signal = hl2 - (factor * truerange)
dn_signal = hl2 + (factor * truerange)
up_trend := close[1] > up_trend[1] ? max(up_signal, up_trend[1]) : up_signal
dn_trend := close[1] < dn_trend[1] ? min(dn_signal, dn_trend[1]) : dn_signal
trend := close > dn_trend ? 1 : close < up_trend ? -1 : nz(trend[1], 1)
// Calculate Bollinger Bands
basis = sma(close, bollinger_length)
dev = stdev(close, bollinger_length)
upper_band = basis + bollinger_deviation * dev
lower_band = basis - bollinger_deviation * dev
// Entry conditions
long_condition = crossover(close, up_trend) and close < lower_band
short_condition = crossunder(close, dn_trend) and close > upper_band
// Exit conditions
exit_long_condition = crossover(close, dn_trend)
exit_short_condition = crossunder(close, up_trend)
// Plot Supertrend
plot(trend == 1 ? up_trend : dn_trend, color=trend == 1 ? color.green : color.red, linewidth=2)
// Plot Bollinger Bands
plot(upper_band, color=color.blue)
plot(lower_band, color=color.blue)
// Generate buy and sell signals
strategy.entry("Long", strategy.long, when=long_condition)
strategy.entry("Short", strategy.short, when=short_condition)
strategy.close("Long", when=exit_long_condition)
strategy.close("Short", when=exit_short_condition)
本文内容仅仅是技术探讨和学习,并不构成任何投资建议。
转发请注明原作者和出处。