
Die Strategie nutzt vor allem die Gleichgewichtsausgleichsbeziehung zwischen den beweglichen Durchschnitten HMA und EMA, um zu entscheiden, wann man kauft. Wenn die EMA auf der HMA als Ende der Ausgleichsbeziehung betrachtet wird, wird ein neuer Aufwärtstrend gebildet, so dass gleichzeitig mit der EMA auf der HMA gekauft wird.
Die Strategie erlaubt den Kauf, wenn der RSI unter 70 liegt, und berücksichtigt einen Teilstop, wenn der RSI über 80 liegt.
Die Strategie verwendet 200-Zyklen-EMA und HMA, um eine mittlere Linie zu erstellen. Der HMA-Indikator ist ein empfindlicherer Moving-Average-Indikator, der auf EMA-Verbesserungen basiert. Wenn der HMA eine EMA trägt, bedeutet dies, dass die Bereinigungsphase beendet ist und die Aktienpreise steigen.
Wenn die Aktienpreise nach unten fallen und die HMA wieder die EMA abschlägt, um zu zeigen, dass eine neue Berechnung beginnt, ist die HMA vollständig ausgeglichen. Wenn der RSI 80 erreicht, wird der RSI um 20% unterbrochen, um Verluste zu verhindern.
Die Handelslogik dieser Strategie ist relativ einfach, hauptsächlich durch eine Multi-Floor-Kreuzung von HMA und EMA, kombiniert mit dem hohen und niedrigen Urteil des RSI, um eine eher robuste Handelsstrategie zu bilden.
Der größte Vorteil dieser Strategie besteht darin, dass der Umrechnungsmodus der EMA und der HMA genutzt wird, um den Großteil der False Break zu filtern und so die Gewinnquote zu erhöhen. Die Unterstützung des RSI-Indikators hilft auch, das Risiko effektiv zu kontrollieren. Die Kombination der beiden macht die Strategie sehr geeignet für die Umrechnungs-Schwankungen.
Darüber hinaus verwendet die Strategie nur drei Indikatoren und ist logisch einfach, was die Optimierung und Rückmessung der Parameter erleichtert und zur Verifizierung und Verbesserung der Strategie beiträgt.
Obwohl diese Strategie einige Vorteile hat, gibt es einige Risiken, die beachtet werden müssen. Zum Beispiel kann die Haltedauer relativ lang sein und eine ausreichende finanzielle Unterstützung benötigt werden.
Außerdem ist die Strategie hauptsächlich auf die Gleichgewichtsindikatoren angewiesen, und wenn ein außergewöhnlicher Preisbruch eintritt, können die Stop-Loss-Maßnahmen nicht wirken und ein größeres Risiko mit sich bringen. Darüber hinaus beeinflussen die Parameter-Einstellungen die Strategie-Performance und es ist erforderlich, eine Menge Tests durchzuführen, um die optimale Parameter zu finden.
Angesichts der oben genannten Risiken kann die Strategie in folgenden Bereichen optimiert werden:
In Kombination mit Volatilitätsindikatoren wird die Position dynamisch an Marktschwankungen angepasst.
Es ist wichtig, die Trendindikatoren zu analysieren und unnötige Umkehrungen zu vermeiden.
Optimierung der Moving Average-Parameter, um sie näher an die Merkmale des aktuellen Marktes anzupassen.
Es ist wichtig, dass die Anwendungsdauer auf Zeit eingehalten wird, um ein Problem zu vermeiden, bei dem der einzelne Verlust zu groß ist.
Diese Strategie ist insgesamt eine eher klassische, einfache, konsolidierte Schwingungsstrategie. Sie wird hauptsächlich für Short- und Mid-Term-Handel mit Aktienindizes und beliebten Aktien angewendet, um einen relativ stabilen Alpha-Wert zu erhalten. Mit der Optimierung der Parameter und der Stärkung der Risikokontrollmaßnahmen hat die Strategie viel Platz für eine Verbesserung der Leistung.
/*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