
Idea utama strategi ini adalah menggunakan purata bergerak yang lancar untuk mengira garis rata-rata yang lancar untuk mencari trend harga, dan melakukan lebih banyak apabila harga berhadapan dengan garis rata-rata yang lancar, dan melakukan kosong apabila berhadapan dengan garpu mati.
Strategi ini mula-mula menentukan fungsi untuk mengira purata bergerak yang licin, smoothedMovingAvg, yang menggunakan purata bergerak dari tempoh sebelumnya dan harga terkini untuk mengira purata bergerak yang licin untuk tempoh semasa dengan berat tertentu.
Kemudian, fungsi getHAClose didefinisikan untuk mengira harga penutupan garis rata-rata dengan menggunakan harga pembukaan, harga tertinggi, harga terendah dan harga penutupan.
Dalam logik strategi utama, harga asal untuk tempoh yang berbeza diambil terlebih dahulu, kemudian rata-rata bergerak lancar dikira menggunakan fungsi SmoothedMovingAvg, dan kemudian harga penutupan permulaan lancar dikira dengan fungsi getHAClose.
Akhirnya, apabila harga di atas meluncur lancar untuk mengetengahkan harga penutupan, lakukan lebih banyak, turun ketika meluncur lancar; apabila harga di bawah meluncur lancar untuk mengetengahkan harga penutupan, kosongkan, naik ketika meluncur lancar.
Kelebihan terbesar strategi ini adalah menggunakan purata bergerak yang licin untuk mengira garis rata-rata pencerahan yang licin, yang dapat menentukan trend harga dengan lebih tepat, menapis sebahagian daripada kebisingan, dan mengelakkan isyarat yang salah dalam gegaran. Selain itu, garis rata-rata pencerahan itu sendiri mempunyai kelebihan untuk menonjolkan trend, yang digunakan bersama dengan harga, dapat meningkatkan lagi ketepatan penilaian.
Strategi ini mempunyai risiko utama:
Mengenai risiko di atas, kita boleh mengurangkan risiko dan meningkatkan kestabilan strategi dengan cara seperti menyesuaikan parameter kelancaran, memperkenalkan mekanisme hentikan kerugian, mengurangkan kedudukan perdagangan tunggal.
Strategi ini juga boleh dioptimumkan dalam beberapa aspek:
Dengan mengoptimumkan beberapa perkara di atas, anda dapat mengurangkan risiko penyesuaian kurva strategi dan meningkatkan adaptasi dan kestabilan strategi.
Strategi ini keseluruhan idea jelas dan mudah difahami, dengan mengira garis rata-rata cahaya untuk menentukan trend harga, dan dengan itu melakukan tindakan jangka pendek. Kelebihan terbesar adalah dapat menapis sebahagian daripada bunyi bising, meningkatkan ketepatan penilaian isyarat. Tetapi ada juga kesukaran pengoptimuman parameter tertentu dan risiko kehilangan perubahan cepat.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Smoothed Heiken Ashi Strategy", overlay=true)
// Inputs
g_TimeframeSettings = 'Display & Timeframe Settings'
time_frame = input.timeframe(title='Timeframe for HA candle calculation', defval='', group=g_TimeframeSettings)
g_SmoothedHASettings = 'Smoothed HA Settings'
smoothedHALength = input.int(title='HA Price Input Smoothing Length', minval=1, maxval=500, step=1, defval=10, group=g_SmoothedHASettings)
// Define a function for calculating the smoothed moving average
smoothedMovingAvg(src, len) =>
smma = 0.0
smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
smma
// Function to get Heiken Ashi close
getHAClose(o, h, l, c) =>
((o + h + l + c) / 4)
// Calculate smoothed HA candles
smoothedHAOpen = request.security(syminfo.tickerid, time_frame, open)
smoothedMA1close = smoothedMovingAvg(request.security(syminfo.tickerid, time_frame, close), smoothedHALength)
smoothedHAClose = getHAClose(smoothedHAOpen, smoothedHAOpen, smoothedHAOpen, smoothedMA1close)
// Plot Smoothed Heiken Ashi candles
plotcandle(open=smoothedHAOpen, high=smoothedHAOpen, low=smoothedHAOpen, close=smoothedHAClose, color=color.new(color.blue, 0), wickcolor=color.new(color.blue, 0))
// Strategy logic
longCondition = close > smoothedHAClose
shortCondition = close < smoothedHAClose
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.close("Buy", when=shortCondition)
plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar)
plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar)