
该策略主要基于改进的HA均线来识别价格的转向点,以捕捉比较明显的趋势变化,属于短线交易策略。策略使用HA计算K线的开、高、低、收价,并根据价格的关系判断出最终的K线颜色。当价格上涨时,用绿色柱状线表示,当价格下跌时,用红色柱状线表示。策略以HA柱状线颜色变化作为交易信号,在绿转红时做空,在红转绿时做多,属于典型的反转策略。
策略的核心逻辑主要在于计算HA柱状线的颜色变化,来判断价格反转。
首先,根据输入参数选择是否使用HA计算K线的值。如果选择使用,则从HA数据中获取开、高、低、收价;如果不使用,则直接从K线原始数据中获取。
haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low
然后根据HA计算公式得到本周期的HA开、收价。
haclose = (haOpen + haHigh + haLow + haClose) / 4
haopen := na(haopen[1]) ? (haOpen + haClose) / 2 : (haopen[1] + haclose[1]) / 2
再根据HA开、收价计算出HA最高价、最低价。
hahigh = max(haHigh, max(haopen, haclose))
halow = min(haLow, min(haopen, haclose))
根据HA开收价关系判断本周期HA柱状线颜色。
hacolor = haclose > haopen ? color.green : color.red
根据连续两周期的HA颜色变化判断价格反转信号。
turnGreen = haclose > haopen and haclose[1] <= haopen[1]
turnRed = haclose <= haopen and haclose[1] > haopen[1]
在发生做多和做空信号时分别打开做多和做空仓位。
strategy.entry("long", 1, when=turnGreen)
strategy.entry("short", 0, when=turnRed)
在相反信号发生时平仓。
strategy.close("long", when=turnRed)
这样通过判断HA柱状线颜色的变化就可以捕捉到价格反转点,实现反转交易策略。
该策略主要具有以下优势:
使用改进HA计算K线数据,能过滤掉部分噪音,识别趋势反转点更清晰。
仅基于简单的HA柱状线颜色变化判断反转点,策略逻辑简单清晰,容易理解实现。
采用反转交易方式,可以及时捕捉趋势变化,获取较快反转利润。
可配置是否使用HA计算K线数据,可以根据不同市场调整使用。
绘制形态指示candle方便直观判断价格反转点。
可通过优化参数如交易周期等进行调整,适用于不同品种。
该策略也存在一些风险需要注意:
反转交易容易被套,需要确保反转信号具有足够的可靠性。
在震荡市场中,反转信号可能频繁出现造成过度交易。
无法判断趋势的长短,可能在反转后继续原趋势造成亏损。
单一指标易受假突破影响,应与其他指标组合使用。
需验证参数是否经过充分优化,避免过拟合。
对应解决方法:
优化参数,确保交易信号稳定可靠。
结合趋势过滤,避免震荡市场交易。
设定止损退出机制,控制单笔亏损。
组合其他指标进行确认,避免假信号。
充分回测优化参数,防止过拟合。
该策略可从以下几个方面进行优化:
优化交易周期参数,适应不同品种特性。
测试是否使用HA值,根据交易品种特点选择。
增加趋势过滤条件,避免震荡市反转。
设定动态止损,根据市场波动调整止损位。
结合其他指标确认交易信号。
添加资金管理策略,调整仓位。
扩展实现多品种套利交易。
根据回测结果修正参数,防止过拟合。
本策略利用改进HA均线的优势,通过判断HA柱状线颜色变化来发现价格可能的反转点。相比直接使用K线,HA均线能过滤部分噪音,反转信号更清晰。策略以简单直观的方式实现了反转交易思路,逻辑简单清晰,容易实盘操作。但反转交易也存在被套风险,需进一步优化信号准确性。此外,可尝试与趋势判断等其他因素组合使用,形成较为完整的交易体系。总体来说,本策略提供了一种基于HA的数据来发现反转点的思路,可据此进行扩展优化,开发出适合自己的反转交易策略。
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Heikin-Ashi Change Strategy", overlay=true)
UseHAcandles = input(true, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===
// === BASE FUNCTIONS ===
haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low
// Calculation HA Values
haopen = 0.0
haclose = (haOpen + haHigh + haLow + haClose) / 4
haopen := na(haopen[1]) ? (haOpen + haClose) / 2 : (haopen[1] + haclose[1]) / 2
hahigh = max(haHigh, max(haopen, haclose))
halow = min(haLow, min(haopen, haclose))
// HA colors
hacolor = haclose > haopen ? color.green : color.red
// Signals
turnGreen = haclose > haopen and haclose[1] <= haopen[1]
turnRed = haclose <= haopen and haclose[1] > haopen[1]
// Plotting
bgcolor(hacolor)
plotshape(turnGreen, style=shape.arrowup, location=location.belowbar, color=color.green)
plotshape(turnRed, style=shape.arrowdown, location=location.abovebar, color=color.red)
// Alerts
alertcondition(turnGreen, "ha_green", "ha_green")
alertcondition(turnRed, "ha_red", "ha_red")
strategy.entry("long", 1, when=turnGreen)
//strategy.entry("short", 0, when=turnRed)
strategy.close("long", when=turnRed)