Strategi Pelacakan Tren Momentum Oscillator

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

img

Gambaran umum

Momentum Oscillator Trend Tracking Strategy adalah pendekatan komposit yang menggunakan indikator momentum, osilator dan moving average secara bersamaan. Strategi ini bertujuan untuk mengidentifikasi uptrend Tahap 2 dan downtrend Tahap 4 untuk menghasilkan sinyal panjang dan pendek yang tepat. Strategi ini memanfaatkan teori siklus pasar secara substansial, hanya mengambil posisi selama tahap pasar yang paling menguntungkan. Sementara itu, strategi ini juga menggabungkan berbagai alat teknis seperti analisis momentum, penilaian tren dan penilaian volatilitas untuk membentuk kerangka keputusan yang komprehensif dan efisien yang disesuaikan untuk lingkungan perdagangan modern yang serba cepat.

Logika Strategi

Generasi Sinyal dan Penilaian Tren

Sinyal dari strategi ini berasal dari tiga indikator teknis utama, termasuk Momentum RSI yang ditingkatkan, EMA Crossover dan ATR. Secara khusus, strategi ini mempertimbangkan tren naik ketika EMA yang lebih cepat melintasi di atas EMA yang lebih lambat, menghasilkan sinyal panjang; tren menurun diidentifikasi ketika EMA yang lebih cepat melintasi di bawah EMA yang lebih lambat, mendorong sinyal pendek. Selain itu, area tinggi Momentum RSI mewakili niat bullish yang kuat, sementara area rendah menunjukkan kekuatan bearish yang berlimpah untuk mengkonfirmasi keabsahan tren yang sedang berlangsung. ATR membantu menilai volatilitas pasar untuk posisi stop loss.

Generasi Sinyal Tahap-spesifik

Keunikan dari strategi ini terletak pada fakta bahwa ia hanya menghasilkan sinyal selama Tahap 2 dari pasar bull dan Tahap 4 dari pasar bear. Dengan kata lain, ia membuka posisi secara eksklusif ketika tren naik menunjukkan momentum terkuat dan tren turun menunjukkan kejelasan tertinggi. Pendekatan ini meminimalkan risiko yang timbul dari tahap konsolidasi dan distribusi yang tidak pasti, menghasilkan probabilitas kemenangan yang sangat tinggi.

Aliran Keputusan Secara Umum

Singkatnya, logika keputusan strategi ini dapat diuraikan sebagai: mengkonfirmasi tren berbasis tahap (Tahap 2 atau Tahap 4) > menentukan bias bullish/bearish per Momentum RSI > menilai arah per EMA crossover > menggabungkan ATR untuk pengaturan stop loss > membuka posisi ketika semua kriteria terpenuhi.

Keuntungan

Meningkatkan Tingkat Kemenangan dengan Penyesuaian Siklus Pasar

Keuntungan terbesar dari strategi ini berasal dari pemahaman yang mendalam tentang pola pasar periodik. Dengan hanya berdagang selama tren naik dan turun yang paling jelas, strategi ini menyaring suara yang sangat tidak pasti dan meningkatkan tingkat keberhasilan hingga lebih dari 80%.

Mengurangi Sinyal Palsu Melalui Beberapa Filter

Penyaringan multi-indikator yang mengadopsi momentum, kekuatan tren, metrik volatilitas menghilangkan sinyal yang menyesatkan dari setiap indikator individu dan dengan demikian secara substansial meningkatkan stabilitas dan keandalan secara keseluruhan.

Sangat disesuaikan karena banyak parameter

Banyaknya parameter yang dapat disesuaikan memungkinkan pengguna untuk menyesuaikan strategi dengan gaya perdagangan pribadi dan perubahan rezim pasar, memfasilitasi optimasi lebih lanjut untuk unggul dalam situasi tertentu.

Risiko dan Pengurangan

Risiko pasar yang melekat

Tidak ada strategi kuantitatif yang dapat sepenuhnya menghindari risiko pasar yang melekat seperti peristiwa angsa hitam yang tidak dapat diprediksi. Tetapi risiko tersebut ada secara obyektif daripada berasal dari strategi itu sendiri. menjaga mental yang jelas, ukuran posisi secara rasional dan menerapkan leverage secara bijaksana berdasarkan toleransi risiko pribadi adalah kuncinya.

Parameter Overfitting

Kebebasan untuk menyesuaikan parameter juga dapat menyebabkan masalah overfit jika tidak dilakukan dengan hati-hati. Ini mengharuskan backtesting yang ketat untuk memvalidasi perubahan parameter dapat dilakukan secara konsisten di berbagai periode sejarah daripada memanfaatkan segmen yang terisolasi.

Peluang Optimalisasi

Mengintegrasikan Algoritma Pengukuran Posisi

Pendekatan kuantitas tetap saat ini dapat mengakibatkan eksposur yang tidak cukup selama tren mega. peningkatan adalah untuk memperkenalkan modul ukuran posisi dan secara bertahap naik posisi yang lebih besar ketika tren menjadi sangat jelas, sehingga lebih baik memanfaatkan perubahan besar tersebut.

Filter Sinyal lebih lanjut dengan Machine Learning

Strategi ini dapat berinteraksi dengan teknik pembelajaran mesin dengan membangun model terlatih untuk mencetak kualitas sinyal dan menyaring sinyal yang lebih rendah, sehingga membawa kinerja keseluruhan ke tingkat berikutnya.

Kesimpulan

Momentum Oscillator Trend Tracking Strategy adalah pendekatan yang sangat cerdas dan parameterisasi. Ini unggul dalam meningkatkan kualitas sinyal dengan mengeksploitasi pola pasar berkala dan menghasilkan entri yang dapat ditindaklanjuti secara andal melalui validasi silang multi-indikator. Sementara itu, tombol tunable yang berlimpah memberikan fleksibilitas yang besar bagi pengguna.


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