Strategi Pengesanan Trend Momentum Oscillator

Penulis:ChaoZhang, Tarikh: 2024-01-22 10:08:55
Tag:

img

Ringkasan

Strategi Pengesanan Trend Osilator Momentum adalah pendekatan komposit yang menggunakan penunjuk momentum, osilator dan purata bergerak secara serentak. Ia bertujuan untuk mengenal pasti trend menaik Tahap 2 dan trend menurun Tahap 4 untuk menghasilkan isyarat panjang dan pendek yang tepat. Strategi ini memanfaatkan teori kitaran pasaran secara besar-besaran, mengambil kedudukan hanya semasa peringkat pasaran yang paling menguntungkan. Sementara itu, ia juga menggabungkan pelbagai alat teknikal seperti analisis momentum, penilaian trend dan penilaian turun naik untuk membentuk kerangka keputusan yang komprehensif dan cekap yang disesuaikan untuk persekitaran perdagangan moden yang pantas.

Logika Strategi

Generasi Isyarat dan Penghakiman Trend

Sinyal strategi ini berasal dari gabungan tiga penunjuk teknikal utama, termasuk peningkatan Momentum RSI, EMA Crossover dan ATR. Khususnya, strategi ini mempertimbangkan trend menaik apabila EMA yang lebih cepat melintasi di atas EMA yang lebih perlahan, menghasilkan isyarat panjang; trend menurun dikenal pasti apabila EMA yang lebih cepat melintasi di bawah EMA yang lebih perlahan, mendorong isyarat pendek. Di samping itu, kawasan yang tinggi Momentum RSI mewakili niat bullish yang kuat, sementara kawasan yang rendah menunjukkan kekuatan penurunan yang banyak untuk mengesahkan kesahihan trend yang sedang berlangsung. ATR membantu menilai turun naik pasaran untuk kedudukan stop loss.

Penjanaan Isyarat Khusus Tahap

Keunikan strategi ini terletak pada hakikat bahawa ia hanya menghasilkan isyarat semasa Tahap 2 pasaran lembu dan Tahap 4 pasaran beruang. Dengan kata lain, ia membuka kedudukan secara eksklusif apabila trend menaik menunjukkan momentum yang paling kuat dan trend menurun menunjukkan kejelasan tertinggi. Pendekatan ini meminimumkan risiko yang timbul daripada tahap penyatuan dan pengedaran yang tidak pasti, mengakibatkan kebarangkalian kemenangan yang sangat tinggi.

Aliran Keputusan Secara Umum

Ringkasnya, logik keputusan strategi ini dapat digariskan sebagai: mengesahkan trend berasaskan peringkat (Langkah 2 atau Tahap 4) > menentukan bias bullish / bearish mengikut Momentum RSI > menilai arah per persimpangan EMA > menggabungkan ATR untuk menetapkan stop loss > membuka kedudukan apabila semua kriteria dipenuhi. Proses yang disederhanakan ini membolehkan strategi untuk menangkap dengan tepat titik perubahan penting di pasaran dan mengambil bahagian dalam perubahan yang paling menguntungkan.

Kelebihan

Peningkatan kadar kemenangan dengan penyelarasan kitaran pasaran

Kelebihan terbesar datang dari strategi ini pemahaman yang mendalam tentang corak pasaran berkala. Dengan berdagang hanya semasa aliran uptrends dan downtrends yang paling jelas, ia menyaring bunyi-bunyi yang sangat tidak pasti dan meningkatkan kadar kejayaan kepada lebih daripada 80%.

Mengurangkan isyarat palsu melalui pelbagai penapis

Penapisan pelbagai penunjuk yang menggunakan metrik momentum, kekuatan trend, volatiliti menghapuskan isyarat yang mengelirukan dari mana-mana penunjuk individu dan dengan itu meningkatkan kestabilan dan kebolehpercayaan secara keseluruhan.

Sangat disesuaikan kerana banyak parameter

Banyak parameter yang boleh disesuaikan yang terdedah membolehkan pengguna menyesuaikan strategi dengan gaya perdagangan peribadi dan perubahan rejim pasaran, memudahkan pengoptimuman lanjut untuk cemerlang dalam situasi tertentu.

Risiko dan Pengurangan

Risiko pasaran yang melekat

Tidak ada strategi kuantitatif yang dapat sepenuhnya mengelakkan risiko pasaran yang melekat seperti peristiwa angsa hitam yang tidak dapat diramalkan. Tetapi risiko tersebut wujud secara objektif dan bukan berasal dari strategi itu sendiri.

Parameter Overfitting

Kebebasan untuk menyesuaikan parameter juga boleh membawa kepada isu-isu terlalu sesuai jika tidak dilakukan dengan berhati-hati. Ini memerlukan ujian belakang yang ketat untuk mengesahkan sebarang perubahan parameter dapat dilakukan secara konsisten merentasi pelbagai tempoh sejarah dan bukannya memanfaatkan segmen yang terpencil.

Peluang Pengoptimuman

Menggabungkan Algoritma Ukuran Kedudukan

Pendekatan kuantiti tetap semasa mungkin mengakibatkan pendedahan yang tidak mencukupi semasa trend mega. peningkatan adalah untuk memperkenalkan modul ukuran kedudukan dan secara beransur-ansur naik kedudukan yang lebih besar apabila trend menjadi jelas, dengan itu lebih baik memanfaatkan perubahan besar itu.

Menyaring Isyarat lebih lanjut dengan Pembelajaran Mesin

Strategi ini boleh berhubung dengan teknik pembelajaran mesin dengan membina model terlatih untuk menjaringkan kualiti isyarat dan menapis isyarat yang lebih rendah, dengan itu membawa prestasi keseluruhan ke tahap seterusnya. Integrasi ini adalah arah pengoptimuman penting yang patut diterokai.

Kesimpulan

Strategi Pengesanan Trend Momentum Oscillator adalah pendekatan yang sangat pintar dan parameter. Ia cemerlang dalam meningkatkan kualiti isyarat dengan mengeksploitasi corak pasaran berkala dan menghasilkan entri yang boleh ditindaklanjuti dengan boleh dipercayai melalui pengesahan silang pelbagai penunjuk. Sementara itu, tombol yang boleh disesuaikan yang banyak memberikan fleksibiliti yang besar kepada pengguna. Kesimpulannya, ini adalah strategi komposit maju yang boleh dipercayai dan disyorkan yang menunjukkan kelebihan praktikal untuk berkembang maju di pasaran moden yang sangat cekap dan memberikan alfa yang konsisten.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JS_TechTrading

//@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 -  JS-TechTrading

// 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

//EMA50/150/200
group_50_150_200="EMA50/150/200"
show_emas=input.bool(defval = true, title = "SHOW EMAS", group = group_50_150_200)
ema50= ta.ema(src, 50)
ema150 = ta.ema(src, 150)
ema200 = ta.ema(src, 200)
ema50_color=input.color(defval = color.purple, title = "EMA50 COLOR",group = group_50_150_200)
ema50_linewidth=input.int(defval = 2, title = "EMA50 LINEWIDTH", group = group_50_150_200)
ema150_color=input.color(defval = color.blue, title = "EMA150 COLOR", group = group_50_150_200)
ema150_linewidth=input.int(defval = 2, title = "EMA150 LINEWIDTH", group = group_50_150_200)
ema200_color=input.color(defval = color.black, title = "EMA200 COLOR", group = group_50_150_200)
ema200_linewidth=input.int(defval = 2, title = "EMA200 LINEWIDTH", group = group_50_150_200)
plot(show_emas ? ema50 : na, color = ema50_color, linewidth = ema50_linewidth)
plot(show_emas ? ema150 : na, color=ema150_color, linewidth = ema150_linewidth)
plot(show_emas ? ema200 : na, color = ema200_color, linewidth = ema200_linewidth)

//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 
stop_long = (close < supertrend and v1) or (v2 and strategy.position_size > 0)
stop_short = (close > supertrend and v1) or (v2 and strategy.position_size < 0)
long_cond = ((close > ema150 ) and (ema50 > ema150) and (ema150 > ema200))
short_cond = ((close < ema150) and (ema50 < ema150) and (ema150 < ema200))
if (not stop_long) and (not short_cond) and long_cond and strategy.opentrades == 0 and (trade_direction == 'LONG' or trade_direction == 'BOTH') and buy_signal
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if (not stop_short) and (not long_cond) and short_cond and strategy.opentrades == 0 and (trade_direction == 'SHORT' or trade_direction == 'BOTH') and sell_signal
    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