
Cette stratégie est une mise en œuvre de la stratégie de négociation typique des moyennes mobiles à triple indice. Elle génère un signal de négociation par le croisement d’une EMA de 5 jours plus rapide, d’une EMA de 20 jours plus rapide et d’une EMA de 50 jours plus lente.
Lorsque l’EMA du 5e jour traverse l’EMA du 20e jour et que les trois EMA sont alignées en plusieurs lignes (EMA du 5e jour > EMA du 20e jour > EMA du 50e jour), et que le cours de clôture de la ligne K actuelle a augmenté plus que certains ticks le jour précédent, faites plus; lorsque l’EMA du 5e jour traverse l’EMA du 20e jour et que les trois EMA sont alignées en blanc (EMA du 5e jour < EMA du 20e jour < EMA du 50e jour), et que le cours de clôture de la ligne K actuelle a diminué plus que certains ticks le jour précédent, faites zéro.
Après l’entrée en bourse, si le prix dépasse un certain nombre de ticks, le mécanisme de suivi de la perte est activé, et la ligne de perte est constamment ajustée en fonction de la fluctuation du prix, afin de bloquer plus de ticks.
L’utilisation d’EMA triple pour former un signal de négociation permet de filtrer efficacement le bruit du marché et d’identifier les tendances. Les EMA rapides reflètent les changements les plus récents, les EMA à vitesse moyenne déterminent la direction de la tendance et les EMA lents filtrent les oscillations.
L’augmentation du prix de clôture de la ligne K actuelle par rapport au prix de clôture de la journée précédente permet de filtrer davantage les fausses signaux et de réduire les transactions inutiles.
Le mécanisme de suivi des stop-loss permet d’ajuster dynamiquement les lignes de stop-loss en fonction de l’évolution du marché, afin de maximiser les bénéfices.
Les paramètres de la stratégie sont flexibles et peuvent être optimisés pour différentes variétés et périodes, de la ligne du jour à la ligne de la minute.
En cas de choc, les signaux croisés EMA sont fréquents et peuvent générer des transactions excessives, augmentant les frais de transaction et les coûts de dérapage.
Les stops de suivi peuvent être prématurément arrêtés lors d’une secousse majeure et ne peuvent pas tenir toute la tendance.
La caractéristique de retard de l’EMA peut manquer le tournant de la tendance et entraîner des pertes.
Il est nécessaire d’optimiser les paramètres tels que la longueur du cycle EMA, le suivi des tiques de stop-loss, etc. Les effets varient considérablement selon les variétés et les cycles.
Les signaux de trading peuvent être filtrés en combinaison avec d’autres indicateurs tels que le MACD, le KD, etc.
Il est possible de tester et d’optimiser la combinaison optimale de paramètres en fonction de la variété et du cycle.
Les paramètres peuvent être ajustés dynamiquement par des méthodes telles que l’intervention manuelle ou l’apprentissage automatique.
Il est possible d’envisager de fermer le suivi des stop-loss et de conserver la position complète dans certaines situations.
Le stop-loss peut être combiné avec un stop-stop automatique pour remplacer le simple stop-loss de suivi.
La stratégie intègre les trois méthodes d’analyse technique courantes, les croisements EMA, les ruptures de prix et le suivi des arrêts de perte, pour former un système de trading de suivi de tendance plus complet et plus fiable. Par l’optimisation des paramètres, elle s’adapte à toutes les variétés et cycles et fonctionne mieux dans les marchés où la tendance est évidente.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4
/////////////////////////////////////////////////////// Initial Parameters ///////////////////////////////////////////////////////
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true
strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax,
default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent,
commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500,
max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false)
///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////
DateFilter = input(false, "═════ Data Filtering ═════")
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000)
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000)
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000)
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000)
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000)
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000)
//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////
var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1])
OrderQty = 1
Buffer = InitBuffer / (Multiplier * 100)
/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////
EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)
//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer)
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer)
/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////
if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))
StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Long Stoploss", "Long")
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier)))))
StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////
if (longCondition)
StartPrice := close
StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier))
strategy.entry("Long", strategy.long, qty=OrderQty)
strategy.exit("Long Stoploss", "Long")
if (shortCondition)
StartPrice := close
StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier))
strategy.entry("Short", strategy.short, qty=OrderQty)
strategy.exit("Short Stoploss", "Short")
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)