Strategi Perdagangan Kadar Perubahan

Penulis:ChaoZhang, Tarikh: 2023-09-28 11:26:44
Tag:

Ringkasan

Strategi ini mengira kadar perubahan dari masa ke masa untuk menentukan isyarat beli / jual. Ia boleh membantu peniaga menangkap peluang dalam turun naik harga jangka pendek.

Logika Strategi

Strategi ini terutamanya berdasarkan kepada penunjuk berikut:

  1. Purata bergerak mudah pantas (default 14 hari): untuk mengukur trend jangka pendek
  2. Rata-rata Bergerak Mudah (default 100 hari): untuk mengukur trend jangka panjang
  3. Referensi Purata Bergerak Sederhana (default 30 hari): untuk menentukan arah keseluruhan
  4. Kadar Perubahan: dikira berdasarkan harga tertinggi/terendah sepanjang tempoh penglihatan (default 12 bar) untuk menilai besar fluktuasi harga

Peraturan kemasukan khusus:

  1. Harga di bawah SMA rujukan
  2. ROC di atas ambang ROC rendah yang telah ditetapkan (default 2.3%)
  3. SMA yang cepat meningkat dan SMA yang perlahan menurun, menunjukkan kemungkinan persilangan

Peraturan keluar khusus:

  1. Harga di atas SMA rujukan
  2. ROC di atas ambang ROC tinggi yang telah ditetapkan (default 4.7%)
  3. 3 bar menaik berturut-turut
  4. Keuntungan semasa > 0
  5. SMA pantas di atas SMA perlahan

Ukuran kedudukan adalah peratusan (default 96%) daripada jumlah ekuiti untuk leverage.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan ROC untuk mengesan perubahan membolehkan menangkap pergerakan menaik / menurun untuk pulangan yang lebih tinggi.

  2. Menggabungkan SMA pantas / perlahan membantu mengenal pasti titik rendah / tinggi dengan lebih tepat.

  3. SMA rujukan memberikan arah keseluruhan untuk mengelakkan gangguan oleh bunyi jangka pendek.

  4. Mengikuti stop loss mengunci keuntungan dan mengurangkan risiko penurunan.

  5. Leverage dari saiz kedudukan memperkuat keuntungan.

Secara keseluruhan, strategi ini menggunakan ROC, SMA dan alat lain dengan berkesan untuk memanfaatkan turun naik harga.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Parameter ROC dan SMA yang tidak betul boleh menyebabkan isyarat yang terlepas atau perdagangan yang buruk.

  2. Ukuran kedudukan yang berlebihan meningkatkan risiko. Peratusan pesanan perlu diuji dan disesuaikan.

  3. Peratusan stop loss boleh diselaraskan.

  4. Cenderung kepada whipsaws di pasaran yang berbeza.

  5. Backtest risiko overfit. Kekuatan harus disahkan melalui perdagangan langsung di seluruh pasaran.

Risiko boleh dikendalikan melalui pengoptimuman parameter, saiz kedudukan, pelarasan stop loss, ujian ketahanan dan lain-lain.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Tambahkan penunjuk teknikal lain seperti turun naik, jumlah untuk meningkatkan ketepatan isyarat.

  2. Mengoptimumkan bilangan perdagangan dengan mengurangkan kekerapan perdagangan untuk meminimumkan kesan whipsaw.

  3. Menggabungkan teknik pecah di sekitar tahap harga utama.

  4. Gunakan pembelajaran mesin untuk mengoptimumkan parameter.

  5. Uji ketahanan di pasaran dan jangka masa yang berbeza.

  6. Tune parameter khusus untuk produk yang berbeza seperti saham, forex dll

  7. Sentiasa memperbaiki isyarat dan kawalan risiko berdasarkan hasil langsung.

Ringkasan

Strategi ini mengenal pasti peluang dagangan di sekitar goyangan jangka pendek menggunakan analisis ROC dan SMA. Ia membantu memanfaatkan perubahan cepat tetapi juga memerlukan kawalan risiko yang betul. Parameter penyesuaian halus, ukuran kedudukan, stop loss dan ujian ketahanan dapat meningkatkan kestabilan dan daya adaptasi. Strategi ini berfungsi sebagai templat rujukan untuk perdagangan berjumlah tetapi memerlukan penyesuaian untuk pasaran yang berbeza.


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

// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change 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.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1) 

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],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 Reference line 
// Guard that the rate of change over the lookback period is greater than our 
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > 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 (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1)) 

// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of 
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > 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 (ROC > 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 2.62 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=3.62) * 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