Trend Pengesahan Tiga Kali Bergerak Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-05 15:46:21
Tag:

img

Ringkasan

Strategi ini menghasilkan isyarat perdagangan menggunakan mekanisme pengesahan tiga, iaitu penunjuk momentum mengesahkan trend pasaran yang kuat, penunjuk Supertrend mengesahkan arah trend, dan penunjuk EMA menyediakan pengesahan tambahan arah trend. Hanya apabila ketiga-tiga penunjuk memenuhi kriteria, strategi akan menghasilkan isyarat perdagangan panjang atau pendek, dengan itu memastikan hanya peluang perdagangan kebarangkalian tinggi yang dipilih.

Prinsip Strategi

  1. Indikator Momentum (Momentum RSI)

    • Indikator Momentum RSI digunakan untuk menentukan kekuatan trend pasaran. bacaan di atas 60 menunjukkan trend pasaran yang kuat.

    • Isyarat perdagangan hanya dihasilkan semasa pasaran lembu atau lembu yang sengit.

  2. Analisis Supertrend

    • Garis Supertrend mewakili arah trend pasaran. Posisi hanya dipertimbangkan apabila harga memecahkan garis Supertrend.

    • Apabila harga menembusi garis Supertrend ke atas, ia ditukar kepada trend menaik; apabila ia menembusi ke bawah ia ditukar kepada trend menurun.

  3. Strategi EMA

    • EMA dan garis trend tambahannya digunakan untuk mengesahkan arah trend. Isyarat beli hanya muncul apabila EMA memecahkan ke atas melalui garis trend tambahan, dan isyarat pendek adalah sebaliknya.

Hanya apabila ketiga-tiga penunjuk pada masa yang sama memenuhi syarat pembukaan kedudukan, isyarat dagangan sebenar akan dikeluarkan.

Analisis Kelebihan

Strategi ini mempunyai kestabilan dan keuntungan yang sangat tinggi.

  1. Mekanisme pengesahan berbilang secara berkesan menapis bunyi bising dan hanya memilih perdagangan yang berkemungkinan tinggi.

  2. Garis Supertrend mempunyai stop loss yang dinamik untuk mengawal risiko dengan berkesan.

  3. Digabungkan dengan penilaian kekuatan trend, hanya perdagangan dalam trend yang kuat mengelakkan risiko tambahan.

  4. Penunjuk EMA menyediakan pengesahan tambahan untuk memastikan arah perdagangan adalah betul.

  5. Parameter sepenuhnya supaya peniaga boleh menyesuaikan seperti yang diperlukan.

Analisis Risiko

Risiko utama strategi ini berasal dari gangguan yang tidak normal yang menyebabkan isyarat perdagangan yang salah.

  1. Risiko pecah palsu: Tingkatkan mekanisme pengesahan pecah.

  2. Risiko julat goyangan yang lebih besar: Sesuai menyesuaikan julat stop loss.

  3. Risiko pembalikan trend: Memendekkan tempoh pegangan, menghentikan kerugian tepat pada masanya.

Arahan pengoptimuman

Arah utama untuk mengoptimumkan strategi ini termasuk:

  1. Pengoptimuman parameter: Sesuaikan parameter penunjuk agar sesuai dengan lebih banyak jenis.

  2. Meningkatkan penapisan: Gabungkan lebih banyak penunjuk untuk meningkatkan kualiti isyarat.

  3. Strategi komposit: Gabungkan dengan strategi lain untuk menggunakan kelebihan pelengkap.

  4. Penyesuaian parameter dinamik: Sesuaikan parameter secara automatik berdasarkan keadaan pasaran.

  5. Pembelajaran mesin: Gunakan algoritma untuk mencari parameter optimum secara automatik.

Ringkasan

Strategi ini mencapai strategi perdagangan kebarangkalian tinggi dengan pelbagai pengesahan dengan berkesan menggabungkan momentum, Supertrend dan penunjuk EMA. Mekanisme pengesahan pecah yang ketat juga memberikannya kestabilan yang sangat kuat. Pada masa yang sama, ia mempunyai potensi penyesuaian dan pengoptimuman yang sangat tinggi. Ringkasnya, strategi ini mengintegrasikan kelebihan mengikuti trend dan perdagangan pecah, menjadikannya strategi perdagangan algoritmik yang sangat menjanjikan.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000)
//// author -  Baby_whale_to_moon

// MOM Rsi indicator 
group_mom_rsi = "Rsi Of Momentum "
len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend')
src2 = close
mom = src2 - src2[len]
rsi_mom = ta.rsi(mom, len)
mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend")

// Super Trend Ind
group_supertrend = "SuperTrend indicator"
atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend)
factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

// Ema Indicator
group_most = "Ema indicator"
src = input(close, 'Source Ema Ind',group = group_most)
AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most)
Trail1 = ta.ema(src, AP2) //Ema func
AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100
SL2 = Trail1 * AF2  // Stoploss Ema
Trail2 = 0.0
iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2
iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1
Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2

//Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2)

//TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2)
//TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2)
//fill(TS1, TS2, Bull  ? color.green : color.red, transp=90)


// Strategy Sett
group_strategy = "Settings of Strategy"
Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy)
End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy)
dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy)
trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score')

v2 = input(false, title="Version 2 -  Uses SL/TP Statically", group =group_strategy)
v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100
v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100

v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input)
v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input)

v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input)
v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input)

group_line = "Line Settings"
show_sl_tp = input.bool(title='  Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line)
show_trend_line = input.bool(title='  Show Trend Line',inline = '3' ,defval=true, group =group_line)
stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line)
up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line)
down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line)

//plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2)
// plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)

// plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_long  ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)


TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour  : na, linewidth=2)

// bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na)
// bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na)

Time_interval = true
buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval
sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval


// Strategy entries 
if strategy.opentrades == 0 and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if strategy.opentrades == 0 and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_0', strategy.short, qty=dollar / close)


if close < supertrend and v1
    strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size > 0
    strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long  , qty_percent=100)
    
if close > supertrend and v1
    strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size < 0
    strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)
    

Lebih lanjut