
Strategi ini menggunakan petunjuk teknikal Coppock Curve yang kurang dikenali untuk mencapai perdagangan kuantitatif. Kurva Coppock berasal dari purata bergerak bertimbangan dengan mengira kadar perubahan indeks Standard & Poor’s 500 atau setara dagangan.
Strategi ini menggunakan kurva Coppock sebagai penunjuk teknikal untuk menghasilkan isyarat perdagangan. Formula untuk mengira kurva Coppock adalah:
Kurva Coppock = purata bergerak bertimbangan 10 kitaran (ROC 14 kitaran + ROC 11 kitaran)
Di mana formula untuk mengira kadar perubahan ROC adalah: ((Close semasa - Close sebelum N kitaran) / Close sebelum N kitaran
Strategi ini adalah berdasarkan harga penutupan $SPY, dan mengira keluk Coppock. Apabila keluk tersebut melewati garis nol, ia menghasilkan isyarat beli, dan apabila ia melewati garis nol, ia menghasilkan isyarat jual.
Strategi ini memanfaatkan ciri bentuk kurva unik Coppock untuk menghasilkan isyarat perdagangan. Ia mempunyai prospek yang lebih kuat daripada petunjuk biasa. Tetapi kebolehpercayaan sebagai petunjuk bebas masih perlu disahkan. Ia disyorkan untuk menggunakan kombinasi dengan faktor-faktor lain untuk menyaring isyarat palsu.
/*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)