Strategi Penggabungan Purata Pergerakan Momentum


Tarikh penciptaan: 2024-01-25 11:39:00 Akhirnya diubah suai: 2024-01-25 11:39:00
Salin: 0 Bilangan klik: 682
1
fokus pada
1617
Pengikut

Strategi Penggabungan Purata Pergerakan Momentum

Gambaran keseluruhan

Strategi ini terutamanya menggunakan HMA dan EMA yang terbentuk pada rata-rata bergerak untuk menentukan masa pembelian. Apabila HMA memakai EMA dianggap sebagai akhir penyesuaian, membentuk trend naik baru, oleh itu membeli pada masa yang sama dengan EMA di HMA.

Strategi ini digabungkan dengan indikator RSI untuk mengesan keadaan overbought dan oversold. Apabila RSI di bawah 70 dibenarkan untuk membeli, apabila RSI di atas 80 dipertimbangkan untuk berhenti.

Prinsip Strategi

Strategi ini menggunakan 200 kitaran EMA dan HMA untuk membina sistem garis rata. Di antaranya, HMA adalah penunjuk purata bergerak yang lebih sensitif berdasarkan reka bentuk EMA yang lebih baik. Apabila HMA memakai EMA, ia menandakan akhir tahap penyesuaian dan harga saham mula naik.

Dalam keadaan yang telah dibina, jika harga saham kembali turun, HMA sekali lagi turun melalui EMA, yang menunjukkan permulaan penyusunan baru, maka semuanya kosong. Pada masa yang sama, jika RSI naik 80, akan berhenti 20% untuk mengelakkan kerugian.

Logik perdagangan strategi ini agak mudah, terutamanya persilangan HMA dan EMA yang banyak, digabungkan dengan penilaian RSI yang tinggi dan rendah, membentuk strategi perdagangan yang lebih mantap.

Analisis kelebihan

Kelebihan utama strategi ini adalah bahawa ia menggunakan EMA dan HMA untuk membetulkan bentuk perdagangan, yang dapat menyaring sebahagian besar False Break, yang meningkatkan kadar keuntungan. Di samping itu, bantuan RSI juga dapat mengawal risiko dengan berkesan, kombinasi kedua-duanya menjadikan strategi ini sangat sesuai untuk pasaran yang bergolak.

Selain itu, strategi ini hanya menggunakan 3 indikator dan logikanya mudah, yang menjadikan parameternya lebih mudah untuk dioptimumkan dan diukur semula, yang membantu untuk mengesahkan dan memperbaiki strategi.

Analisis risiko

Walaupun strategi ini mempunyai kelebihan tertentu, masih terdapat beberapa risiko yang perlu diperhatikan. Sebagai contoh, jangka masa memegang kedudukan mungkin lebih lama dan memerlukan sokongan kewangan yang mencukupi. Jika menghadapi masa penyusunan menyeluruh, tidak dapat menghentikan kekalahan dengan cepat dan mudah mengalami peningkatan kerugian.

Di samping itu, strategi ini bergantung kepada indikator garis rata, dan jika harga mengalami penembusan yang luar biasa, langkah-langkah penangguhan mungkin tidak berfungsi dengan baik dan membawa risiko yang lebih besar. Selain itu, tetapan parameter juga mempengaruhi prestasi strategi, dan banyak ujian diperlukan untuk mencari parameter terbaik.

Arah pengoptimuman

Mengambil kira risiko yang disebutkan di atas, strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Menggabungkan indikator kadar turun naik, menyesuaikan kedudukan secara dinamik mengikut turun naik pasaran.

  2. Meningkatkan penilaian trend indicator dan mengelakkan perdagangan berbalik yang tidak perlu.

  3. Mengoptimumkan parameter purata bergerak agar lebih dekat dengan ciri pasaran semasa.

  4. Mengambil masa yang terhad untuk mengelakkan kerugian yang berlebihan.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi goyah yang lebih klasik dan sederhana. Ia digunakan terutamanya untuk perdagangan jangka pendek dan pertengahan indeks saham dan saham popular, yang dapat memperoleh nilai Alpha yang agak stabil. Dengan pengoptimuman parameter dan pengukuhan langkah-langkah kawalan risiko, prestasi strategi ini masih mempunyai ruang untuk peningkatan yang besar.

Kod 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