Strategi Konsolidasi Rata-rata Pergerakan Momentum


Tanggal Pembuatan: 2024-01-25 11:39:00 Akhirnya memodifikasi: 2024-01-25 11:39:00
menyalin: 0 Jumlah klik: 682
1
fokus pada
1617
Pengikut

Strategi Konsolidasi Rata-rata Pergerakan Momentum

Ringkasan

Strategi ini terutama menggunakan pergerakan rata-rata HMA dan EMA yang terbentuk untuk menentukan kapan harus membeli. Ketika HMA memakai EMA dianggap sebagai akhir penyesuaian, membentuk tren naik baru, sehingga membeli pada saat bersamaan dengan EMA di HMA.

Strategi ini juga menggabungkan indikator RSI untuk mendeteksi overbought dan oversold. Ketika RSI di bawah 70 memungkinkan untuk membeli, dan ketika RSI di atas 80 mempertimbangkan untuk berhenti sebagian.

Prinsip Strategi

Strategi ini menggunakan 200 siklus EMA dan HMA untuk membangun sistem garis rata-rata. Di antaranya, indikator HMA adalah indikator rata-rata bergerak yang lebih sensitif berdasarkan desain perbaikan EMA.

Jika harga saham kembali ke posisi sebelumnya, HMA akan melakukan EMA lagi, yang menunjukkan bahwa perhitungan baru dimulai, dan semuanya akan dihapus. Sementara itu, jika RSI naik ke 80, sebagian akan berhenti 20% untuk mencegah kerugian.

Logika trading strategi ini relatif sederhana, terutama adalah HMA dan EMA multi-posisi silang, yang dikombinasikan dengan penilaian RSI yang tinggi dan rendah, membentuk strategi perdagangan yang lebih kuat.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah bahwa, dengan menggunakan EMA dan HMA dalam bentuk perdagangan yang terbalik, Anda dapat menyaring sebagian besar False Break, sehingga meningkatkan tingkat keuntungan. Selain itu, bantuan dari indikator RSI juga dapat secara efektif mengendalikan risiko, kombinasi keduanya membuat strategi ini sangat cocok untuk pasar yang bergolak pada posisi terbalik.

Selain itu, strategi ini hanya menggunakan 3 indikator dan logika yang sederhana, yang membuat parameternya lebih mudah dioptimalkan dan diukur kembali, yang bermanfaat untuk verifikasi dan perbaikan strategi.

Analisis risiko

Meskipun ada beberapa keuntungan dari strategi ini, masih ada beberapa risiko yang perlu diperhatikan. Misalnya, jangka waktu memegang posisi mungkin lebih lama dan memerlukan dukungan keuangan yang memadai. Jika mengalami periode penyusunan horizontal, tidak dapat dengan cepat menghentikan kerugian keluar, rentan terhadap ekspansi kerugian.

Selain itu, strategi ini terutama bergantung pada indikator rata-rata, dan jika harga mengalami terobosan yang tidak biasa, langkah-langkah stop loss mungkin tidak bekerja dengan baik, dan akan membawa risiko yang lebih besar. Selain itu, pengaturan parameter juga dapat mempengaruhi kinerja strategi, dan banyak pengujian diperlukan untuk menemukan parameter optimal.

Arah optimasi

Mengingat risiko yang disebutkan di atas, strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Menggabungkan indikator volatilitas, posisi disesuaikan secara dinamis sesuai dengan fluktuasi pasar.

  2. Meningkatkan penilaian indikator tren untuk menghindari perdagangan terbalik yang tidak perlu

  3. Optimalkan parameter moving average agar lebih dekat dengan karakteristik pasar saat ini.

  4. Menggunakan waktu yang terbuang sia-sia untuk menghindari kerugian yang terlalu besar.

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi yang lebih klasik dan sederhana. Strategi ini terutama digunakan untuk perdagangan jangka pendek dan menengah pada indeks saham dan saham populer, yang dapat memperoleh nilai Alpha yang relatif stabil. Dengan pengoptimalan parameter dan peningkatan langkah-langkah pengendalian risiko, kinerja strategi ini masih memiliki banyak ruang untuk peningkatan.

Kode Sumber Strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
strategy(title="EMA_HMA_RSI_Strategy", overlay=true, pyramiding=2,     default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 

//longCondition = crossover(sma(close, 14), sma(close, 28))
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = crossunder(sma(close, 14), sma(close, 28))
//if (shortCondition)
  //  strategy.entry("My Short Entry Id", strategy.short)

//HMA
HMA(src1, length1) =>  wma(2 * wma(src1, length1/2) - wma(src1, length1), round(sqrt(length1)))

var stopLossVal=0.00

//variables BEGIN
length=input(200,title="EMA and HMA Length")   //square root of 13

rsiLength=input(13, title="RSI Length")

takePartialProfits = input(true, title="Take Partial Profits (if this selected, RSI 13 higher reading over 80 is considered for partial closing ) ")

stopLoss = input(title="Stop Loss%", defval=8, minval=1)
//variables  END

//RSI 
rsi13=rsi(close,rsiLength)


ema200=ema(close,length)
hma200=HMA(close,length)

//exitOnAroonOscCrossingDown = input(true, title="Exit when Aroon Osc cross down zero ")


// Drawings

//Aroon oscillator

arronUpper = 100 * (highestbars(high, length+1) + length)/length
aroonLower = 100 * (lowestbars(low, length+1) + length)/length

aroonOsc  = arronUpper - aroonLower

aroonMidpoint = 0
//oscPlot = plot(aroonOsc, color=color.green)
//midLine= plot(aroonMidpoint, color=color.green)
//topLine = plot(90,style=plot.style_circles, color=color.green)
//bottomLine = plot(-90,style=plot.style_circles, color=color.red)

//fill(oscPlot, midLine, color=aroonOsc>0?color.green:color.red, transp=50)
//fill(topLine,bottomLine, color=color.blue)
//fill(topLine,oscPlot, color=aroonOsc>90?color.purple:na, transp=25)


// RSI 
//plot(rsi13, title="RSI", linewidth=2, color=color.purple)
//hline(50, title="Middle Line", linestyle=hline.style_dotted)
//obLevel = hline(80, title="Overbought", linestyle=hline.style_dotted)
//osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
//fill(obLevel, osLevel, title="Background", color=rsi13 >=30 ? color.green:color.purple, transp=65)  // longTermRSI >=50

hullColor = hma200 > hma200[2] ? #00ff00 : #ff0000

plot(hma200, title="HULL 200", color=hullColor,  transp=25)
plot(ema200, title="EMA 200", color=color.orange)

//Entry--
strategy.initial_capital = 50000
strategy.entry(id="Long Entry", comment="LE", qty=(strategy.initial_capital * 0.10)/close, long=true,  when=strategy.position_size<1 and hma200 < ema200   and  hma200 > hma200[2]  and rsi13<70 )     //  // aroonOsc<0

//Add
if(strategy.position_size>=1 and  close < strategy.position_avg_price and  ( crossover(rsi13,30) or  crossover(rsi13,40) ) )   // hma200 < ema200   and  hma200 > hma200[2]   and hma200[2] < hma200[3] )  //and crossover(rsi13,30)  aroonOsc<0    //and hma200 > hma200[2]  and hma200[2] <= hma200[3]  //crossover(rsi13,30)
    qty1=(strategy.initial_capital * 0.10)/close
    //stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
    strategy.entry(id="Long Entry", comment="Add", qty=qty1, long=true )     //crossover(close,ema34)  //and close>ema34  //crossover(rsi5Val,rsiBuyLine)  --   SL="+tostring(stopLossVal, "####.##")


//stopLossVal:= abs(strategy.position_size)>1 ? strategy.position_avg_price*(1-0.5) : 0.00 

stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
//stopLossVal:= abs(strategy.position_size)>1 ?  strategy.position_avg_price*(1-stopLoss*0.01) :  0.00

barcolor(color=strategy.position_size>=1? rsi13>80 ? color.purple: color.blue:na)

//close partial
if(takePartialProfits==true)
    strategy.close(id="Long Entry", comment="Partial X  points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=20 , when=abs(strategy.position_size)>=1 and crossunder(rsi13, 80)  and close > strategy.position_avg_price  )   //close<ema55 and rsi5Val<20 //ema34<ema55



//close All
//if(exitOnAroonOscCrossingDown)
  //  strategy.close(id="Long Entry", comment="Exit All points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and crossunder(aroonOsc, 0) )   //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

//close All on stop loss
strategy.close(id="Long Entry", comment="Stoploss X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

strategy.close(id="Long Entry", comment="hmaXema X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close > strategy.position_avg_price  and  crossunder(hma200,ema200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89