Stratégie de dynamique simple basée sur la SMA, la EMA et le volume

Auteur:ChaoZhang est là., Date: 2023-12-08 11h15 et 30 min
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de dynamique intradienne simple qui ne va que long et ne court pas. Il utilise des indicateurs SMA, EMA et volume pour tenter d'entrer sur le marché au moment optimal où le prix et la dynamique sont à la hausse.

Principe de stratégie

La logique du signal d'entrée est la suivante: lorsque la SMA est supérieure à l'EMA et qu'il y a un schéma de tendance haussière de 3 ou 4 barres consécutives, le prix le plus bas des barres intermédiaires étant supérieur au prix d'ouverture de la barre de tendance haussière de démarrage, un signal d'entrée est généré.

La logique du signal de sortie est la suivante: lorsque la SMA traverse la EMA, un signal de sortie est généré.

Cette stratégie n'est qu'à long terme et non à court terme. Sa logique d'entrée et de sortie a une certaine capacité à reconnaître les tendances haussières persistantes.

Analyse des avantages

Les avantages de cette stratégie:

  1. La logique est simple et facile à comprendre et à mettre en œuvre;

  2. Utilise des indicateurs techniques communs tels que SMA, EMA et volume pour une flexibilité dans le réglage des paramètres;

  3. A une certaine capacité à saisir certaines opportunités lors de tendances haussières persistantes.

Analyse des risques

Les risques de cette stratégie:

  1. Incapacité de détecter les tendances à la baisse ou les marchés de consolidation, entraînant des retombées importantes;

  2. Incapacité d'utiliser les opportunités d'achat à découvert, incapacité de se protéger contre les tendances à la baisse, manquement à de bonnes chances de profit;

  3. L'indicateur de volume ne fonctionne pas bien sur les données haute fréquence, les paramètres doivent être ajustés;

  4. Peut utiliser le stop loss pour contrôler les risques.

Directions d'optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. ajout de la capacité de court-circuit pour les opportunités de renversement moyen;

  2. Utilisation d'indicateurs plus avancés tels que le MACD et le RSI pour une meilleure détection des tendances;

  3. Optimisation de la logique de stop loss pour réduire les retraits;

  4. Ajustement des paramètres et test de différents délais pour trouver des ensembles de paramètres optimaux.

Conclusion

En résumé, il s'agit d'une tendance très simple en suivant une stratégie utilisant SMA, EMA et volume pour le timing d'entrée. Son avantage est d'être simple et facile à mettre en œuvre, bon pour les débutants à apprendre, mais il ne peut pas détecter la consolidation ou les tendances à la baisse et présente des risques. Des améliorations peuvent être apportées en introduisant le shorting, l'optimisation des indicateurs et le stop loss, etc.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-02 00:00:00
period: 2h
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/
// © slip_stream

//@version=4

// Simple strategy for riding the momentum and optimising the timings of truer/longer price moves upwards for an long posistions on a daily basis (can be used, but with less effect
// on other time frames. Volume settings would have to be adjusted by the user accordingly. (short positions are not used).
// This strategy has default settings of a short(er) SMA of 10, a long(er) EMA of 20, and Volume trigger of 10 units and above. All these settings can be changed by the user
// using the GUI settings and not having to change the script.

// The strategy will only open a long position when there is a clear indication that price momentum is upwards through the SMA moving and remaining above the EMA (mandatory) and price period indicators
// of either 1) a standard 3 bar movement upwards, 2) a standard but "aggressive" 3 or 4 bar play where the low of the middle resting bars can be equal to or higher than (i.e. not
// the more standard low of about half) of the opening of the ignition bar. The "aggression" of the 3/4 bar play was done in order to counteract the conservatisme of having a mandatory
// SMA remaining higher than the EMA (this would have to be changed in the script by the user if they want to optimise to their own specifications. However, be warned, all programmatic
// settings for the maximum acceptable low of the middle resting bars runs a risk of ignoring good entry points due to the low being minutely e.g. 0.01%, lower than the user defined setting)


strategy(title = "Simple Momentum Strategy Based on SMA, EMA and Volume", overlay = true, pyramiding = 1, initial_capital = 100000, currency = currency.USD)


// Obtain inputs
sma_length = input(defval = 10, minval=1, type = input.integer, title = "SMA (small length)")
ema_length = input(defval = 20,minval=1, type = input.integer, title = "EMA (large length)")
volume_trigger = input(defval = 10, title = "Volume Trigger", type = input.integer)
sma_line = sma(close, sma_length)
ema_line = ema(close, ema_length)


// plot SMA and EMA lines with a cross for when they intersect
plot(sma_line, color = #8b0000, title = "SMA")
plot(ema_line, color = #e3d024, title = "EMA")
plot(cross(sma_line, ema_line) ? sma_line : na, style = plot.style_cross, linewidth = 4, color = color.white)


// Create variables
// variables to check if trade should be entered
//three consecutive bar bar moves upwards and volume of at least one bar is more than 10
enter_trade_3_bar_up = sma_line > ema_line and close[1] >= close [2] and close[3] >= close[4] and close[2] >= close[3] and (volume[1] >= volume_trigger or volume[2] >= volume_trigger or volume[3] >= volume_trigger)
// aggressive three bar play that ensures the low of the middle bar is equal to or greater than the open of the instigator bar. Volume is not taken into consideration (i.e. aggressive/risky)
enter_3_bar_play = sma_line > ema_line and close[1] > close[3] and low[2] >= open[3]
// aggressive four bar play similar to the 3 bar play above
enter_4_bar_play = sma_line > ema_line and close[1] > close[4] and low[2] >= open[4]
trade_entry_criteria = enter_trade_3_bar_up or enter_3_bar_play or enter_4_bar_play // has one of the trade entry criterias returned true?

// exit criteria for the trade: when the sma line goes under the ema line
trade_exit_criteria = crossunder (sma_line, ema_line)


if (year >= 2019)
    strategy.entry(id = "long", long = true, qty = 1, when = trade_entry_criteria)
    strategy.close(id = "long", when = trade_exit_criteria, qty = 1)
    // for when you want to brute force close all open positions: strategy.close_all (when = trade_exit_criteria)

Plus de