Strategi Perdagangan Fluktuasi Offset SMA

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

img

Ringkasan Strategi

Strategi ini menggunakan purata bergerak mudah (SMA) dan beberapa pengiraan matematik untuk menentukan titik beli / jual. Kami menyimpan garis SMA 100 hari sebagai asas kami. Jika harga penutupan di bawah garis ini, kami menentukan kedudukan pembukaan berdasarkan peratusan harga di bawah garis (offset rendah), yang boleh dikonfigurasi. Begitu juga, kami menetapkan peratusan offset tinggi di atas SMA 100 hari sebelum menutup kedudukan panjang. Jika kita cuba menutup terlalu awal semasa harga masih meningkat, stop loss yang tertinggal akan dicetuskan.

Logika Strategi

Strategi ini menggunakan tiga garis SMA: garis pantas (default 14 hari), garis perlahan (default 100 hari), dan garis rujukan (default 30 hari).

Ia menjadi panjang apabila harga penutupan berada di bawah garis rujukan, peratusan di bawah garis perlahan (offset rendah) lebih besar daripada nilai yang dikonfigurasikan, garis pantas meningkat dan garis perlahan jatuh.

Ia ditutup lama apabila harga penutupan di atas garis rujukan, peratusan di atas garis perlahan (offset tinggi) lebih besar daripada nilai yang dikonfigurasikan, harga penutupan meningkat selama 3 lilin berturut-turut, kita mempunyai keuntungan terbuka, dan garis pantas di atas garis perlahan.

Saiz pesanan adalah berdasarkan peratusan jumlah ekuiti, ini mengawal saiz kedudukan kami.

Analisis Kelebihan

  1. Menggunakan kelebihan SMA yang dapat meratakan turun naik harga dan menapis bunyi pasaran.
  2. SMA crossover mempunyai beberapa keupayaan untuk meramalkan perubahan trend.
  3. Menetapkan offset mengelakkan pecah palsu garis SMA.
  4. Menggabungkan trend dan penunjuk silang meningkatkan ketepatan isyarat perdagangan.
  5. Mengikuti stop loss mengunci keuntungan dan menghalang pengeluaran.

Analisis Risiko

  1. SMA sendiri mempunyai lag dan mungkin terlepas titik perubahan harga.
  2. Tetapan offset yang tidak betul boleh membuat strategi terlalu agresif atau terlalu konservatif.
  3. Parameter stop loss yang tidak betul boleh berhenti terlalu awal atau peratusan stop loss terlalu besar.
  4. Tidak dapat mengatasi perubahan harga yang ganas.

Peningkatan yang sepadan:

  1. Tambah penunjuk utama lain ke entri penapis.
  2. Backtest dan mengoptimumkan offset.
  3. Uji semula dan cari parameter stop loss yang optimum.
  4. Mengurangkan saiz kedudukan semasa tempoh turun naik yang tinggi.

Arahan pengoptimuman

  1. Uji SMA dari tempoh yang berbeza untuk mencari parameter optimum.
  2. Tambahkan penunjuk lain untuk menentukan struktur pasaran dan trend.
  3. Mengoptimumkan parameter stop loss untuk mengunci lebih banyak keuntungan.
  4. Sesuaikan saiz kedudukan berdasarkan turun naik pasaran.
  5. Menggunakan strategi kepada pelbagai produk secara serentak untuk kepelbagaian.

Kesimpulan

Strategi Perdagangan Fluktuasi Offset SMA mengenal pasti titik kemasukan yang optimum dengan menetapkan offset berdasarkan garis SMA yang berbeza. Mekanisme keluar menetapkan stop loss yang menyusul untuk mengunci keuntungan. Strategi ini mudah difahami dan dilaksanakan. Dengan mengoptimumkan parameter seperti tempoh SMA, offset, tahap stop loss, hasil yang lebih baik dapat dicapai. Ia sesuai untuk pelabur 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 lanjut