Strategi Perdagangan Fluktuasi Ofset SMA

Penulis:ChaoZhang, Tanggal: 2023-12-19 10:52:10
Tag:

img

Tinjauan Strategi

Strategi ini menggunakan moving average (SMA) sederhana dan beberapa perhitungan matematika untuk menentukan titik beli/jual. Kami menyimpan garis SMA 100 hari sebagai dasar kami. Jika harga penutupan di bawah garis ini, kami menentukan posisi pembukaan berdasarkan persentase harga di bawah garis (offset rendah), yang dapat dikonfigurasi. Demikian pula, kami menetapkan persentase offset tinggi di atas SMA 100 hari sebelum menutup posisi panjang. Jika kami mencoba menutup terlalu awal sementara harga masih naik, stop loss trailing akan dipicu.

Logika Strategi

Strategi ini menggunakan tiga garis SMA: garis cepat (default 14 hari), garis lambat (default 100 hari), dan garis referensi (default 30 hari).

Ini menjadi panjang ketika harga penutupan berada di bawah garis referensi, persentase di bawah garis lambat (offset rendah) lebih besar dari nilai yang dikonfigurasi, garis cepat naik dan garis lambat turun.

Ini menutup panjang ketika harga penutupan di atas garis referensi, persentase di atas garis lambat (offset tinggi) lebih besar dari nilai yang dikonfigurasi, harga penutupan naik selama 3 lilin berturut-turut, kita memiliki keuntungan terbuka, dan garis cepat di atas garis lambat.

Ukuran pesanan didasarkan pada persentase dari total ekuitas, ini mengontrol ukuran posisi kami.

Analisis Keuntungan

  1. Menggunakan keuntungan dari SMA yang mampu meratakan fluktuasi harga dan menyaring kebisingan pasar.
  2. SMA crossover memiliki beberapa kemampuan untuk memprediksi perubahan tren.
  3. Menetapkan offset menghindari pelanggaran palsu dari garis SMA.
  4. Kombinasi indikator tren dan crossover meningkatkan akurasi sinyal perdagangan.
  5. Mengikuti stop loss mengunci keuntungan dan mencegah penarikan.

Analisis Risiko

  1. SMA sendiri memiliki lag dan mungkin melewatkan titik balik harga.
  2. Pengaturan offset yang tidak tepat dapat membuat strategi terlalu agresif atau terlalu konservatif.
  3. Parameter stop loss yang tidak benar dapat menghentikan terlalu awal atau persentase stop loss terlalu besar.
  4. Tidak mampu mengatasi perubahan harga yang keras.

Peningkatan yang sesuai:

  1. Tambahkan indikator utama lainnya ke entri filter.
  2. Backtest dan mengoptimalkan offset.
  3. Backtest dan temukan parameter stop loss yang optimal.
  4. Mengurangi ukuran posisi selama periode volatilitas tinggi.

Arahan Optimasi

  1. Uji SMA dari periode yang berbeda untuk menemukan parameter optimal.
  2. Tambahkan indikator lain untuk menentukan struktur dan tren pasar.
  3. Mengoptimalkan parameter stop loss untuk mengunci lebih banyak keuntungan.
  4. Sesuaikan ukuran posisi berdasarkan volatilitas pasar.
  5. Menerapkan strategi untuk beberapa produk secara bersamaan untuk diversifikasi.

Kesimpulan

Strategi Trading Fluktuasi Ofset SMA mengidentifikasi titik masuk optimal dengan menetapkan offset berdasarkan garis SMA yang berbeda. Mekanisme keluar menetapkan stop loss trailing untuk mengunci keuntungan. Strategi ini sederhana untuk dipahami dan diimplementasikan. Dengan mengoptimalkan parameter seperti periode SMA, offset, tingkat stop loss, hasil yang lebih baik dapat dicapai. Ini cocok untuk investor jangka menengah dan panjang yang mencari keuntungan yang stabil.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001)
highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
distanceLow = (close - smaSlow) / close
distanceHigh = (close - smaSlow) / close

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// guard that the low is under our sma low reference line by our lowOffset %, 
// default is 0.001. (low < smaRef) and (distanceLow > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) 

// The sell Strategy:
// Guard that close is higher than our sma high reference line by our 
// highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 1.35 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Lebih banyak