Système de vote croisé multi-MA configurable

Auteur:ChaoZhang est là., Date: 23 février 2023
Les étiquettes:

Résumé

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.

La logique de la stratégie

Les principales composantes et règles sont les suivantes:

  1. Plusieurs MAs rapides/lents: en utilisant SMA, WMA, VWMA, etc.

  2. Signal long: tous les MAs rapides se croisent au-dessus des MAs lents.

  3. Signal de sortie: tout traversement rapide de la MA inférieur à la MA lente.

  4. Points de profit/perte: Points fixes basés sur l'ATR.

  5. 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.

Les avantages

Comparativement aux stratégies d'AM uniques, les avantages sont:

  1. Plusieurs AMP permettent une évaluation plus complète des tendances.

  2. Le vote évite les faux signaux du bruit.

  3. Un grand espace de réglage à partir de configurations MA personnalisées.

  4. Le soutien aux différents types d'AM améliore l'adaptabilité.

  5. Contrôle des points de profit/perte définis par risque/récompense commercial.

  6. Ça fonctionne mieux sur des délais plus longs, moins de coups de fouet.

  7. Une logique simple et intuitive, facile à mettre en œuvre et à utiliser.

  8. En général plus stable avec une plus grande longévité par rapport à une seule MA.

Les risques

Cependant, certains risques existent:

  1. Augmentation de la complexité avec plusieurs MAs.

  2. Risques de sur-optimisation.

  3. Un retard fondamental dans l'identification des changements de tendance.

  4. Aucun volume pris en compte, risque d'être piégé.

  5. Les points de profit/perte peuvent entraîner des sorties inutiles.

  6. Performance soumise à l'évolution des régimes du marché.

  7. Besoin de surveiller les rapports bénéfice/risque et la fluidité de la courbe.

  8. La robustesse entre les instruments nécessite une validation.

Améliorations

Sur la base de l'analyse, les améliorations peuvent inclure:

  1. Test de la robustesse des paramètres sur différents instruments.

  2. Ajout de confirmation de volume ou de volatilité.

  3. Optimiser les points de profit/perte.

  4. Définition de la limite maximale de tirage tolérable.

  5. Construire des modèles dynamiques de dimensionnement de la position.

  6. Évaluation des effets de l'introduction de l'apprentissage automatique.

  7. Surveillance de l'absorption maximale et de la douceur de la courbe.

  8. Des itérations continues pour éviter le surajustement.

Conclusion

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

Plus de