Stratégie de consolidation de la moyenne mobile Momentum


Date de création: 2024-01-25 11:39:00 Dernière modification: 2024-01-25 11:39:00
Copier: 0 Nombre de clics: 682
1
Suivre
1617
Abonnés

Stratégie de consolidation de la moyenne mobile Momentum

Aperçu

La stratégie utilise principalement la convergence des moyennes mobiles HMA et EMA pour déterminer le moment de l’achat. La convergence est considérée comme terminée lorsque l’HMA est passée sur l’EMA, formant une nouvelle tendance à la hausse, donc acheter en même temps que l’EMA est passée sur l’HMA.

Cette stratégie est combinée avec l’indicateur RSI pour détecter les cas de survente et de survente. Un achat est autorisé lorsque le RSI est inférieur à 70 et un arrêt partiel est considéré lorsque le RSI est supérieur à 80.

Principe de stratégie

La stratégie utilise une EMA et une HMA de 200 cycles pour construire un système de ligne moyenne. L’indicateur HMA est un indicateur de moyenne mobile plus sensible conçu pour améliorer l’EMA.

Dans le cas d’une position établie, si le cours revient, la HMA descend à nouveau l’EMA, indiquant le début d’un nouveau rassemblement, et est complètement à plat. En même temps, si le RSI atteint 80, il s’arrête partiellement de 20% pour éviter les pertes.

La logique de négociation de la stratégie est relativement simple, principalement un croisement polygonal entre HMA et EMA, combiné à un jugement de haute et basse valeur du RSI, pour former une stratégie de négociation plus robuste.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle utilise la forme de négociation de couverture des EMA et des HMA pour filtrer la plupart des faux-breaks, ce qui améliore la rentabilité. En outre, l’aide de l’indicateur RSI permet également de contrôler efficacement les risques, ce qui en fait une stratégie idéale pour les marchés en couverture.

En outre, la stratégie utilise seulement 3 indicateurs et sa logique est simple, ce qui rend l’optimisation et la rétroévaluation de ses paramètres plus pratiques, ce qui favorise la vérification et l’amélioration de la stratégie.

Analyse des risques

Bien que cette stratégie présente certains avantages, il y a des risques à prendre en compte. Par exemple, le temps de détention peut être relativement long et nécessite un soutien financier suffisant. Si vous rencontrez une période de liquidation horizontale, vous ne pouvez pas vous retirer rapidement et vous risquez d’augmenter vos pertes.

En outre, la stratégie repose principalement sur des indicateurs de la ligne de parité, et le risque est plus grand que les mesures de freinage ne fonctionnent pas si le prix est inhabituellement brisé. De plus, les paramètres peuvent également affecter la performance de la stratégie et nécessitent de nombreux tests pour trouver les paramètres optimaux.

Direction d’optimisation

Compte tenu des risques mentionnés ci-dessus, la stratégie peut être optimisée dans les domaines suivants:

  1. Il est possible d’ajuster dynamiquement les positions en fonction des fluctuations du marché, en combinant les indicateurs de volatilité.

  2. Il est important d’augmenter le jugement sur les indicateurs de tendance et d’éviter les inversions inutiles.

  3. Optimiser les paramètres des moyennes mobiles pour les rendre plus proches des caractéristiques du marché actuel.

  4. Le problème des pertes individuelles est évité dans la mesure du possible.

Résumer

Cette stratégie est généralement une stratégie de choc de consolidation simple et classique. Elle est principalement utilisée pour les transactions à court et moyen terme sur les indices boursiers et les actions populaires. Elle permet d’obtenir une valeur alpha relativement stable.

Code source de la stratégie
/*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