Cette stratégie utilise des modèles de moyennes mobiles pour déterminer la direction de la tendance du marché. Lorsqu'une tendance haussière est identifiée, elle ouvrira périodiquement des positions longues avec des montants fixes pour suivre la tendance haussière de la croix dorée sur le marché.
La stratégie repose principalement sur les principes techniques suivants:
Utilisez les lignes EMA pour déterminer la direction de la tendance du marché Lorsque la ligne EMA rapide traverse la ligne EMA lente, elle est jugée comme une tendance haussière et se prépare à entrer dans des positions longues.
Lorsque le MACD passe de positif à négatif, il indique que le pouvoir d'achat commence à s'affaiblir, il est donc temps d'entrer dans des positions longues.
Limitez votre entrée à une seule fois par mois pour éviter de courir après des sommets.
Permettez de définir une date de début et une date de fin pour limiter la période de backtest.
En particulier, la stratégie calcule d'abord la ligne EMA rapide et la ligne EMA lente, et détecte le croisement doré entre eux pour déterminer la tendance du marché. En même temps, elle calcule l'indicateur MACD pour déterminer un point d'entrée spécifique. Lorsque les deux critères sont remplis, un signal long est généré. Selon la règle de ne saisir qu'une fois par mois, les ordres d'entrée réels sont déterminés. Le montant du capital pour chaque entrée peut être prédéfini. Lorsque le backtest se termine, la stratégie fermera activement toutes les positions.
Il s'agit d'une tendance simple et directe qui suit une stratégie présentant les avantages suivants:
L'utilisation de lignes EMA pour déterminer la tendance majeure est simple et pratique.
L'indicateur MACD peut identifier avec une précision relative le point de basculement où le pouvoir d'achat commence à s'affaiblir, rendant les entrées plus sûres.
Se limiter à ne suivre la tendance haussière qu'une fois par mois peut éviter de courir après des sommets et de tuer la tendance haussière dans un marché haussier.
Permettre de personnaliser le montant d'entrée chaque mois offre de la flexibilité dans la taille des positions.
Le backtest peut être utilisé pour évaluer le rendement de la stratégie en fixant une date de début et une date de fin.
Il fermera toutes les positions automatiquement à la fin du backtest, évitant les positions restantes gênantes.
Cette stratégie présente certains risques potentiels:
La détermination de la tendance par le biais de moyennes mobiles peut manquer des opportunités lors de baisses temporaires ou réagir lentement à un renversement de tendance.
Si vous n'entrez qu'une fois par mois, vous risquez de manquer de meilleures occasions d'entrer.
Il y a des risques d'ajustement en courbe, il convient d'accorder plus d'espace de réglage des paramètres et de tester la robustesse sur les marchés et les périodes.
Il existe des risques de poursuite de l'élan et de surachat.
Cette tendance périodique à l'investissement suivant la stratégie peut être étendue et renforcée par les aspects suivants:
Ajoutez une logique de stop loss pour réduire activement les pertes lorsqu'un schéma d'inversion baissier apparaît.
Envisagez d'ajouter un autre achat lorsque l'histogramme MACD montre une divergence haussière pour obtenir plus d'exposition à la tendance haussière.
Introduire une comparaison des nouveaux sommets du mois en cours par rapport au mois précédent pour évaluer la force de l'élan.
Ajouter la logique de dimensionnement des positions. Le montant d'entrée mensuel peut être adapté en fonction du pourcentage plutôt que de la valeur fixe.
Évaluez l'impact des différentes combinaisons de MA et des paramètres MACD. Trouvez l'ensemble de paramètres optimal.
Ajoutez un stop loss qui suit le prix à une certaine distance après avoir atteint de nouveaux sommets, permettant aux bénéfices de fonctionner.
Cette stratégie représente une approche simple et nette de la tendance en utilisant des investissements périodiques et des moyennes mobiles. Elle est facile à comprendre et à mettre en œuvre, ce qui constitue un bon point de départ pour apprendre le trading algorithmique.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-30 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/ // © runescapeyttanic //@version=4 // strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0) //INPUTS################################################################################################################## maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000) emalength = input(title="EMA Length", type=input.integer,defval=200) // Make input options that configure backtest date range startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=12, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=02, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021, minval=1800, maxval=2100) endDate1=endDate-1 //starttag //startmonat //MACD######################################################################################################################## fast_length=12 slow_length=26 src=close col_macd=#0094ff fast_ma = ema(src, fast_length) slow_ma = ema(src, slow_length) macd = fast_ma - slow_ma //EMA Distance CALC######################################################################################################## ma1 =ema(close,emalength) distFromMean = close - ma1 inDateRange = true longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange) longnow=false if(longCondition and strategy.position_size == 0) strategy.entry("My Long Entry Id", strategy.long) longnow:=true if(longCondition and strategy.position_size > 0) longnow:=true if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange) strategy.entry("My Long Entry Id", strategy.long) plotchar(minute, "Minuten", "", location = location.top) plotchar(hour, "Stunden", "", location = location.top) plotchar(dayofmonth, "Tage", "", location = location.top) plotchar(month, "Monat", "", location = location.top) plotchar(year, "Jahr", "", location = location.top) plotchar(strategy.position_size, "Positionen", "", location = location.top) plotchar(longCondition, "Long Condition", "", location = location.top) if true strategy.close_all() //######################################################################################################################### plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0) 1 else 0 plotarrow(series=plotArrow)