Cette stratégie permet une configuration flexible de plusieurs paires de moyennes mobiles rapides / lentes. Elle est longue lorsque toutes les moyennes mobiles rapides se croisent au-dessus des moyennes mobiles lentes, et s'éteint lorsque toute moyenne mobiles rapide se croisera au-dessous de la moyenne mobiles lente. Le mécanisme de vote avec plusieurs moyennes mobiles vise à former des décisions de tenue de position robustes.
Les principales composantes et règles sont les suivantes:
Plusieurs MAs rapides/lents: en utilisant SMA, WMA, VWMA, etc.
Signal long: tous les MAs rapides se croisent au-dessus des MAs lents.
Signal de sortie: tout traversement rapide de la MA inférieur à la MA lente.
Points de profit/perte: Points fixes basés sur l'ATR.
configurable: configuration flexible de plusieurs paires de MA.
L'entrée basée sur le vote avec plusieurs MAs améliore la fiabilité du signal.
Comparativement aux stratégies d'AM uniques, les avantages sont:
Plusieurs AMP permettent une évaluation plus complète des tendances.
Le vote évite les faux signaux du bruit.
Un grand espace de réglage à partir de configurations MA personnalisées.
Le soutien aux différents types d'AM améliore l'adaptabilité.
Contrôle des points de profit/perte définis par risque/récompense commercial.
Ça fonctionne mieux sur des délais plus longs, moins de coups de fouet.
Une logique simple et intuitive, facile à mettre en œuvre et à utiliser.
En général plus stable avec une plus grande longévité par rapport à une seule MA.
Cependant, certains risques existent:
Augmentation de la complexité avec plusieurs MAs.
Risques de sur-optimisation.
Un retard fondamental dans l'identification des changements de tendance.
Aucun volume pris en compte, risque d'être piégé.
Les points de profit/perte peuvent entraîner des sorties inutiles.
Performance soumise à l'évolution des régimes du marché.
Besoin de surveiller les rapports bénéfice/risque et la fluidité de la courbe.
La robustesse entre les instruments nécessite une validation.
Sur la base de l'analyse, les améliorations peuvent inclure:
Test de la robustesse des paramètres sur différents instruments.
Ajout de confirmation de volume ou de volatilité.
Optimiser les points de profit/perte.
Définition de la limite maximale de tirage tolérable.
Construire des modèles dynamiques de dimensionnement de la position.
Évaluation des effets de l'introduction de l'apprentissage automatique.
Surveillance de l'absorption maximale et de la douceur de la courbe.
Des itérations continues pour éviter le surajustement.
L'approche multi-MA configurable constitue un mécanisme de détention de position robuste. Mais la prévention du suradaptation et l'adaptation dynamique aux marchés changeants sont essentielles à la longévité de toute stratégie.
/*backtest start: 2022-09-16 00:00:00 end: 2023-09-22 00:00:00 period: 1d basePeriod: 1h 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/ // © levieux //@version=5 strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1) crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config") source= input.source(high) maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"]) atrPeriod= input(14, title="ATR Period") profitAtr = input(10, title="Profit ATR x") lossAtr = input(5, title="Loss ATR x") ma(src,length,type) => float ma = switch type "SMA" => ta.sma(src, length) "WMA" => ta.wma(src, length) "VWMA" => ta.vwma(src, length) crossoverGroups= str.split(crossoverConfig, ",") crossoverCount= array.size(crossoverGroups) crossovers= array.new_string(crossoverCount) positions= array.new_int(crossoverCount, 0) longVotes= 0 for i= 0 to crossoverCount-1 crossover= str.tostring(array.get(crossoverGroups, i)) crossoverBoundaries= str.split(crossover, "x") int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0))) int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1))) wmaFast= ma(source,fastLength,maType) wmaSlow= ma(source,slowLength,maType) if wmaFast>wmaSlow longVotes:= longVotes + 1 array.set(positions, i, 1) longCondition= longVotes==crossoverCount and strategy.position_size==0 //profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick //lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick profitPrice= close+profitAtr*ta.atr(atrPeriod) lossPrice= close-lossAtr*ta.atr(atrPeriod) if strategy.position_size>0 profitPrice:= profitPrice[1] lossPrice:= lossPrice[1] plot(profitPrice, color=color.green) plot(lossPrice, color=color.red) if longCondition and profitPrice>0 strategy.entry("Long", strategy.long) if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice) strategy.close("Long") longVotes:= 0