Stratégie du système des moyennes mobiles solides

Auteur:ChaoZhang est là., Date: 2023-11-24 15:11:18
Les étiquettes:

img

Résumé

Cette stratégie est un système de moyenne mobile basé sur 4 SMMA (Smoothed Moving Average) avec des périodes différentes et 1 indicateur EMA. Elle combine plusieurs outils d'analyse technique pour former une stratégie de trading par jugement de tendance. Cette stratégie est principalement adaptée pour les transactions intraday des obligations à 15 minutes EURUSD à fort effet de levier.

Principe de stratégie

L'indicateur EMA détecte les tendances à long terme. La logique de négociation spécifique est la suivante:

Lorsque la moyenne mobile à court terme (comme SMMA à 3 périodes) dépasse la moyenne mobile à plus longue période (comme EMA à 200 périodes), un signal d'achat est généré. Lorsque la moyenne mobile à court terme dépasse la moyenne mobile à plus longue période, un signal de vente est généré. En jugeant l'agencement de plusieurs moyennes mobiles, la direction de la tendance est déterminée.

En outre, la stratégie fixe également des points d'arrêt des bénéfices et des points d'arrêt des pertes pour contrôler les risques.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. La structure de moyenne mobile à plusieurs niveaux peut déterminer efficacement la direction de la tendance et réduire les faux signaux.

  2. L'indicateur SMMA filtre efficacement le bruit du marché et l'indicateur EMA détecte les tendances à long terme.

  3. Il convient aux comptes à effet de levier élevé pour amplifier les bénéfices commerciaux.

  4. Les points d'arrêt des bénéfices et de cessation des pertes sont définis pour contrôler efficacement les risques.

  5. Optimise les variétés de négociation (EURUSD) et les cycles (15 minutes) pour le rendre plus avantageux.

Analyse des risques

La stratégie comporte également les risques suivants:

  1. Le grand nombre de moyennes mobiles peut manquer des opportunités d'inversion à court terme.

  2. Un effet de levier élevé amplifie les pertes tout en amplifiant les profits.

  3. Lorsque la moyenne mobile génère un signal, la tendance à court terme peut déjà s'être inversée.

  4. Le taux de change EURUSD peut connaître de violentes fluctuations, ce qui entraîne des risques plus importants.

En réponse à ces risques, nous pouvons ajuster de manière appropriée le ratio de levier, optimiser les paramètres de la moyenne mobile, introduire d'autres indicateurs pour juger de l'inversion de tendance, etc. pour optimisation.

Directions d'optimisation

Les principales orientations d'optimisation de cette stratégie sont les suivantes:

  1. Évaluer les performances des différentes variétés et cycles et choisir les paramètres optimaux.

  2. Testez différentes combinaisons et quantités de moyennes mobiles.

  3. Augmenter les indicateurs de volume ou de volatilité pour déterminer les points d'inversion à court terme.

  4. Augmenter l'ajustement dynamique de la fourchette de stop profit et de stop loss.

  5. Ajouter l'indicateur ENU pour déterminer le point de retour.

Grâce à des essais et une optimisation à multiples facettes, la stabilité et la rentabilité de la stratégie peuvent être grandement améliorées.

Résumé

Cette stratégie de moyenne mobile intègre les avantages des indicateurs de moyenne mobile pour former un système de jugement de tendance robuste. Elle optimise les variétés et les cycles de trading et est très adaptée au trading intraday à fort effet de levier.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
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/
// © SoftKill21

//@version=4
strategy("Money maker EURUSD 15min" )
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 


startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)




len = input(3, minval=1, title="Length")
src = input(hl2, title="Source")
smma = 0.0
sma1 = sma(src, len)
smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len

len2 = input(6, minval=1, title="Length")
src2 = input(hl2, title="Source")
smma2 = 0.0
sma2 = sma(src2, len2)
smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2

len3 = input(9, minval=1, title="Length")
src3 = input(hl2, title="Source")
smma3 = 0.0
sma3 = sma(src3, len3)
smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3

len4 = input(50, minval=1, title="Length")
src4 = input(close, title="Source")
smma4 = 0.0
sma4 = sma(src4, len4)
smma4 := na(smma4[1]) ? sma4  : (smma4[1] * (len4 - 1) + src4) / len4

len5 = input(200, minval=1, title="Length")
src5 = input(close, title="Source")
out5 = ema(src5, len5)

timeinrange(res, sess) => time(res, sess) != 0
london=timeinrange(timeframe.period, "0300-1045")
londonEntry=timeinrange(timeframe.period, "0300-0845")

extraEntry =timeinrange(timeframe.period, "0745-1030")

time_cond = true
//time_cond2 = time >= startDate and time <= finishDate and extraEntry

//

longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond
shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond


//longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2
//shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2

//longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond
//shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond



tp=input(300,title="tp")
sl=input(300,title="sl")

strategy.initial_capital  = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk %")/100           //risk % per trade


    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000           //Set min. lot size

dataL = (close-out5)*100000
dataS = (out5-close)*100000

minDistanceL = (smma4 - out5)*100000
minDistanceS= (out5 - smma4)*100000


strategy.entry("long",1,1,when=longCond )
strategy.exit("closelong","long", profit=tp,loss=sl)
    
strategy.entry("short",0,1,when=shortCond )
strategy.exit("closeshort","short", profit=tp,loss=sl)



strategy.close_all(when = not london, comment="london finish")
//strategy.close_all(when = not extraEntry, comment="london finish")



// maxEntry=input(2,title="max entries")
// strategy.risk.max_intraday_filled_orders(maxEntry)



Plus de