Momentum-Tracking-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-20 16:06:26
Tags:

img

Strategieübersicht

Die Momentum Tracking Trading Strategie ist eine automatisierte Handelsstrategie, die hauptsächlich Marktdynamiktrends verfolgt und mehrere technische Indikatoren als Hilfsurteile verwendet.

Insgesamt eignet sich diese Strategie für den mittelfristigen und langfristigen Trendhandel und kann Markttrends effektiv erfassen und die Handelsfrequenz reduzieren, um höhere Einzelgewinne zu erzielen.

Strategieprinzip

Urteil über die Hauptmacht

Der Kern der Momentum-Tracking-Strategie besteht darin, die Richtung der Hauptfonds des Marktes zu beurteilen. Die Strategie berechnet den ATR-Indikator, um die Volatilität des Marktes in Echtzeit zu überwachen.

Wenn die Volatilität abschwächt, bedeutet dies, dass die Haupträgerakkumulation oder -allokation abgeschlossen ist und die Strategie wieder in den Markt eintritt, um die spezifische Richtung der Haupträger zu bestimmen. Die Beurteilungsmethode besteht darin, die Unterstützungs- und Druckpositionen des Marktes zu berechnen, um zu sehen, ob es Anzeichen für Durchbrüche gibt. Wenn es einen klaren Durchbruch gibt, beweist dies, dass die Haupträger diese Richtung gewählt haben.

Zusätzliches Urteil

Nach der Festlegung der Richtung der Hauptfonds wird die Strategie auch mehrere zusätzliche technische Indikatoren einführen, die erneut überprüft werden sollen, um Fehleinschätzungen zu vermeiden.

Nur wenn die Richtung der Hauptfonds und Hilfsindikatoren Signale in die gleiche Richtung geben, wird die Strategie Positionen öffnen.

Stop-Loss-Ausgang

Nach Eröffnung von Positionen wird die Momentum-Tracking-Strategie die Preisänderungen in Echtzeit verfolgen und die Erweiterung der ATR-Werte als Stop-Loss-Signal verwenden. Dies bedeutet, dass der Markt wieder in die Hauptoperationsphase eingetreten ist und sofort in den Cash-Bereich aussteigen muss, um nicht gefangen zu werden.

Darüber hinaus wird, wenn die Preisbewegung einen bestimmten Bereich überschreitet und dann zurückfällt, auch ein Stop-Loss auftreten.

Vorteile der Strategie

Hohe Systematisierung

Der größte Vorteil von Momentum-Tracking-Strategien ist ihr hoher Grad an Systematisierung und Standardisierung.

Dies macht die Replizierbarkeit dieser Strategie sehr stark. Benutzer können sie nach der Konfiguration ohne manuelles Eingreifen für einen langfristigen Gebrauch anwenden.

Reife Risikokontrolle

Die Strategie verfügt über integrierte mehrstufige Risikokontrollmechanismen, wie z. B. Hauptleistungsbeurteilungen, Hilfsverifizierung, Einstellung von Stop-Loss-Linien usw., die nichtsystematische Risiken wirksam kontrollieren können.

Insbesondere eröffnet die Strategie nur Positionen in Situationen mit hoher Wahrscheinlichkeit und setzt wissenschaftliche Stop-Loss-Punkte, um Verluste zu vermeiden.

Relativ nachhaltige Renditen

Im Vergleich zu kurzfristigen Strategien ist die Haltedauer von Momentum-Tracking-Strategien länger und jeder Gewinn höher.

Darüber hinaus verfolgt die Strategie mittelfristige und langfristige Trends, wodurch die Volatilität der Trends vollständig erfasst werden kann.

Gefahrenwarnungen

Schwierige Optimierung von Parametern

Die Strategie zur Momentumverfolgung beinhaltet mehrere Parameter, z. B. ATR-Parameter, Penetrationsparameter, Stop-Loss-Parameter usw. Zwischen diesen Parametern besteht eine gewisse Korrelation, die wiederholte Tests erfordert, um die optimale Parameterkombination zu finden.

Eine unsachgemäße Parameterkonfiguration kann leicht zu einer übermäßigen Handelsfrequenz oder einer unzureichenden Risikokontrolle führen.

Ausbruchsfalle

Wenn die Strategie die wichtigsten Leistungs- und Indikatorsignale bestimmt, setzt sie auf den Durchbruch der Preise, um ihn zu bestätigen.

Wenn ein wichtiger Durchbruch fehlschlägt, kann dies zu größeren Verlusten führen.

Optimierungsrichtlinien

Einführung von maschinellem Lernen

Algorithmen für maschinelles Lernen können verwendet werden, um Korrelationen zwischen Parametern automatisch zu erkennen und optimale Parameterkombinationen zu finden.

Insbesondere kann der EnvironmentError-Algorithmus verwendet werden, um Parameter kontinuierlich zu iterieren, basierend auf Verstärkungslernen, um die Strategierenditen zu maximieren.

Filter erhöhen

Auf der Grundlage bestehender Indikatoren wie Handelsvolumenindikatoren, Kapitalflussindikatoren usw. können weitere Hilfsfilter eingeführt werden, um Durchbruchssignale dreimal oder viermal zu überprüfen, um die Zuverlässigkeit zu verbessern.

Es ist jedoch wichtig, dass die Filterintensität ausgeglichen wird und dass die Filter selbst Korrelationen vermeiden.

Strategie Fusion

Kombination der Impulsverfolgungsstrategie mit anderen Strategien, um die Stärken verschiedener Strategien zu nutzen, um Orthogonalität zu erreichen und die allgemeine Stabilität zu verbessern.

Zum Beispiel kann die Einbeziehung von kurzfristigen Umkehrstrategien und die Eröffnung von Umkehrgeschäften nach Durchbrüchen mehr Gewinne erzielen.

Zusammenfassung

Im Allgemeinen ist die Momentum Tracking Trading Strategie eine systematisierte Trend-Tracking-Strategie, die empfehlenswert ist. Sie hat eine klare Handelslogik, genügend Risikokontrolle und kann den Nutzern stabile und effiziente Anlageerträge bringen.

Die Strategie selbst hat jedoch auch einige inhärente Schwächen. Sie erfordert, dass Benutzer die Fähigkeit haben, Parameter zu optimieren und Strategien zu integrieren, um die Wirksamkeit dieser Strategie zu maximieren.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-15 01:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by frasmac2k Strategy credit to Alex Morris

//@version=5
strategy("Mechanical", shorttitle="MECH", overlay=true)

// Get the current date and time
currentYear = year
currentMonth = month
currentDay = dayofmonth

// Create a timestamp for the present date and time
currentTimestamp = timestamp(currentYear, currentMonth, currentDay)

// Define time interval for backtesting
dStart = input(timestamp('2023-07-01'), title='Set Start date', tooltip='Select a start date to run the script from')

// Define direction of strategy
direction = input.string('Forward',title='Direction', tooltip='Forward will go LONG on a Green anchor candle. Inverse will go short on a Green anchor candle and vice versa for Red candle', options=['Forward', 'Inverse'])

// Define the anchor hour as user input with a range of 0 to 23
anchorHour = input.int(11, title="Anchor Hour", tooltip='Set the hour to trade', minval=0, maxval=23)

// Define the take profit and stop loss in pips
takeProfitPips = input.int(10, title='Define TP Pips', tooltip='How many pips do you want to set TP. Choose a sensible value related to the instrument', minval=5)
stopLossPips = input.int(10,'Define SL Pips', tooltip='How many pips do you want to set SL. Choose a sensible value related to the instrument', minval=5)

// Define Tick size
tick10p = input.int(100, title='tick size', tooltip='Choose how many ticks equal 10 pips. This can vary by broker so measure 10 pips on the chart and select how many ticks that equates to. Forex is typically 100. Some instruments such as indices can be 1000', options=[100,1000])

// Declare TP/SL variables
var float takeProfit = na
var float stopLoss = na

// Calculate take profit and stop loss levels in ticks
if tick10p == 100
    takeProfit := takeProfitPips * 10
    stopLoss := stopLossPips * 10
if tick10p == 1000
    takeProfit := takeProfitPips * 100
    stopLoss := stopLossPips * 100

// Declare offset time
var int offset = na

if currentTimestamp > timestamp('2023-10-29')
    offset := 4
else
    offset := 5

//adjust for exchange time
anchorHour := anchorHour - offset

// Define the anchor hour as user input with a range of 0 to 23
tradeHour = anchorHour

// Define logical check for strategy date range
isStratTime = true

// Calculate the time condition for placing the order at the user-defined hour (start of the next hour)
isTradeTime = true

// Logic condition for forwards or inverse
isForward = direction == 'Forward'
isInverse = direction == 'Inverse'

// Declare entry condition variables
var bool longCondition = na
var bool shortCondition = na

// Declare and initialize variables for anchorCandle open and close prices
var float anchorOpen = na
var float anchorClose = na
var float tradeOpen = na
var float tradeClose = na

// Set logic by direction

if isForward
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        longCondition := anchorClose > anchorOpen
        shortCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

if isInverse
    // Strategy logic
    if isTradeTime and isStratTime
        //Obtain candle open/close
        anchorOpen := open
        anchorClose := close
        // Define entry conditions
        shortCondition := anchorClose > anchorOpen
        longCondition := anchorClose < anchorOpen
        
        // Entry logic
        if longCondition
            strategy.entry("Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Long", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')
        if shortCondition
            strategy.entry("Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Short", profit=takeProfit, loss=stopLoss, comment_profit='TP', comment_loss='SL')

// Define the time range for the background shade
startHour = anchorHour
startMinute = 0
endHour = anchorHour
endMinute = 0

// Check if the current time is within the specified range
isInTimeRange = (hour == startHour and minute >= startMinute) or (hour == endHour and minute <= endMinute) or (hour > startHour and hour < endHour)

// Define the background color for the shade
backgroundColor = color.new(color.red, 90)

// Apply the background shade
bgcolor(isInTimeRange ? backgroundColor : na)



Mehr