
La stratégie est basée sur le principe de la fourchette d’or des moyennes mobiles. La stratégie utilise deux moyennes mobiles, générant un signal d’achat lorsque la moyenne mobile à court terme dépasse la moyenne mobile à long terme par le bas. La stratégie génère un signal de vente lorsque le prix dépasse une autre moyenne mobile.
La stratégie utilise les cycles de moyenne mobile à court terme, de moyenne mobile à long terme, de sortie de moyenne mobile et les méthodes de calcul des moyennes mobiles personnalisées par l’utilisateur.
Un signal d’achat est généré lorsque les moyennes mobiles à court terme franchissent les moyennes mobiles à long terme par le bas. Cela signifie que la tendance à court terme est convertie en tendance à la hausse et peut être achetée.
Lorsque le cours de clôture tombe en dessous de la moyenne mobile, un signal de vente est généré. Cela signifie que la tendance est inversée et que la position doit être abandonnée.
Les signaux de négociation de la stratégie sont donc dérivés de la croisée des moyennes mobiles à court terme et à long terme et de la relation entre le prix de clôture et la sortie des moyennes mobiles.
Cette stratégie présente les avantages suivants:
Il est facile à comprendre et facile à mettre en œuvre.
Les paramètres peuvent être personnalisés pour s’adapter aux différentes conditions du marché.
Filtrez le bruit à l’aide de moyennes mobiles pour capturer les principales tendances.
Les indicateurs techniques tels que la tendance, le support et la résistance peuvent être optimisés.
Le ratio de gains et de pertes est contrôlable, avec un mécanisme de stop-loss.
La stratégie présente également les risques suivants:
Il est facile de générer de faux signaux dans un marché de recapitalisation peu tendanciel.
Une mauvaise configuration des paramètres peut entraîner un manque de tendance ou une surabondance de transactions invalides.
La mise en place d’un arrêt de perte déraisonnable peut augmenter les pertes.
Un échec à la percée peut entraîner des pertes.
Les paramètres doivent être adaptés aux changements du marché.
Les solutions de gestion du risque comprennent: la définition de paramètres d’optimisation, le filtrage des signaux en combinaison avec d’autres indicateurs, l’ajustement de la position de stop loss, la détermination de la tendance et la participation ultérieure.
Cette stratégie peut être optimisée dans les domaines suivants:
Développer des mécanismes de détection de tendances et générer des signaux de trading après avoir identifié les tendances.
Les signaux de filtrage peuvent être combinés avec des indicateurs de volume ou de volatilité.
Optimisation dynamique des paramètres de la période de la moyenne mobile.
Optimiser le mécanisme de stop loss pour un stop loss mobile
Les signaux de transaction sont confirmés par la combinaison de la résistance et du support, ainsi que d’autres indicateurs.
Ajustez les paramètres en fonction des variétés et des périodes.
Cette stratégie de trading avec une moyenne mobile est une stratégie de suivi de tendance simple et pratique. Elle permet d’ajuster les paramètres en fonction de la situation du marché et de saisir la direction de la tendance principale dans la situation de la tendance.
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © TwoChiefs
//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
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 = 2020, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
//CREATE USER-INPUT VARIABLES
periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
src1 = close
pivot = (high + low + close) / 3
//MA CALCULATION FUNCTION
ma(smoothing, src, length) =>
if smoothing == "RMA"
rma(src, length)
else
if smoothing == "SMA"
sma(src, length)
else
if smoothing == "EMA"
ema(src, length)
else
if smoothing == "WMA"
wma(src, length)
else
if smoothing == "VWMA"
vwma(src, length)
else
if smoothing == "SMMA"
na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
else
if smoothing == "HullMA"
wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)
//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")
//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na
strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)
if (not time_cond)
strategy.close_all()