本策略基于市场技术分析中一种著名的趋势指标—Ichimoku云图,利用Ichimoku云图的转换线、基准线和云图之间的交叉关系来判断市场趋势,并进行量化交易。该策略适用于追踪市场中期趋势的交易者。
该策略的核心指标是Ichimoku云图中的三条线:转换线、基准线和云图。转换线代表近期价格动量,基准线代表中期价格趋势,而云图则可视化地反映中长期支持与阻力区域。策略通过判断这三者之间的交叉关系来确定市场趋势和交易信号。
具体来说,策略逻辑主要基于以下规则:
当基准线上穿云图时,表示中期趋势转为上涨,做多;
当转换线上穿云图时,表示短期价格开始反弹,做多;
当基准线下穿云图时,表示中期趋势转为下跌,做空;
当转换线下穿云图时,表示短期价格开始下挫,做空。
此外,为过滤假信号,策略还加入价格与云图之间的交叉作为辅助条件。只有转换线或基准线交叉云图,而价格同时也交叉云图,才会生成真正的交易信号。
相比单一使用移动平均线等指标,本策略最大的优势在于同时结合多时间段的数据,判断市场结构的变化。转换线反映短期情况,基准线反映中期趋势,云图反映长期支撑阻力。它们的组合可以更准确地把握住市场的转折点。此外,Ichimoku云图本身就具有滤波假信号的功能,避免买入噪音中的小峰或卖出噪音中的小谷,从而帮助我们抓住中长期趋势。
本策略最大的风险在于Ichimoku云图本身对参数设置较为敏感。如果参数设定不当,容易产生错误信号。此外,在震荡行情中,云图常常扁平化,导致产生大量不确定信号。策略订单的频繁打开与停止损耗手续费。最后,中长线交易本身具有亏损扩大的风险,需要严格控制止损点。
为降低风险,我们可以调整参数组合、设置止损策略、止盈策略,甚至可以考虑与其他指标组合使用Ichimoku云图。
本策略可以从以下几个方面进行优化:
优化参数组合。可以尝试不同长度周期的参数,找到最匹配目标交易品种的组合。
增加过滤条件。可以加入其他指标,确保在趋势选择上更加可靠。例如加入量能指标,确保在量能放大时打开订单。
增加止损机制。 trailing stop 或时间止损可以进一步控制单笔亏损。
结合波段策略。在中长线趋势基础上,识别更短周期的反转作为入场时机。
Ichimoku云图量化策略通过基准线、转换线与云图的交叉判定中长期趋势,并以此作为交易信号。相比单一指标,它综合判断多时间段的数据,能更可靠地判断结构性变化。同时内在的滤波机制也避免追逐市场噪音。如果参数优化和风险控制到位,该策略可以产生稳定的超额收益。它适合有经验的趋势交易者进行中长期持仓。
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Ichimoku Cloud", shorttitle="Ichimoku", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=100000, currency=currency.USD)
conversionPeriods = input(9, minval=1, title="Conversion Line Periods"),
basePeriods = input(26, minval=1, title="Base Line Periods")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"),
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
plot(conversionLine, color=#0496ff, title="Conversion Line")
plot(baseLine, color=#991515, title="Base Line")
plot(close, offset = -displacement, color=#459915, title="Lagging Span")
p1 = plot(leadLine1, offset = displacement, color=green,
title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,
title="Lead 2")
fill(p1, p2, color = leadLine1 > leadLine2 ? green : red)
maxlead = max(leadLine1, leadLine2)
minlead = min(leadLine1, leadLine2)
//rules
A = baseLine> maxlead[displacement]
B = crossover(baseLine, maxlead[displacement])
C = baseLine< minlead[displacement]
D = crossunder(baseLine, minlead[displacement])
E = conversionLine> maxlead[displacement]
F = crossover(conversionLine, maxlead[displacement])
G = conversionLine< minlead[displacement]
H = crossunder(conversionLine, minlead[displacement])
I = close> maxlead[2*displacement]
J = crossover(close, maxlead[2*displacement])
K = close<minlead[2*displacement]
L = crossunder(close, minlead[2*displacement])
//strategies
if A
if E
strategy.entry("Buy", strategy.long, when= J)
if A
if I
strategy.entry("Buy", strategy.long, when= F)
if E
if I
strategy.entry("Buy", strategy.long, when= B)
if C
if G
strategy.entry("Sell", strategy.short, when=L)
if C
if K
strategy.entry("Sell", strategy.short, when=H)
if G
if K
strategy.entry("Sell", strategy.short, when=D)
//EOS