Selaraskan strategi henti rugi gelongsor


Tarikh penciptaan: 2023-11-02 16:28:55 Akhirnya diubah suai: 2023-11-02 16:28:55
Salin: 0 Bilangan klik: 562
1
fokus pada
1617
Pengikut

Selaraskan strategi henti rugi gelongsor

Gambaran keseluruhan

Strategi ini menggunakan Stochastic RSI dan indikator kadar perubahan harga untuk mengenal pasti arah trend ke dalam multi-blank dan menggunakan koordinat untuk menguruskan risiko dengan menggunakan kaedah stop loss.

Prinsip Strategi

Pertama, strategi menggunakan RSI panjang 5 dan Stochastic panjang 7 untuk mengira Stochastic RSI. Apabila nilai K Stochastic RSI lebih tinggi daripada nilai D, ia adalah isyarat bullish, dan apabila nilai K adalah lebih rendah daripada nilai D, ia adalah isyarat bearish.

Kedua, strategi mengira harga perubahan kadar indikator EMA ROC. Apabila EMA ROC adalah lebih tinggi daripada separuh daripada penurunan nilai atau lebih rendah daripada negatif separuh daripada penurunan nilai, harga dianggap bergerak secara aktif.

Kemudian, gabungan antara isyarat berpanjangan Stochastic RSI dan indikator kadar perubahan harga, boleh mengenal pasti arah trend. Apabila Stochastic RSI bullish dan harga bergerak aktif, buat lebih banyak; Apabila Stochastic RSI bearish dan harga bergerak aktif, buat lebih banyak.

Akhirnya, strategi ini menggunakan koordinat untuk menguruskan risiko. Selepas membuka kedudukan, terus mengemas kini harga tertinggi atau terendah, dan berhenti pada jarak tertentu dari harga tertinggi atau terendah.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Penggunaan Stochastic RSI dapat membantu untuk mengenal pasti trend dan overbought dan oversold.

  2. Indeks kadar pergerakan harga boleh menyaring pasaran yang bergolak dan mengelakkan isyarat palsu.

  3. Mod Stop Loss Coordinate Sliding boleh memaksimumkan keuntungan dan mengawal risiko.

  4. Terdapat ruang untuk mengoptimumkan parameter strategi yang boleh disesuaikan untuk pelbagai jenis.

  5. Strategi ini mudah difahami dan diimplementasikan.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Stochastic RSI mungkin menghasilkan isyarat palsu, yang perlu disahkan bersama faktor-faktor lain.

  2. Kerosakan penggeseran koordinat mungkin terlalu radikal dan dipukul oleh jurang malam.

  3. Pembalikan dalam jangka masa pendek boleh menyebabkan kemerosotan berlaku.

  4. Parameter strategi perlu dioptimumkan untuk pelbagai jenis, jika tidak, ia mungkin tidak berkesan.

  5. Kos urus niaga akan mempengaruhi keuntungan strategi dan perlu mempertimbangkan frekuensi urus niaga yang wajar.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa aspek:

  1. Optimumkan parameter Stochastic RSI, mengurangkan kadar isyarat palsu. Anda boleh menguji parameter nilai K dan nilai D yang berbeza.

  2. Mengoptimumkan parameter indikator kadar perubahan harga untuk meningkatkan kesan penapisan. Anda boleh menguji tempoh tingkap yang berbeza dan nilai ambang kadar perubahan.

  3. Menggabungkan indikator penghakiman trend untuk mengelakkan terbalik. Sebagai contoh, menambah indikator seperti purata bergerak.

  4. Mengoptimumkan nisbah hentian kerugian, mengurangkan risiko terikat. Anda boleh menguji pelbagai hentian kerugian.

  5. Menambah pengurusan nombor kedudukan untuk mengawal risiko tunggal. Contohnya, menetapkan jumlah stop loss, atau menyesuaikan kedudukan secara dinamik mengikut baki akaun.

  6. Uji parameter yang berbeza untuk meningkatkan adaptasi.

ringkaskan

Strategi ini secara keseluruhannya jelas dan mudah, menggunakan Stochastic RSI untuk mengenal pasti arah trend, dan bekerjasama dengan isyarat penapis indikator kadar perubahan harga, yang dapat menangkap peluang trend garis tengah dan panjang dengan berkesan. Kaedah berhenti kehilangan koordinat dapat mengunci keuntungan sambil mengawal risiko. Dengan pengoptimuman lebih lanjut, strategi ini dapat menjadi strategi pengesanan trend yang sangat praktikal.

Kod sumber strategi
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// 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
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, 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 = k > d and isMoving()
short = k < d and isMoving()

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(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

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

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)