
Chiến lược này là hệ thống theo dõi xu hướng nhiều giai đoạn dựa trên sự giao nhau của nến được làm mịn (Heikin-Ashi) và đường trung bình động hàm mũ (EMA). Bằng cách kết hợp các đặc điểm làm mịn của nến Heikin-Ashi và khả năng theo dõi xu hướng của đường trung bình động trong các khoảng thời gian khác nhau, và sử dụng chỉ báo MACD làm bộ lọc, có thể nắm bắt chính xác xu hướng thị trường. Chiến lược này áp dụng thiết kế phân cấp theo khoảng thời gian và thực hiện tính toán và xác minh tín hiệu trong ba khoảng thời gian: 60 phút, 180 phút và 15 phút.
Logic cốt lõi của chiến lược bao gồm những phần chính sau:
Chiến lược này sử dụng hệ thống Heikin-Ashi và EMA của nhiều khoảng thời gian kết hợp với bộ lọc MACD để xây dựng một hệ thống giao dịch theo xu hướng hoàn chỉnh. Thiết kế chiến lược xem xét đầy đủ độ tin cậy của tín hiệu và tính ổn định của hệ thống, đồng thời có thể thích ứng với các môi trường thị trường khác nhau thông qua việc tối ưu hóa tham số và cải thiện cơ chế kiểm soát rủi ro. Ưu điểm cốt lõi của chiến lược này nằm ở tính mượt mà của tín hiệu và cơ chế xác minh nhiều lần, nhưng đồng thời, cũng cần lưu ý đến rủi ro của thị trường biến động và các vấn đề tối ưu hóa tham số.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
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/
// © tradingbauhaus
//@version=5
strategy("Heikin Ashi Candle Time Frame @tradingbauhaus", shorttitle="Heikin Ashi Candle Time Frame @tradingbauhaus", overlay=true)
// Inputs
res = input.timeframe(title="Heikin Ashi Candle Time Frame", defval="60")
hshift = input.int(1, title="Heikin Ashi Candle Time Frame Shift")
res1 = input.timeframe(title="Heikin Ashi EMA Time Frame", defval="180")
mhshift = input.int(0, title="Heikin Ashi EMA Time Frame Shift")
fama = input.int(1, title="Heikin Ashi EMA Period")
test = input.int(1, title="Heikin Ashi EMA Shift")
sloma = input.int(30, title="Slow EMA Period")
slomas = input.int(1, title="Slow EMA Shift")
macdf = input.bool(false, title="With MACD filter")
res2 = input.timeframe(title="MACD Time Frame", defval="15")
macds = input.int(1, title="MACD Shift")
// Heikin Ashi calculation
var float ha_open = na
ha_close = (open + high + low + close) / 4
ha_open := na(ha_open[1]) ? (open + close) / 2 : (ha_open[1] + ha_close[1]) / 2
ha_high = math.max(high, math.max(ha_open, ha_close))
ha_low = math.min(low, math.min(ha_open, ha_close))
// Adjusted Heikin Ashi Close for different timeframes
mha_close = request.security(syminfo.tickerid, res1, ha_close[mhshift])
// MACD calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdl = request.security(syminfo.tickerid, res2, macdLine[macds])
macdsl = request.security(syminfo.tickerid, res2, signalLine[macds])
// Moving Averages
fma = ta.ema(mha_close[test], fama)
sma = ta.ema(ha_close[slomas], sloma)
plot(fma, title="Heikin Ashi EMA", color=color.green, linewidth=2)
plot(sma, title="Slow EMA", color=color.red, linewidth=2)
// Strategy Logic
golong = ta.crossover(fma, sma) and (macdl > macdsl or not macdf)
goshort = ta.crossunder(fma, sma) and (macdl < macdsl or not macdf)
// Plot Shapes for Buy/Sell Signals
plotshape(golong, color=color.green, text="Buy", style=shape.triangleup, location=location.belowbar)
plotshape(goshort, color=color.red, text="SELL", style=shape.triangledown, location=location.abovebar)
// Strategy Orders
strategy.entry("Long", strategy.long, when=golong)
strategy.close("Long", when=goshort)
strategy.entry("Short", strategy.short, when=goshort)
strategy.close("Short", when=golong)
// Alerts
alertcondition(golong, "Heikin Ashi BUY", "")
alertcondition(goshort, "Heikin Ashi SELL", "")