Stratégie de suivi de tendance basée sur la moyenne mobile


Date de création: 2023-10-07 15:04:00 Dernière modification: 2023-10-07 15:04:00
Copier: 0 Nombre de clics: 626
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie permet de calculer les moyennes mobiles de différentes périodes, d’identifier la direction de la tendance actuelle et d’envoyer un signal d’achat et de vente en combinaison avec l’indicateur RSI. Lorsqu’une moyenne mobile à court terme traverse une moyenne mobile à long terme, elle considère la tendance à la hausse et effectue une opération d’achat. Lorsqu’une moyenne mobile à court terme traverse une moyenne mobile à long terme, elle considère une inversion de tendance et effectue une opération de vente.

Principe de stratégie

  1. Les moyennes mobiles simples sont calculées sur 10, 20, 50, 100 et 200 jours.

  2. Le RSI à 14 jours est calculé.

  3. Un achat est effectué lorsque le SMA du 10e jour dépasse le SMA du 50e jour et que le RSI est supérieur à 30 et que le SMA du 20e jour est supérieur ou égal au SMA du 100e jour ou que le SMA du 50e jour est supérieur ou égal au SMA du 100e jour.

  4. Réglez le prix de stop loss sur le point d’achat multiplié par 1 moins le pourcentage de stop loss.

  5. La vente est effectuée lorsque:

    • Le 10e SMA a dépassé le 50e SMA et le cours de clôture a été inférieur au 20e SMA: la tendance s’est inversée et la vente a été effectuée
    • Le prix de clôture est inférieur à 95% du prix d’achat: stop loss et vente
    • Le prix de clôture est inférieur au prix d’arrêt: la tendance est de suivre le stop loss.

La stratégie consiste à déterminer la direction de la tendance du marché à l’aide d’une moyenne mobile et à définir un stop-loss pour contrôler le risque. L’indicateur RSI est utilisé pour filtrer les fausses percées.

Analyse des avantages

  • Utilisez les moyennes mobiles pour déterminer la direction de la tendance et achetez dans la phase de tendance à la hausse pour éviter de faire des transactions sur un marché en crise.
  • Utilisation de moyennes mobiles à plusieurs périodes pour éviter d’être induit en erreur par les fluctuations de prix à court terme
  • Le RSI est utilisé pour filtrer les fausses informations.
  • Fixez des limites de perte pour contrôler le risque de perte individuelle
  • L’utilisation du suivi des tendances pour bloquer les pertes

Analyse des risques

  • Les moyennes mobiles sont en retard et risquent de rater le meilleur moment pour une reprise
  • Un arrêt de perte trop lâche peut entraîner des pertes individuelles plus importantes
  • Un arrêt trop serré peut entraîner un arrêt trop fréquent
  • La tendance à la perte de suivi peut être la perte de plus de dollars en quittant trop tôt.

L’optimisation peut être réalisée par l’ajustement des cycles des moyennes mobiles, l’ajustement des points d’arrêt, etc. Il est également possible d’envisager d’améliorer l’exactitude des décisions en les combinant avec d’autres indicateurs.

Direction d’optimisation

  • Adaptation des cycles des moyennes mobiles pour les rendre plus adaptés aux différents environnements de marché
  • Optimiser les paramètres du RSI afin d’améliorer la précision des jugements sur les surachats et les survente
  • Définition de static stop et de trail stop raisonnables en fonction des caractéristiques de chaque variété
  • Ajouter d’autres indicateurs de jugement pour éviter les faux signaux
  • Le point d’arrêt peut être ajusté en fonction de la dynamique des indicateurs tels que la volatilité
  • Optimisation automatique des paramètres par le biais de l’apprentissage automatique

Résumer

Cette stratégie est une stratégie de suivi de tendance typique qui utilise des moyennes mobiles pour juger de la tendance et définir des arrêts pour contrôler le risque. En ajustant les paramètres et en ajoutant d’autres indicateurs de jugement, la rétroaction stratégique et la performance du marché peuvent être encore améliorées. Cependant, aucune stratégie ne peut être parfaite et nécessite un ajustement et une optimisation constants en fonction de l’environnement du marché, en combinaison avec la gestion des risques pour faire face à l’incertitude du marché.

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

//@version=4
strategy("MA_Script", overlay=true)

// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)

// Configure backtest start date with inputs
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)

// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

// Calculate Relative Strength Index
rsiValue=rsi(close, 14)

// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)

MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)

MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)

MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1) 

MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1) 

// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low

// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >=  MA100_Val) or (MA50_Val >=  MA100_Val))
avg_price = (close + open)/2

// First Entry
if (afterStartDate)
    strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)

plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')

// Determine trail stop loss prices
longStopPrice=0.0

longStopPrice :=if (strategy.position_size > 0)
    stopValue=C_BodyHi * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
plot(longStopPrice, color=color.orange, linewidth=1)

bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)

// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')

id_val = ""
stop_val = close
condition = false

if sellCondition_1
    id_val := "Exit By Stop Loss At 7%"
    stop_val := entry_Point_1*0.93
    condition := true
else if sellCondition_2
    id_val := "Exit By Take Profit based on MA"
    stop_val := close
    condition := true
else if sellCondition_3
    id_val := "Exit By Trailing Stop"
    stop_val := longStopPrice
    condition := true

// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    //strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
    //strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
    strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)