Moyenne mobile à plusieurs périodes tendance du canal suivant la stratégie

Auteur:ChaoZhang est là., Date: 2024-02-20 13:45:42
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de swing conçue pour les marchés tendance tels que les crypto et les actions, en utilisant de grandes périodes de temps comme 8 heures.

Allez long quand le close est au dessus de la moyenne appliquée au high. Allez court quand le close est en dessous de la moyenne appliquée au low.

La logique de la stratégie

La stratégie utilise 7 types différents de moyennes mobiles, y compris SMA, EMA, VWMA, ALMA, SMMA, LSMA et VWMA. Ces moyennes mobiles sont appliquées séparément aux prix les plus élevés et les plus bas des chandeliers pour générer deux lignes moyennes.

La ligne moyenne appliquée aux prix élevés est appelée avg_high. celle appliquée aux prix bas est appelée avg_low. Ces deux lignes forment un canal.

Allez long quand la fermeture est supérieure à avg_high. Allez court quand la fermeture est inférieure à avg_low.

Le stop loss pour long est avg_low. Prendre profit est le prix d'entrée *(1 + tp_long). Pour faire court, le stop loss est avg_high, prendre profit est le prix d'entrée *(1 - tp_short).

Analyse des avantages

Le plus grand avantage de cette stratégie est l'utilisation de multiples moyennes mobiles pour améliorer la rentabilité.

Un autre avantage est l'approche du canal, qui limite la portée des arrêts de perte et réduit le risque adapté au swing trading.

Analyse des risques

La stratégie comporte deux risques principaux:

  1. La combinaison de plusieurs MAs rend le réglage des paramètres complexe nécessitant de nombreux tests et optimisations pour trouver le meilleur.

  2. Dans les marchés latéraux ou non tendance, la stratégie a tendance à générer des pertes et des fléchettes.

Pour atténuer les risques, choisissez des produits avec des tendances claires et effectuez des tests de retour et une optimisation approfondis pour trouver des paramètres adaptés aux conditions actuelles du marché.

Directions d'optimisation

Les domaines à optimiser davantage:

  1. Testez plus de types de MAs pour trouver de meilleures combinaisons, comme SMA, EMA, KAMA, TEMA, etc.

  2. Optimiser la longueur des MAs et la largeur du canal pour déterminer les paramètres optimaux.

  3. Testez différents mécanismes de prise de profit et d'arrêt de perte tels que les arrêts de trailing ou les arrêts dynamiques.

  4. Incorporer des indicateurs de tendance tels que ADX, ATR pour éviter les sauts de marée pendant les marchés agités.

  5. Optimiser les logiques d'entrée et de sortie avec des filtres supplémentaires pour réduire les transactions invalides.

Résumé

Cette stratégie de suivi de tendance bascule améliore la rentabilité en utilisant plusieurs MA et réduit les risques via des canaux. Elle fonctionne bien pour les produits de tendance après optimisation des paramètres. Mais peut subir de grosses pertes lors d'inversions de tendance. D'autres optimisations sont nécessaires pour atténuer les risques à la baisse.


/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
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/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))



Plus de