Stratégie de moyenne mobile automatique suivant la tendance


Date de création: 2023-10-10 15:21:45 Dernière modification: 2023-10-10 15:21:45
Copier: 1 Nombre de clics: 649
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur la croisée des moyennes mobiles rapides et des moyennes mobiles lentes comme signaux d’achat et de vente et appartient à la catégorie des stratégies de suivi de la tendance. En ajustant automatiquement les paramètres des moyennes mobiles et en s’adaptant dynamiquement à la tendance du marché, les gains sont maximisés.

Principe de stratégie

  1. Calculer les moyennes rapides et les moyennes lentes. Les paramètres des moyennes rapides sont pris en compte par défaut comme 21, les paramètres des moyennes lentes comme 34.

  2. Lorsque la courbe moyenne rapide est traversée par la courbe moyenne lente, elle indique une hausse et émet un signal d’achat.

  3. Lorsque la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe de la courbe.

  4. L’objectif est d’adapter la dynamique de la moyenne mobile à la tendance du marché en ajustant automatiquement la longueur de la moyenne mobile.

Analyse des avantages

  1. La stratégie est simple, claire et facile à comprendre.

  2. Le blogueur a également publié un article dans lequel il explique comment il s’est lancé dans la création d’une plateforme de trading en ligne.

  3. Les paramètres peuvent être modifiés de manière dynamique pour s’adapter à l’évolution de la situation.

  4. L’algorithme de moyenne mobile peut être configuré pour augmenter la flexibilité de la stratégie.

  5. Logique, une application flexible, qui peut être librement configurée pour acheter et vendre.

Analyse des risques

  1. Les stratégies de moving averages sont susceptibles d’entraîner des transactions fréquentes et coûteuses.

  2. La moyenne mobile est en retard dans les périodes de forte volatilité et risque de manquer les meilleurs moments pour acheter ou vendre.

  3. Les paramètres de la moyenne mobile doivent être optimisés et la fréquence d’ajustement doit être optimisée. Une mauvaise configuration peut entraîner une défaillance de la stratégie.

  4. Il est nécessaire de contrôler strictement les stop-loss pour éviter que les pertes ne s’étendent.

  5. La reprise de la tendance pourrait entraîner des pertes massives.

Direction d’optimisation

  1. Optimiser les paramètres de la moyenne mobile pour les rendre plus sensibles et capter en temps opportun les changements de tendance.

  2. Logique d’arrêt des pertes accrue et contrôle strict des pertes individuelles.

  3. Il est important d’augmenter les indicateurs de jugement de la tendance pour éviter que la tendance se retourne et cause des pertes.

  4. Optimiser les stratégies d’ajustement de la moyenne mobile pour les rendre plus intelligentes et plus automatisées.

  5. Ajout d’un module d’optimisation par paramètres et optimisation automatique à l’aide de méthodes d’apprentissage automatique.

Résumer

L’idée générale de cette stratégie est claire et facile à comprendre, elle complète les achats et les ventes par la configuration d’une moyenne mobile rapide et lente de différentes longueurs. Elle appartient à la stratégie de suivi de tendance typique. L’avantage de la stratégie est que les règles de négociation sont simples, faciles à mettre en œuvre et capables de capturer efficacement la tendance.

Code source de la stratégie
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//
// @version=4
// © Ehsan Haghpanah, (ehsanha)
// Algorithmic Trading Research
//
// eha Moving Averages Strategy, 
// A simple strategy based on crossing Moving Averages of 
// different lengths (a fast moving average and slow one)
//

strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true)

// 
// -- strategy parameter(s)
// moving averages parameter(s)
var _fastMA_len  = input(title = "Fast MA Length",  defval = 21,    type = input.integer, minval = 1, step = 1)
var _slowMA_len  = input(title = "Slow MA Length",  defval = 34,    type = input.integer, minval = 1, step = 1)
var _ma_algo_id  = input(title = "MA Algorithm",    defval = "SMA", options = ["SMA", "EMA", "WMA"])
// backtesting date and time range parameter(s)
var _startYear   = input(defval = 2020, title = "Start Year",  type = input.integer, minval = 1976)
var _startMonth  = input(defval = 1,    title = "Start Month", type = input.integer, minval = 1, maxval = 12)
var _startDay    = input(defval = 1,    title = "Start Day",   type = input.integer, minval = 1, maxval = 31)
var _closeYear   = input(defval = 2020, title = "Close Year",  type = input.integer, minval = 1984)
var _closeMonth  = input(defval = 9,    title = "Close Month", type = input.integer, minval = 1, maxval = 12)
var _closeDay    = input(defval = 1,    title = "Close Day",   type = input.integer, minval = 1, maxval = 31)

//
// -- function(s) and calculation(s)
// checks whether current time is in backtesting time range
start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00)     // backtesting range start time, (00, 00); (hour, minute)
close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59)     // backtesting range close time, (23, 59); (hour, minute)
isInRange() => true
//
// calculates moving average based on provided algorithm, source and length
// alg : moving average algorithm
// len : length
// ser : series
calcMA(alg, len, ser) =>
    (len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na)))

//
// -- strategy logic and calculation(s)
ma_fast  = calcMA(_ma_algo_id, _fastMA_len, close)
ma_slow  = calcMA(_ma_algo_id, _slowMA_len, close)
cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA
cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA

//
// -- strategy execution logic
// opens a long position whenever the time is in range and crosses over
strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov)
// closes the position whenever the time is in range and crosses under
strategy.close("ID", comment = "-", when = isInRange() and cross_un)

//
// -- drawing and visualization
co_fast = color.new(color.gray, 25)
co_slow = color.new(color.gray, 75)
// drawing moving average(s)
plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line)
plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)