Strategi Dagangan Trend PSAR Heikin-Ashi

Penulis:ChaoZhang, Tarikh: 2023-09-12 15:16:17
Tag:

Strategi ini menggabungkan lilin Heikin-Ashi dan penunjuk PSAR untuk pengenalan trend dan isyarat perdagangan.

Logik Strategi:

  1. Mengira Heikin-Ashi terbuka, dekat, tinggi dan rendah.

  2. Warna lilin menentukan trend banteng / beruang sementara.

  3. Mengira PSAR dan mengenal pasti pembalikan trend apabila ia melintasi harga Heikin-Ashi.

  4. Pergi panjang pada trend penurunan PSAR dan pendek pada trend kenaikan PSAR.

  5. PSAR menyesuaikan diri berdasarkan tinggi / rendah baru dan faktor pecutan.

Kelebihan:

  1. Gabungan meningkatkan ketepatan - Heikin-Ashi menapis bunyi bising, PSAR menangkap pembalikan.

  2. PSAR adaptif yang boleh disesuaikan dengan keadaan pasaran yang berubah.

  3. Peraturan yang jelas memberi manfaat kepada optimum parameter.

Risiko:

  1. Heikin-Ashi dan PSAR yang tertinggal mungkin terlepas entri terbaik.

  2. PSAR terdedah kepada isyarat palsu dalam trend yang bergelombang.

  3. Pengurusan risiko yang ketat diperlukan untuk mempertahankan diri daripada whipsaws.

Ringkasnya, strategi ini memasangkan Heikin-Ashi untuk konteks trend dengan PSAR untuk masa. Lag dan isyarat palsu memerlukan berhati-hati tetapi dapat diatasi melalui pengoptimuman untuk keuntungan yang stabil jangka panjang.


/*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)


Lebih lanjut