该策略基于日线ichimoku云图指标实现简单的趋势跟踪交易。策略通过计算转换线、基准线、先行线1和先行线2,并结合当前收盘价的位置来产生买入和卖出信号。当收盘价在云图上方时,视为处于上升趋势,产生买入信号;当收盘价在云图下方时,视为处于下降趋势,产生卖出信号。
该策略主要基于以下公式计算ichimoku云图的五条指标线:
转换线:最近9日的最高价和最低价的平均值
基准线:最近26日的最高价和最低价的平均值
先行线1:转换线和基准线的平均值
先行线2:最近52日的最高价和最低价的平均值
附图线:收盘价,向后延迟26天显示
收盘价高于云图时,视为处于上升趋势,产生买入信号;收盘价低于云图时,视为处于下降趋势,产生卖出信号。
具体来说,策略通过以下步骤实现:
计算转换线、基准线、先行线1、先行线2
绘制收盘价的附图线,向后延迟26天
判断收盘价是否高于云图(先行线1和先行线2),如果是,产生买入信号
判断收盘价是否低于云图(先行线1和先行线2),如果是,产生卖出信号
产生买入和卖出信号时,按策略设置入场
该策略主要有以下优势:
使用云图指标可以有效识别趋势,根据趋势方向产生信号,避免在震荡市场无谓进出场
计算参数经过优化选择,比较适合日线交易
使用先行线1和先行线2的组合作为判断标准,可以 filtering 一些冲击震荡带来的假信号
结合附图线的延迟设计,可以减少突破云图上方后立即回调的风险
策略逻辑简单清晰,容易理解和实现
无需其它指标结合,实现完整的趋势跟踪交易系统
该策略也存在一些风险:
在特定市场情况下,云图可能失效,导致产生错误信号
云图的参数不适应市场环境变化时,会减弱系统的效果
附图线的固定延迟设置也可能错过部分机会
虽然有两个先行线的组合判断,但仍无法完全避免鲶鱼效应带来的风险
存在一定的时间滞后,无法及时捕捉快速反转
无法区分市场的长期趋势和中短期调整,可能带来亏损
该策略可以从以下几个方面进行优化:
优化转换线、基准线等参数,使其更符合不同市场环境
增加趋势判断指标,确认趋势方向和力度
设置止损和止盈策略,控制单笔损失和盈利
结合volume,大volume突破云图时才入场
根据市场阶段采用不同参数组合
增加机器学习算法,自动优化参数
考虑将固定延迟更改为动态延迟
整体来说,该ichimoku云图策略通过简单的趋势判断规则实现基本的趋势跟踪交易,虽然存在一些改进空间,但其核心思想清晰可靠,参数优化充分,可以作为量化交易的一个基础策略来使用。通过进一步优化云图参数,添加过滤指标和风控模块,该策略可以成为一个非常实用的量化交易系统。
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Ichimoku Cloud", shorttitle="Ichimoku", overlay=true, commission_type=strategy.commission.percent,commission_value=0.075, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
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=0, 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=color.green,
title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=color.red,
title="Lead 2")
fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red)
buy = close > leadLine1[26] and close > leadLine2[26]
sell = close < leadLine1[26] and close < leadLine2[26]
strategy.entry("Buy", strategy.long, when = buy)
strategy.entry("Sell", strategy.short, when = sell)