Strategi Dagangan Pullback Berdasarkan Purata Bergerak Dinamik

Penulis:ChaoZhang, Tarikh: 2024-02-27 14:38:45
Tag:

img

Ringkasan

Strategi ini menggunakan sistem purata bergerak berganda untuk mengenal pasti peluang pecah yang berpotensi dalam saham atau mata wang kripto yang dipilih. Prinsip terasnya adalah membeli apabila purata bergerak jangka pendek bangkit kembali dari bawah purata bergerak jangka panjang dan menjual apabila harga menguji semula purata bergerak jangka panjang.

Logika Strategi

Strategi ini menggunakan dua purata bergerak mudah (SMA) dengan tempoh yang berbeza sebagai isyarat perdagangan. SMA pertama mempunyai tempoh yang lebih lama untuk mewakili arah trend keseluruhan. SMA kedua mempunyai tempoh yang lebih pendek untuk menangkap turun naik harga jangka pendek.

Apabila SMA jangka pendek melintasi di atas SMA jangka panjang dari bawah, ia menandakan trend kenaikan harga secara keseluruhan oleh itu strategi membuka kedudukan panjang. Apabila harga menarik kembali ke bawah untuk menguji semula SMA jangka panjang, ia menunjukkan penarikan jangka pendek telah berakhir dan strategi mempertimbangkan untuk berhenti atau mengambil keuntungan dari kedudukan.

Di samping itu, strategi ini mempunyai oversold dan overbought syarat untuk mengelakkan perdagangan dalam situasi yang melampau. ia hanya membuka kedudukan apabila kedua-dua crossover SMA dan kriteria penilaian yang munasabah dipenuhi.

Kelebihan

  • Sistem purata bergerak berganda secara berkesan mengenal pasti trend jangka sederhana
  • Menggabungkan kelebihan trend berikut dan perdagangan pullback
  • Keadaan jual dan beli berlebihan yang tertanam mengurangkan perdagangan yang tidak perlu

Analisis Risiko

  • Sukar untuk menentukan masa akhir tarik balik yang tepat, mungkin berhenti sebelum masa
  • Tidak dapat mengurangkan kerugian dengan cepat apabila perubahan trend, boleh mengalami pengeluaran besar
  • Penyesuaian parameter yang tidak baik boleh menyebabkan perdagangan berlebihan atau perdagangan konservatif

Arahan pengoptimuman

Terdapat ruang tambahan untuk mengoptimumkan strategi ini:

  1. Menggunakan penunjuk teknikal yang lebih maju seperti Bollinger Bands dan KD untuk mengukur gelombang harga dan trend
  2. Masukkan lebih banyak faktor seperti perubahan jumlah, turun naik untuk menentukan penamat pulback
  3. Saiz kedudukan secara dinamik untuk memaksimumkan potensi keuntungan
  4. Mengoptimumkan logik stop loss dengan awan KAMA, Ichimoku dan isyarat jangka masa yang lebih rendah

Kesimpulan

Strategi ini menggabungkan kekuatan perdagangan trend berikut dan pullback menggunakan sistem purata bergerak berganda untuk mengesan peluang. Pada masa yang sama, syarat overbought / oversold tertanam mengelakkan pembukaan kedudukan yang tidak perlu.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



Lebih lanjut