Strategi ini menggunakan grafik garis ekuilibrium dan indikator PSAR untuk membuat penilaian tren dan menghasilkan sinyal perdagangan. Strategi ini menggunakan fitur pengurangan kebisingan garis ekuilibrium, bekerja sama dengan indikator PSAR untuk menentukan titik balik tren, untuk menangkap tren garis tengah dan panjang.
Prinsip-prinsip Strategi:
Hitung harga pembukaan, harga penutupan, harga tertinggi, harga terendah dari garis keseimbangan.
Tren multihead dan hollowhead berdasarkan warna entitas garis ekuilibrium.
Perhitungan indikator PSAR, menentukan pembalikan tren ketika mereka terobosan dari atas ke bawah atau bawah ke atas.
Ketika garis ekuilibrium bercabang, PSAR melakukan lebih banyak terobosan ke bawah; ketika garis ekuilibrium kosong, PSAR melakukan terobosan ke atas.
PSAR beradaptasi dengan faktor tinggi, rendah, dan akselerasi.
Keuntungan dari strategi ini:
Garis keseimbangan memfilter kebisingan, dan PSAR menangkap pembalikan. Kombinasi meningkatkan akurasi.
Parameter PSAR dapat beradaptasi dengan perubahan pasar.
Peraturan yang jelas dan mudah digunakan untuk optimasi parameter.
Bahaya dari strategi ini:
Ada masalah dengan Equilibrium Line dan PSAR, yang mungkin akan kehilangan titik masuk terbaik.
Dalam tren seismik, PSAR mudah menimbulkan sinyal yang salah.
Manajemen dana yang ketat diperlukan untuk melindungi risiko dari perdagangan terbalik.
Singkatnya, strategi ini menilai tren besar melalui garis keseimbangan, mengidentifikasi titik masuk spesifik, dan melakukan operasi pelacakan tren. Masalah lag dan risiko false reversal perlu diwaspadai, tetapi dapat memperoleh pengembalian stabil jangka panjang melalui optimasi.
/*backtest
start: 2023-08-12 00:00:00
end: 2023-09-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("QuantNomad - Heikin-Ashi PSAR Strategy", shorttitle = "HA-PSAR[QN]", overlay = false)
////////////
// INPUTS //
start = input(0.02, title = "PSAR Start")
increment = input(0.02, title = "PSAR Increment")
maximum = input(0.2, title = "PSAR Max")
start_year = input(2018, 'Start Year', input.integer)
start_month = input(1, 'Start Month', input.integer)
start_day = input(1, 'Start Day', input.integer)
end_year = input(2100, 'End Year', input.integer)
end_month = input(1, 'End Month', input.integer)
end_day = input(1, 'End Day', input.integer)
date_start = timestamp(start_year, start_month, start_day, 00, 00)
date_end = timestamp(end_year, end_month, end_day, 00, 00)
// if time is in correct period
time_cond = time >= date_start and time <= date_end
// Calculation HA Values
haopen = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh = max(high, max(haopen, haclose))
halow = min(low, min(haopen, haclose))
// HA colors
hacolor = haclose > haopen ? color.green : color.red
psar = 0.0 // PSAR
af = 0.0 // Acceleration Factor
trend_dir = 0 // Current direction of PSAR
ep = 0.0 // Extreme point
trend_bars = 0
sar_long_to_short = trend_dir[1] == 1 and haclose <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and haclose >= psar[1] // PSAR switches from short to long
trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long
// Calculate trend direction
trend_dir := barstate.isfirst[1] and haclose[1] > haopen[1] ? 1 :
barstate.isfirst[1] and haclose[1] <= haopen[1] ? -1 :
sar_long_to_short ? -1 :
sar_short_to_long ? 1 : nz(trend_dir[1])
trend_bars := sar_long_to_short ? -1 :
sar_short_to_long ? 1 :
trend_dir == 1 ? nz(trend_bars[1]) + 1 :
trend_dir == -1 ? nz(trend_bars[1]) - 1 :
nz(trend_bars[1])
// Calculate Acceleration Factor
af := trend_change ? start :
(trend_dir == 1 and hahigh > ep[1]) or
(trend_dir == -1 and low < ep[1]) ?
min(maximum, af[1] + increment) :
af[1]
// Calculate extreme point
ep := trend_change and trend_dir == 1 ? hahigh :
trend_change and trend_dir == -1 ? halow :
trend_dir == 1 ? max(ep[1], hahigh) :
min(ep[1], halow)
// Calculate PSAR
psar := barstate.isfirst[1] and haclose[1] > haopen[1] ? halow[1] :
barstate.isfirst[1] and haclose[1] <= haopen[1] ? hahigh[1] :
trend_change ? ep[1] :
trend_dir == 1 ? psar[1] + af * (ep - psar[1]) : psar[1] - af * (psar[1] - ep)
plotcandle(haopen, hahigh, halow, haclose, title = "HA", color = hacolor)
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red, linewidth = 2)
// Strategy
strategy.entry("long", true, when = sar_short_to_long and time_cond)
strategy.entry("short", false, when = sar_long_to_short and time_cond)