
La stratégie est un système de moyennes mobiles basé sur 4 cycles différents de SMMA (moyennes mobiles lisses) et un indicateur EMA. Elle combine plusieurs outils d’analyse technique des titres pour former une stratégie de négociation par le biais de la détection des tendances. La stratégie s’applique principalement aux titres à 15 minutes EURUSD de comptes à fort effet de levier pour la négociation intraday.
La stratégie utilise 4 paramètres différents SMMA ((3, 6, 9, 50) et une EMA ((200) pour construire un système de moyennes mobiles à plusieurs niveaux. L’indicateur SMMA peut filtrer efficacement le bruit du marché et déterminer la direction de la tendance. L’indicateur EMA détecte les tendances à long terme.
Un signal d’achat est généré lorsque la moyenne mobile à courte période (par exemple, la moyenne mobile à 3 périodes SMMA) est traversée par une moyenne mobile à plus longue période (par exemple, l’EMA à 200 périodes). Un signal de vente est généré lorsque la moyenne mobile à courte période est traversée par une moyenne mobile à plus longue période.
En outre, la stratégie définit des points de stop-loss pour contrôler les risques.
Cette stratégie présente les avantages suivants:
Les structures de moyennes mobiles à plusieurs niveaux permettent de déterminer efficacement la direction de la tendance et de réduire les faux signaux.
L’indicateur SMMA filtre efficacement le bruit du marché et l’indicateur EMA détecte les tendances à long terme.
Les comptes à fort effet de levier permettent d’augmenter les bénéfices des transactions.
Les points de rupture sont définis pour contrôler efficacement les risques.
Optimisation de la variété de transaction (EURUSD) et de la période (en 15 minutes) pour une plus grande efficacité.
La stratégie présente également les risques suivants:
L’utilisation massive des moyennes mobiles peut vous faire rater des occasions de revirement à court terme.
Le levier élevé augmente les pertes et augmente les bénéfices.
La courte durée de l’évolution pourrait avoir été inversée lorsque la moyenne mobile a donné son signal.
Les taux de change de l’EUR/USD peuvent fluctuer fortement, ce qui entraîne un risque accru.
Pour répondre à ces risques, il est possible d’ajuster le multiplicateur de levier, d’optimiser les paramètres des moyennes mobiles, d’introduire d’autres indicateurs permettant de juger de l’inversion de la tendance, etc.
Les principaux axes d’optimisation de la stratégie sont:
Évaluer les performances de différentes variétés et cycles, en choisissant les paramètres optimaux.
Les moyennes mobiles sont testées sur différentes combinaisons de paramètres et quantités.
L’augmentation du volume de transactions ou de la volatilité des indicateurs de jugement est un point de bascule à court terme.
Modification dynamique pour augmenter l’amplitude de stop-loss.
L’indicateur de l’ENU est un point tournant.
La stabilité et la rentabilité des stratégies peuvent être considérablement améliorées par des tests et des optimisations multiples.
Cette stratégie de moyenne mobile intègre les avantages de l’indicateur de moyenne pour former un système de jugement de tendance robuste. Elle optimise les variétés et les cycles de négociation, ce qui est très approprié pour le trading de jours à fort effet de levier. La stratégie peut devenir une stratégie de trading algorithmique efficace et fiable grâce à des tests d’ajustement et d’optimisation des paramètres.
/*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)