Strategi mengikut arah aliran berdasarkan penunjuk Stochastic dan penunjuk CCI


Tarikh penciptaan: 2023-11-22 16:23:31 Akhirnya diubah suai: 2023-11-22 16:23:31
Salin: 1 Bilangan klik: 844
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berdasarkan penunjuk Stochastic dan penunjuk CCI

Gambaran keseluruhan

Strategi ini menggabungkan penunjuk Stochastic dan penunjuk CCI untuk mengenal pasti arah trend, menggunakan penunjuk Rate of Change untuk menyaring trend goyah, untuk menjejaki trend. Strategi ini menggunakan cara berdagang untuk masuk masuk, menghentikan keluar rugi.

Prinsip Strategi

  1. Indeks Stochastic menilai bentuk kosong
    Stochastic adalah tanda beli apabila bar terakhir di atasnya dan tanda jual apabila bar terakhir di bawahnya.
  2. Indeks CCI bagi menentukan arah trend
    CCI lebih besar daripada 0 untuk pasaran multihead, kurang daripada 0 untuk pasaran kosong
  3. Penunjuk Rate of Change menapis trend bergolak
    Tetapkan parameter Rate of Change untuk menentukan sama ada harga berada dalam trend aktif
  4. Peraturan masuk dan keluar
    isyarat beli: Stochastic di atas bar terkini dan CCI lebih besar daripada 0 dan harga trend aktif
    Sinyal jual: Stochastic di bawah bar terakhir dan CCI kurang daripada 0 dan trend harga aktif
    Stop loss exit: 3% stop loss untuk talian panjang, 3% stop loss untuk talian pendek

Analisis kelebihan

  1. Gabungan Stochastic dan CCI menunjukkan arah trend yang lebih tepat
  2. Indikator Rate of Change berkesan memadamkan trend goyah dan mengelakkan perdagangan yang tidak berkesan
  3. Perdagangan dua hala pelbagai ruang, menangkap pelbagai jenis trend
  4. Menerobos tren dan mengambil peluang dalam masa yang tepat
  5. Mencegah Kerosakan Besar, Mengendalikan Risiko

Analisis risiko

  1. Seting parameter dasar yang tidak betul boleh menyebabkan terlalu konservatif atau radikal
  2. Indeks ini mempunyai fungsi yang terhad dan mungkin tidak berkesan dalam keadaan yang melampau.
  3. Pendapatan yang dikeluarkan oleh syarikat-syarikat ini adalah sebahagian daripada pendapatan yang dikeluarkan oleh syarikat-syarikat yang terlibat dalam perdagangan.
  4. Stop loss yang terlalu kecil mudah untuk ditembusi, terlalu besar tidak dapat mengawal risiko

Arah pengoptimuman

  1. Pengoptimuman parameter. Meningkatkan tetapan parameter, mencari kombinasi parameter yang optimum
  2. Tambah lebih banyak penunjuk trend penghakiman untuk meningkatkan keputusan
  3. Hentikan secara aktif. Tetapkan hentian pengesanan atau hentian langkah masa untuk mengurangkan kemungkinan hentian tersingkir
  4. Penilaian risiko. Menambah sekatan kepada indikator risiko seperti penarikan balik maksimum, mengawal sepenuhnya lubang risiko

ringkaskan

Strategi ini mengintegrasikan Stochastic, CCI dan Rate of Change, tiga petunjuk besar untuk menentukan arah trend, untuk menangkap peluang trend dengan cara menembusi pengesanan. Kelebihan strategi terletak pada penyesuaian penunjuk untuk menilai dengan tepat dan menyaring pergerakan yang berkesan, melalui risiko kawalan hentian yang ketat. Langkah seterusnya boleh diperbaiki dari segi pengoptimuman parameter, penyesuaian pelbagai indikator, dan strategi hentian, untuk menjadikan strategi lebih stabil dan fleksibel.

Kod 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")