Strategi Perdagangan Kuantitatif Berdasarkan Kurva Coppock

Penulis:ChaoZhang, Tanggal: 2023-11-13 11:44:55
Tag:

img

Gambaran umum

Strategi ini menggunakan indikator teknis Curve Coppock yang kurang dikenal untuk menerapkan perdagangan kuantitatif. Curve Coppock diperoleh dengan mengambil rata-rata bergerak tertimbang dari tingkat perubahan (ROC) dari indeks pasar seperti S&P 500 atau setara perdagangan seperti SPY ETF. Sinyal beli dihasilkan ketika Curve Coppock melintasi di atas nol dan sinyal jual ketika melintasi di bawah. Sinyal stop loss trailing opsional tersedia untuk mengunci keuntungan.

Prinsip-prinsip

Strategi ini menggunakan Kurva Coppock sebagai indikator teknis untuk menghasilkan sinyal perdagangan.

Kurva Coppock = WMA 10 periode (14-periode ROC + 11-periode ROC)

Di mana tingkat perubahan ROC dihitung sebagai: (Tutup saat ini - Tutup N periode yang lalu) / Tutup N periode yang lalu

Strategi ini menghitung kurva Coppock berdasarkan harga penutupan $SPY. Sinyal beli dihasilkan ketika kurva melintasi di atas nol dan sinyal jual ketika melintasi di bawah.

Keuntungan

  • Menggunakan indikator unik Curve Coppock yang memiliki kekuatan prediktif yang lebih baik daripada indikator umum seperti rata-rata bergerak
  • Parameter yang dapat dikonfigurasi untuk optimasi seperti periode WMA, periode ROC dll.
  • Menggunakan $SPY sebagai sumber sinyal yang memiliki representasi pasar yang kuat
  • Opsional trailing stop loss untuk mengunci keuntungan dan mengurangi drawdown

Risiko

  • Kurva Coppock bukanlah indikator yang banyak digunakan, efektivitasnya perlu divalidasi
  • Lag sinyal mungkin ada, parameter perlu dioptimalkan
  • Stop loss yang terlalu luas dapat melewatkan peluang pullback
  • Bergantung pada satu indikator dapat menghasilkan sinyal palsu

Arahan Optimasi

  • Uji kombinasi parameter optimal di pasar dan saham yang berbeda
  • Gabungkan dengan indikator lain untuk menyaring sinyal palsu misalnya volume
  • Optimalisasi dinamis persentase stop loss
  • Pertimbangkan sinyal masuk lainnya seperti jumlah bar atau terobosan harga

Kesimpulan

Strategi ini memanfaatkan karakteristik bentuk kurva unik dari Kurva Coppock untuk menghasilkan sinyal perdagangan. Dibandingkan dengan indikator umum, Kurva Coppock memiliki kekuatan prediktif yang lebih kuat. Tetapi sebagai indikator mandiri, keandalanannya perlu divalidasi. Disarankan untuk menggabungkannya dengan faktor lain untuk menyaring sinyal palsu. Melalui optimasi parameter, optimasi stop loss dan menggabungkan dengan indikator lain, strategi ini dapat menjadi sistem perdagangan kuantitatif yang efektif.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RolandoSantos

//@version=4
strategy(title = "Coppock Curve", shorttitle = "Copp Curve Strat", default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

///trail stop
longTrailPerc = input(title="Trail Long Loss (%)", minval=0.0, step=0.1, defval=100) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
//Use SPY for Copp Curve entries and exits//
security = input("SPY")
ticker = security(security, "D", close)

///Copp Curve////
wmaLength = input(title="WMA Length", type=input.integer, defval=10)
longRoCLength = input(title="Long RoC Length", type=input.integer, defval=14)
shortRoCLength = input(title="Short RoC Length", type=input.integer, defval=11)
source = ticker
curve = wma(roc(source, longRoCLength) + roc(source, shortRoCLength), wmaLength)

///Lower Band Plot///
band1 = hline(0)
band0 = hline(100)
band2 = hline(-100)
fill(band1, band0, color=color.green, transp=90)
fill(band2, band1, color=color.red, transp=90)
plot(curve, color=color.white)

///Trade Conditions///
Bull = curve > 0
Bear = curve < 0

///Entries and Exits//
if (Bull)
    strategy.entry("Long", strategy.long, comment = "LE")
    

if (Bear)
    strategy.close("Long", qty_percent=100, comment="close")
    
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="Long Trail Stop", stop=longStopPrice)
    


Lebih banyak