Strategi Trading Pullback Berdasarkan Rata-rata Bergerak Dinamis

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

img

Gambaran umum

Strategi ini menggunakan sistem rata-rata bergerak ganda untuk mengidentifikasi peluang breakout potensial dalam saham atau cryptocurrency yang dipilih. Prinsip inti adalah membeli ketika rata-rata bergerak jangka pendek memantul kembali dari bawah rata-rata bergerak jangka panjang dan menjual ketika harga menguji kembali rata-rata bergerak jangka panjang.

Logika Strategi

Strategi ini menggunakan dua rata-rata bergerak sederhana (SMA) dengan periode yang berbeda sebagai sinyal perdagangan. SMA pertama memiliki periode yang lebih lama untuk mewakili arah tren keseluruhan. SMA kedua memiliki periode yang lebih pendek untuk menangkap fluktuasi harga jangka pendek.

Ketika SMA jangka pendek melintasi SMA jangka panjang dari bawah, ini menandakan tren kenaikan harga secara keseluruhan sehingga strategi membuka posisi panjang. Ketika harga menarik kembali ke bawah untuk menguji kembali SMA jangka panjang, ini menunjukkan bahwa penarikan jangka pendek telah berakhir dan strategi mempertimbangkan untuk berhenti atau mengambil keuntungan dari posisi.

Selain itu, strategi ini memiliki kondisi oversold dan overbought untuk menghindari perdagangan dalam situasi ekstrem.

Keuntungan

  • Sistem rata-rata bergerak ganda secara efektif mengidentifikasi tren jangka menengah
  • Menggabungkan keuntungan dari tren mengikuti dan pullback trading
  • Kondisi oversold dan overbought yang tertanam mengurangi perdagangan yang tidak perlu

Analisis Risiko

  • Sulit untuk menentukan waktu akhir penarikan yang tepat, mungkin berhenti lebih awal
  • Tidak dapat dengan cepat memotong kerugian ketika perubahan tren, bisa menderita penarikan besar
  • Penyesuaian parameter yang buruk dapat mengakibatkan perdagangan berlebihan atau perdagangan konservatif

Arahan Optimasi

Ada ruang tambahan untuk mengoptimalkan strategi ini:

  1. Menggunakan indikator teknis yang lebih canggih seperti Bollinger Bands dan KD untuk mengukur gelombang harga dan tren
  2. Masukkan lebih banyak faktor seperti perubahan volume, volatilitas untuk menentukan penyelesaian pullback
  3. Posisi ukuran dinamis untuk memaksimalkan potensi keuntungan
  4. Optimalkan logika stop loss dengan KAMA, awan Ichimoku dan sinyal timeframe yang lebih rendah

Kesimpulan

Strategi ini menggabungkan kekuatan trading trend following dan pullback dengan menggunakan sistem moving average dual untuk mendeteksi peluang. Pada saat yang sama, kondisi overbought/oversold tertanam menghindari pembukaan posisi 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 banyak