Stratégie de négociation à court terme combinant deux moyennes mobiles et MACD

Auteur:ChaoZhang est là., Date: 2023-10-09 16:47:42 Je suis désolé
Les étiquettes:

Résumé

Cette stratégie combine deux moyennes mobiles, un indicateur stochastique et le MACD pour identifier les opportunités de trading à court terme, ce qui est une stratégie de trading à court terme relativement classique.

Principe

La stratégie repose principalement sur les principes suivants:

  1. Utilisez l'EMA à 50 périodes et à 100 périodes pour déterminer la direction de la tendance. L'EMA avec une période plus courte peut réagir rapidement aux changements de prix. Le franchissement de l'EMA à 50 périodes au-dessus de l'EMA à 100 périodes représente l'établissement d'une position longue; le franchissement vers le bas représente l'établissement d'une position courte.

  2. Utilisez la différence entre le MACD pour déterminer les points d'entrée et de sortie. Lorsque la différence dépasse 0, elle montre un renforcement de la puissance haussière et conduit à une entrée longue; lorsqu'elle dépasse 0, elle montre un renforcement de la puissance baissière et conduit à une entrée courte.

  3. Combinez l'indicateur RSI stochastique pour juger de la situation de surachat et de survente. Cet indicateur combine les avantages du KDJ et du RSI, et peut bien montrer les conditions de surachat et de survente. Lorsqu'il est inférieur à 20, le marché est survendu et une entrée longue peut être considérée comme combinant d'autres indicateurs; lorsqu'il est supérieur à 80, le marché est suracheté et une entrée courte peut être considérée.

  4. Après avoir déterminé la direction d'entrée, si 4 des 5 chandeliers les plus récents ont des prix de clôture touchant les moyennes mobiles, cela montre qu'il y a un support/résistance autour des moyennes mobiles et que les positions peuvent être ouvertes.

  5. Utilisez le stop loss et le profit pour gérer les risques.

Les avantages

Les avantages de cette stratégie sont les suivants:

  1. La combinaison de plusieurs indicateurs améliore le taux de réussite, en utilisant des moyennes mobiles, l'indicateur de surachat/survente et l'indicateur de dynamique ensemble.

  2. Les moyennes mobiles à courte période peuvent capturer rapidement les tendances et les renversements.

  3. Les paramètres stochastiques du RSI sont optimisés pour bien identifier les conditions de surachat/survente.

  4. L'utilisation de support/résistance autour des moyennes mobiles pour le contrôle du temps évite d'être pris au piège par de fausses ruptures.

  5. Un stop loss et un profit raisonnables contrôlent efficacement les risques pour chaque transaction.

Les risques

Cette stratégie comporte également certains risques:

  1. Ne pas éviter complètement les pertes causées par de fausses fuites.

  2. Des divergences peuvent se produire entre les indicateurs, provoquant des signaux de trading incohérents.

  3. Le stop loss et le take profit fixes peuvent ne pas s'adapter aux changements du marché.

  4. Le code complexe avec de nombreux paramètres est difficile à optimiser.

Les solutions sont les suivantes:

  1. Optimiser les paramètres pour améliorer la qualité du signal et réduire les probabilités de fausse fuite.

  2. Définir les priorités entre les indicateurs afin d'éviter les conflits.

  3. Adopter un stop loss dynamique et prendre des bénéfices basé sur les plages ATR.

  4. Simplifier la logique et extraire les paramètres de base pour les tests et l'optimisation.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Tester et trouver les combinaisons optimales de périodes moyennes mobiles et de paramètres MACD.

  2. Testez différents indicateurs de surachat/survente pour remplacer le RSI stochastique.

  3. Essayez le stop-loss dynamique et le profit, le stop de trailing pour rendre la gestion des risques plus intelligente.

  4. Ajouter des conditions de filtrage comme augmenter le volume pour améliorer la qualité du signal.

  5. Optimiser la logique d'entrée afin d'éviter des ruptures inefficaces, en utilisant davantage d'indicateurs pour déterminer la tendance.

  6. Définissez des limites de stop loss en fonction de la taille du compte, du nombre de transactions par jour pour contrôler les risques globaux.

Résumé

Cette stratégie intègre les avantages de multiples indicateurs et est très pratique pour le trading à court terme. En continuant l'optimisation des paramètres, une logique d'entrée stricte et une meilleure gestion des risques, la stabilité et la rentabilité peuvent être encore améliorées.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Plus de