Konfigurierbares Multi-MA-Crossover-System zur Abstimmung

Schriftsteller:ChaoZhang, Datum: 23.09.2023
Tags:

Übersicht

Diese Strategie erlaubt eine flexible Konfiguration mehrerer schneller/langsamer gleitender Durchschnittspaare. Sie geht lang, wenn alle schnellen MA über langsamen MA überschreiten, und tritt aus, wenn ein schneller MA unter langsamem MA überschreitet. Der Abstimmungsmechanismus mit mehreren MA zielt darauf ab, robuste Positionsbeschlüsse zu treffen.

Strategie Logik

Die wichtigsten Komponenten und Regeln sind:

  1. Mehrere schnelle/langsame MAs: Verwendung von SMA, WMA, VWMA usw.

  2. Langes Signal: Alle schnellen MAs überschreiten langsame MAs.

  3. Ausfahrtssignal: Jeder schnelle Durchgang unterhalb des langsamen Durchgangs.

  4. Gewinn-/Verlustpunkte: Festpunkte auf Basis von ATR.

  5. Konfigurierbar: Flexible Konfiguration von mehreren MA-Paaren.

Die stimmbasierte Eingabe mit mehreren MAs verbessert die Signalzuverlässigkeit.

Vorteile

Im Vergleich zu einzelnen MA-Strategien sind die Vorteile:

  1. Mehrfache Marktbewertungen bieten eine umfassendere Trendbewertung.

  2. Die Abstimmung verhindert falsche Signale durch Lärm.

  3. Großer Abstimmungsraum aus benutzerdefinierten MA-Konfigurationen.

  4. Die Unterstützung verschiedener Zulassungsarten erhöht die Anpassungsfähigkeit.

  5. Definition von Gewinn-Verlust-Punkte-Kontrolle pro Handelsrisiko/Rendite.

  6. Funktioniert besser bei längeren Zeitrahmen, weniger Kurven.

  7. Einfache und intuitive Logik, einfach umzusetzen und zu bedienen.

  8. Insgesamt stabiler mit größerer Langlebigkeit im Vergleich zu einer einzigen MA.

Risiken

Allerdings bestehen einige Risiken:

  1. Erhöhte Komplexität bei mehreren MAs.

  2. Risiken einer Überoptimierung.

  3. Grundlegende Verzögerungen bei der Erkennung von Trendänderungen.

  4. Keine Menge berücksichtigt, die Gefahr, eingeschlossen zu werden.

  5. Gewinne/Verluste können zu unnötigen Ausgängen führen.

  6. Leistung unterliegen Änderungen der Marktordnungen.

  7. Es ist notwendig, das Verhältnis von Gewinn und Risiko und die Glättlichkeit der Kurve zu überwachen.

  8. Die Robustheit über alle Instrumente hinweg erfordert eine Validierung.

Verbesserungen

Auf der Grundlage der Analyse können Verbesserungen Folgendes beinhalten:

  1. Prüfung der Parameterrobustheit auf verschiedenen Instrumenten.

  2. Zusätzliche Volumen- oder Volatilitätsbestätigung.

  3. Optimierung der Gewinn-Verlust-Punkte.

  4. Festlegung der zulässigen Höchstmenge.

  5. Konstruktion dynamischer Positionsgrößenmodelle.

  6. Bewertung der Auswirkungen der Einführung von maschinellem Lernen.

  7. Überwachung des maximalen Abzugs und der Gleitigkeit der Kurve.

  8. Kontinuierliche Iterationen, um Überanpassung zu vermeiden.

Schlussfolgerung

Der konfigurierbare Multi-MA-Ansatz bildet einen robusten Positionshaltungsmechanismus. Aber die Verhinderung von Überanpassung und dynamische Anpassungen an sich ändernde Märkte sind der Schlüssel für die Langlebigkeit jeder Strategie. Nur durch strenge laufende Optimierungen und Tests kann eine Quant-Strategie erfolgreich sein.


/*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

Mehr