Cette stratégie génère des signaux de trading basés sur le croisement et le croisement des lignes EMA rapides et lentes, appartenant aux stratégies de suivi de tendance.
La logique de base de cette stratégie comprend principalement les éléments suivants:
Calculer les EMA rapides et lents: utiliser ta.ema() pour calculer les EMA rapides de longueur fastInput et les EMA lentes de longueur slowInput.
Définir l'intervalle de temps de backtest: Utilisez useDateFilter pour définir si vous voulez filtrer l'intervalle de temps de backtest, et utilisez backtestStartDate et backtestEndDate pour définir les heures de début et de fin.
Générer des signaux de négociation: Utiliser ta.crossover() et ta.crossunder() pour comparer les EMA rapides et lentes, générant des signaux d'achat lorsque l'EMA rapide traverse l'EMA lente et des signaux de vente lorsque l'EMA rapide traverse l'EMA lente.
Gérer les commandes en dehors de la plage de temps: annuler les commandes non remplies en dehors de la plage de temps du backtest et aplatir toutes les positions.
Tracer les lignes EMA: Tracer les lignes EMA rapides et lentes sur le graphique.
Il s'agit d'une stratégie de suivi de tendance très simple, avec les avantages suivants:
Une logique simple, facile à comprendre et à mettre en œuvre.
L'EMA aplanit les données sur les prix et réduit le bruit des transactions.
Périodes d'EMA personnalisables, adaptées à différents environnements de marché.
Plage de temps de backtest flexible pour des périodes de test spécifiques.
Optimiser les conditions d'entrée et de sortie, peut être combiné avec d'autres indicateurs.
Cette stratégie comporte également des risques:
La stratégie à double EMA est crue, incapable de s'adapter de façon flexible aux changements du marché.
Risque de négociation fréquente et de négociation répétée.
Des paramètres EMA incorrects peuvent provoquer des signaux de négociation erronés.
Des intervalles de temps déraisonnables pour les tests antérieurs peuvent entraîner un surajustement.
Risque de retrait et de pertes inévitables.
Les risques peuvent être gérés par l'optimisation des paramètres, le filtrage des fluctuations, le stop loss, etc.
Cette stratégie peut être optimisée dans les aspects suivants:
Optimiser les périodes EMA pour trouver la meilleure combinaison de paramètres.
Ajouter d'autres indicateurs pour filtrer les transactions inutiles.
Ajouter un stop loss pour contrôler les pertes d'une seule transaction.
Incorporer des filtres de tendance et de volatilité pour réduire la fréquence des transactions.
Testez différents produits pour trouver le meilleur.
Utilisez le glissement, la commission pour un backtest plus réaliste.
En résumé, il s'agit d'une stratégie de croisement double EMA très simple avec une logique claire en comparant les EMA rapides et lents.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity) fastInput = input( 10, "Fast EMA") slowInput = input( 21, "Slow EMA") // Calculate two moving averages with different lengths. float fastMA = ta.ema(close, fastInput) float slowMA = ta.ema(close, slowInput) // STEP 1. Create inputs that configure the backtest's date range useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2018"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("7 Sep 2023"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") // STEP 2. See if current bar falls inside the date range inTradeWindow = true // STEP 3. Include the date filter with the entry order conditions // Enter a long position when `fastMA` crosses over `slowMA`. if inTradeWindow and ta.crossover(fastMA, slowMA) strategy.entry("buy", strategy.long) // Enter a short position when `fastMA` crosses under `slowMA`. if inTradeWindow and ta.crossunder(fastMA, slowMA) strategy.close_all(comment="sell") // STEP 4. With the backtest date range over, exit all open // trades and cancel all unfilled pending orders if not inTradeWindow and inTradeWindow[1] strategy.cancel_all() strategy.close_all(comment="Date Range Exit") // Plot the moving averages. plot(fastMA, "Fast MA", color.aqua) plot(slowMA, "Slow MA", color.orange)