Strategi mengikuti tren berdasarkan indikator Stokastik dan indikator CCI


Tanggal Pembuatan: 2023-11-22 16:23:31 Akhirnya memodifikasi: 2023-11-22 16:23:31
menyalin: 1 Jumlah klik: 844
1
fokus pada
1617
Pengikut

Strategi mengikuti tren berdasarkan indikator Stokastik dan indikator CCI

Ringkasan

Strategi ini menggabungkan indikator Stochastic dan indikator CCI untuk mengidentifikasi arah tren, menggunakan indikator Rate of Change untuk menyaring tren goyangan, dan untuk melacak tren. Strategi ini menggunakan metode perdagangan entry-break, stop loss exit.

Prinsip Strategi

  1. Indikator Stochastic menilai bentuk kosong
    Stochastic adalah sinyal beli ketika indikator berada di atas bar terakhir, dan sinyal jual ketika indikator berada di bawah bar terakhir.
  2. Indikator CCI menilai arah tren
    CCI lebih besar dari 0 untuk pasar multihead, kurang dari 0 untuk pasar kosong
  3. Indeks Rate of Change memfilterkan tren gempa
    Setel parameter Rate of Change untuk menentukan apakah harga berada dalam tren aktif
  4. Aturan masuk dan keluar
    Sinyal beli: Stochastic di atas bar terakhir dan CCI lebih besar dari 0 dan tren harga aktif
    Sinyal jual: Stochastic di bawah bar terakhir dan CCI kurang dari 0 dan tren harga aktif
    Stop loss exit: 3% stop loss untuk jalur panjang, 3% stop loss untuk jalur pendek

Analisis Keunggulan

  1. Kombinasi indikator Stochastic dan indikator CCI memberikan tingkat akurasi yang lebih tinggi untuk menentukan arah tren
  2. Indikator Rate of Change efektif untuk menangkal tren goyangan dan menghindari perdagangan yang tidak efektif
  3. Multi-spatial bidirectional trading untuk menangkap berbagai jenis tren
  4. Menerobos masuk, mengejar tren, dan memanfaatkan peluang tren tepat waktu
  5. Hentikan Kerugian dengan Teliti, Hindari Kerugian Besar, Kontrol Resiko yang Efektif

Analisis risiko

  1. Setelan parameter kebijakan yang tidak tepat dapat menyebabkan terlalu konservatif atau radikal
  2. Indikator terbatas dan mungkin tidak efektif dalam situasi ekstrim
  3. Penembusan masuk akan melewati awal tren, sebagian keuntungan akan dipotong
  4. Stop loss yang terlalu kecil mudah untuk dilewatkan, terlalu besar tidak dapat dikendalikan dengan baik.

Arah optimasi

  1. Pengoptimalan parameter: memperbaiki pengaturan parameter, mencari kombinasi parameter yang optimal
  2. Berbagai Indikator Berkolaborasi Untuk Menambahkan Lebih Banyak Indikator Kecenderungan Penghakiman, Meningkatkan Efektivitas Keputusan
  3. Stop loss aktif. Mengatur stop loss tracking atau stop loss time-step, mengurangi kemungkinan stop loss akan ditembus
  4. Evaluasi risiko. Termasuk pengendalian indikator risiko seperti pengembalian maksimum, dan pengendalian risiko secara menyeluruh

Meringkaskan

Strategi ini mengintegrasikan Stochastic, CCI dan Rate of Change, tiga indikator besar untuk menentukan arah tren, untuk menangkap peluang tren dengan cara menembus pelacakan. Keunggulan strategi terletak pada indikator yang dikombinasikan untuk menilai secara akurat, memfilter gerakan getaran secara efektif, melalui risiko pengendalian kerugian yang ketat.

Kode Sumber Strategi
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Stochastic CCI BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// CCI ///////////// 
src = close
ccilength = input(13, minval=1, title="CCI Length")
c=cci(src, ccilength)

///////////// Stochastic ///////////// 
len = input(19, minval=1, title="RSI Length")
lenema = input(12, minval=1, title="RSI-EMA Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
out = ema(rsi, lenema)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = out > out[1] and isMoving() and c > 0
short = out < out[1] and isMoving() and c < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(3.0, title='Stop Loss %') / 100 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)
    strategy.exit("L Ex", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S Ex", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=80)
plot(out, color = out > out[1] ? color.lime:color.red, linewidth = 2, title="Stoch")
plot(c, color = c > 0 ? color.lime:color.red, linewidth = 2, title="CCI")