Quantitative Strategie: MA Stärken- und Schwächen-Trendverfolgung


Erstellungsdatum: 2024-01-19 16:50:13 zuletzt geändert: 2024-01-19 16:50:13
Kopie: 3 Klicks: 609
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Strategie: MA Stärken- und Schwächen-Trendverfolgung

Überblick

Die Strategie erzeugt ein Kaufsignal, wenn der Indikator den eigenen langfristigen MA übersteigt. Die Strategie kann eine Langzeit-MA-Kombination konfigurieren, um unterschiedliche Trendzyklen zu verfolgen.

Strategieprinzip

  1. Berechnen Sie mehrere Gruppen von MA an den Tagen 5, 10 und 20 und beurteilen Sie, ob der Preis jede MA nach oben durchbricht, die Marke durchbricht und die Integration bildet die Ma-Stärke.
  2. Die Anwendung von Moving Averages auf die Stärke von MMA bildet einen Mittelwertindikator, der die Leerheit der Mittelwertlinie beurteilt und ein Handelssignal erzeugt.
  3. Konfigurierbare Parameter für die Verfolgung von Zyklen: Anzahl der kurzfristigen MA-Gruppen, langfristige Durchschnittszyklus, Positionsaufnahmebedingungen usw.

Die Strategie beurteilt hauptsächlich die Häufigkeit des Mittelwertindikators, die durch den Mittelwertindikator die durchschnittliche Stärke der MA-Streckengruppe beurteilt. Die MA-Streckengruppe beurteilt zentral die Richtung und Stärke des Trends, der Mittelwertindikator beurteilt die Beständigkeit.

Analyse der Stärken

  1. Eine mehrdimensionale Modell zur Beurteilung der Trendstärke. Eine einzelne MA-Linie kann nicht feststellen, ob die Stärke ausreicht. Die Strategie misst mehrere MA-Breakouts, um sicherzustellen, dass die Stärke ausreicht und ein Signal ausgegeben wird, das zuverlässig ist.
  2. Konfigurierbarer Tracking-Zyklus. Kurzzeit-MA-Anpassung, um Trends auf unterschiedlichen Ebenen zu erfassen. Langzeit-MA-Anpassung, um den Ausgang zu steuern.
  3. Nur mehr kann man vermeiden, einen Fehler zu machen und den langfristigen Aufwärtstrend zu verfolgen. Die Strategie ist nur mehr, nur zu folgen, nicht zu folgen, um den Umkehrverlust zu reduzieren.

Risikoanalyse

  1. Es besteht ein Rücktrittsrisiko. Es besteht ein größeres Rücktrittsrisiko, wenn die kurze Linie unterhalb der mittleren Linie der langen Linie liegt. Die Einzelschäden können durch Stop-Loss reduziert werden.
  2. Es besteht ein Umkehrrisiko. Die langfristige Marktrückführung erfordert eine Anpassung. Die Strategie muss Exiting rechtzeitig stoppen. Es wird empfohlen, das Umkehrrisiko zu kontrollieren, indem man Technologien wie Bandbreiten und Kanäle kombiniert, um das Ende der großen Periode zu beurteilen.
  3. Parameterrisiken. Eine falsche Parameterkonfiguration kann zu Fehlsignalen führen. Die Parameter sollten für verschiedene Sorten angepasst werden, um die Parameter zu stabilisieren.

Optimierungsrichtung

  1. Es ist möglich, den Eintritt durch mehrere Kennzahlen zu filtern. Es ist möglich, die Verkehrsmenge zu kombinieren, um ein Signal zu senden, das von der Menge überprüft werden kann, um falsche Durchbrüche zu vermeiden.
  2. Erhöhung der Stop-Loss-Methode. Bewegliche Stop-Loss, Kurvenstop-Loss können die Verluste bei der Rückführung reduzieren. Die Stop-Loss-Methode kann auch berücksichtigt werden, um die Gewinne zu sperren und eine Umkehr zu vermeiden.
  3. Berücksichtigen Sie die Konfiguration von Futures und Devisenvarianten. Die MA-Linie ist für Trendvarianten geeignet. Die Parameterstabilität verschiedener Futures-Varianten kann bewertet werden, um die beste Variante zu wählen.

Zusammenfassen

Die Strategie ermittelt die Preisentwicklung durch die Berechnung von MA-Stärken und verfolgt die Tendenz mit einer Gleichgewichtskreuzung als Signalquelle. Der Vorteil der Strategie besteht darin, die Trendstärke genau zu ermitteln, die Zuverlässigkeit ist hoch. Das Hauptrisiko liegt in der Trendwende und der Parameteranpassung.

Strategiequellcode
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)