Artikel ini menjelaskan secara rinci strategi perdagangan kuantitatif berdasarkan analisis tren momentum. Ini mensintesis indikator seperti moving average, MACD, dan RSI untuk mengidentifikasi momentum harga dan menangkap peluang tren jangka menengah dan panjang.
I. Logika Strategi
Indikator penilaian utama meliputi:
EMA untuk mengukur tren di periode yang berbeda.
MACD untuk mendeteksi perubahan momentum jangka pendek.
RSI untuk memeriksa tingkat overbought / oversold.
ATR untuk perhitungan stop loss dan take profit.
Ini menggabungkan indikator-indikator ini untuk mengidentifikasi gangguan yang terus-menerus dan kuat yang menandakan dimulainya tren masuk perdagangan.
Ketika EMA jangka pendek berfluktuasi sering, ia menilai pasar sebagai rentang.
MACD menilai kekuatan momentum, RSI menghindari mengejar atas dan bawah. ATR menetapkan stop loss dan mengambil keuntungan mengendalikan risiko per perdagangan.
II. Keuntungan dari Strategi
Keuntungan terbesarnya adalah komplementaritas indikator, yang dapat secara efektif mengidentifikasi awal tren jangka menengah dan panjang.
Keuntungan lain adalah stop loss dan take profit, yang mengunci keuntungan tren dan mengelola risiko.
Akhirnya, periode EMA bertahap memungkinkan masuknya tren yang lancar pada tingkat momentum yang berbeda.
III. Potensi Risiko
Namun, strategi ini juga memiliki risiko berikut:
Pertama, deteksi tren mungkin terlambat, menyebabkan peluang yang hilang.
Kedua, berhenti yang terlalu ketat berisiko dihentikan lebih awal.
Akhirnya, tekanan penarikan membutuhkan persiapan psikologis.
IV. Ringkasan
Secara singkat, artikel ini telah menjelaskan strategi kuantitatif berdasarkan analisis tren momentum. Ini mensintesis indikator seperti moving average, MACD dan RSI untuk menentukan arah tren. Dengan penyesuaian parameter yang tepat, dapat mengendalikan risiko dan mencapai keuntungan yang stabil.
/*backtest start: 2023-08-14 00:00:00 end: 2023-08-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Mom Finder Strateg (1H)", overlay=true) //Series to sum the amount of crosses in EMA for sideways trend/noise filtering //can change EMA lengths, can change to SMA's/WMA's e.t.c lookback_value = 60 minMA = 20 midMA = 40 maxMA = 60 ema25_crossover = (crossover(close, ema(close, minMA))) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results ema50_crossover = (crossover(close, ema(close, midMA))) == true ? 1 : 0 ema50_crossover_sum = sum(ema50_crossover, lookback_value) ///potentially change lookback value to alter results ema75_crossover = (crossover(close, ema(close, maxMA))) == true ? 1 : 0 ema75_crossover_sum = sum(ema75_crossover, lookback_value) ///potentially change lookback value to alter results ema25_crossunder = (crossunder(close, ema(close, minMA))) == true ? 1 : 0 ema25_crossunder_sum = sum(ema25_crossunder, lookback_value) ///potentially change lookback value to alter results ema50_crossunder = (crossunder(close, ema(close, midMA))) == true ? 1 : 0 ema50_crossunder_sum = sum(ema50_crossunder, lookback_value) ///potentially change lookback value to alter results ema75_crossunder = (crossunder(close, ema(close, maxMA))) == true ? 1 : 0 ema75_crossunder_sum = sum(ema75_crossunder, lookback_value) ///potentially change lookback value to alter results4 //Boolean series declaration //can change amount of times crossed over the EMA verification to stop sideways trend filtering (3) maxNoCross=2 macdmidlinebull=-0.5 macdmidlinebear=0.5 [macdLine, signalLine, histLine] = macd(close, 12, 26, 9) //--------------- //Series Creation bullishMacd = (macdLine > signalLine) and (macdLine > macdmidlinebull) ? true : false bearishMacd = (macdLine < signalLine) and (macdLine < macdmidlinebear) ? true : false bullRsiMin = 50 //53 initial values bullRsiMax = 60 //61 bearRsiMin = 40 //39 bearRsiMax = 50 //47 basicBullCross25bool = ((ema25_crossover_sum < ema50_crossover_sum) and (ema25_crossover_sum < ema75_crossover_sum) and (ema25_crossover_sum < maxNoCross) and crossover(close, ema(close, minMA)) and (rsi(close, 14) > bullRsiMin) and (rsi(close, 14) < bullRsiMax) and (bullishMacd == true)) ? true : false basicBullCross50bool = ((ema50_crossover_sum < ema25_crossover_sum) and (ema50_crossover_sum < ema75_crossover_sum) and (ema50_crossover_sum < maxNoCross) and crossover(close, ema(close, midMA)) and (rsi(close, 14) > bullRsiMin) and (basicBullCross25bool == false) and (rsi(close, 14) < bullRsiMax) and (bullishMacd == true)) ? true : false basicBullCross75bool = ((ema75_crossover_sum < ema25_crossover_sum) and (ema75_crossover_sum < ema50_crossover_sum) and (ema75_crossover_sum < maxNoCross) and crossover(close, ema(close, maxMA)) and (rsi(close, 14) > bullRsiMin) and (basicBullCross25bool == false) and (basicBullCross50bool == false) and (rsi(close, 14) < bullRsiMax) and (bullishMacd == true)) ? true : false basicBearCross25bool = ((ema25_crossunder_sum < ema50_crossunder_sum) and (ema25_crossunder_sum < ema75_crossunder_sum) and (ema25_crossunder_sum < maxNoCross) and crossunder(close, ema(close, minMA)) and (rsi(close, 14) <bearRsiMax) and (rsi(close, 14) > bearRsiMin) and (bearishMacd == true)) ? true : false basicBearCross50bool = ((ema50_crossunder_sum < ema25_crossunder_sum) and (ema50_crossunder_sum < ema75_crossover_sum) and (ema50_crossunder_sum < maxNoCross) and crossunder(close, ema(close, midMA)) and (rsi(close, 14) < bearRsiMax) and (basicBearCross25bool == false) and (rsi(close, 14) > bearRsiMin) and (bearishMacd == true)) ? true : false basicBearCross75bool = ((ema75_crossunder_sum < ema25_crossunder_sum) and (ema75_crossunder_sum < ema50_crossunder_sum) and (ema75_crossunder_sum < maxNoCross) and crossunder(close, ema(close, maxMA)) and (rsi(close, 14) < bearRsiMax) and (basicBearCross25bool == false) and (basicBearCross50bool == false) and (rsi(close, 14) > bearRsiMin) and (bearishMacd == true)) ? true : false //STRATEGY //can change lookback input on ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("D", title='ATR Resolution') atr = security(syminfo.tickerid, atrRes, atr(atrLkb)) longCondition = (basicBullCross25bool or basicBullCross50bool or basicBullCross75bool) == true if (longCondition) strategy.entry("Long", strategy.long) shortCondition = (basicBearCross25bool or basicBearCross50bool or basicBearCross75bool) == true if (shortCondition) strategy.entry("Short", strategy.short) // Calc ATR Stops // can change atr multiplier to affect stop distance/tp distance, and change "close" to ema values- could try ema 50 stopMult = 0.6 //0.6 is optimal longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Calc ATR Target targetMult = 2.2 //2.2 is optimal for crypto x/btc pairs longTarget = na longTarget := shortCondition ? na : longCondition and strategy.position_size <=0 ? close + (atr*targetMult) : longTarget[1] shortTarget = na shortTarget := longCondition ? na : shortCondition and strategy.position_size >=0 ? close - (atr*targetMult) : shortTarget[1] // Place the exits strategy.exit("Long ATR Stop", "Long", stop=longStop, limit=longTarget) strategy.exit("Short ATR Stop", "Short", stop=shortStop, limit=shortTarget) //Bar color series longColour = longCondition ? lime : na shortColour = shortCondition ? red : na // Plot the stoplosses and targets plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') plot(longTarget, style=linebr, linewidth=2, color=lime, title='Long ATR Target') plot(shortTarget, linewidth=2, style=linebr, color=lime, title='Long ATR Target') barcolor(color=longColour) barcolor(color=shortColour) alertcondition(((basicBullCross25bool or basicBullCross50bool or basicBullCross75bool)==true), title='Long Entry', message='Bullish Momentum Change!') alertcondition(((basicBearCross25bool or basicBearCross50bool or basicBearCross75bool)==true), title='Short Entry', message='Bearish Momentum Change!')