Moving Average Crossover-Strategie

SMA MA
Erstellungsdatum: 2024-06-03 11:25:43 zuletzt geändert: 2024-06-03 11:25:43
Kopie: 0 Klicks: 643
1
konzentrieren Sie sich auf
1617
Anhänger

Moving Average Crossover-Strategie

Überblick

Dieser Artikel beschreibt eine quantitative Handelsstrategie, die auf dem Prinzip der Kreuzung von Moving Averages basiert. Die Strategie beurteilt die Hohlraumrichtung, indem sie die Beziehung zwischen dem Preis und dem Moving Average vergleicht und gleichzeitig den Stop-Loss-Punkt setzt, um das Risiko zu kontrollieren. Der Strategiecode wurde mit Pine Script geschrieben und integriert die API der Dhan-Handelsplattform, die den automatisierten Handel mit Strategiesignalen ermöglicht.

Strategieprinzip

Der Kern der Strategie ist der Moving Average, der durch Berechnung eines einfachen Moving Average des Schlusskurses innerhalb eines bestimmten Zeitraums als Grundlage für die Trendentscheidung verwendet wird. Wenn der Preis die Durchschnittslinie überschreitet, entstehen mehrere Signale, und wenn er untergeht, entsteht ein Fehlsignal. Gleichzeitig wird die Exrem-Funktion verwendet, um das fortlaufende Wiederholungssignal zu filtern und die Signalqualität zu verbessern.

Strategische Vorteile

Die Moving Average Crossover ist eine einfache und benutzerfreundliche Methode zur Trendverfolgung, die die mittelfristigen Trends des Marktes effektiv erfasst. Durch die vernünftige Einstellung der Parameter kann die Strategie einen stabilen Ertrag in einer Trendsituation erzielen. Die Einstellung von Stop-Loss-Systemen ist geeignet, Rücktritte zu kontrollieren und die Risikogewinnquote zu erhöhen.

Strategisches Risiko

Die Moving Average ist im Wesentlichen ein nachlassender Indikator, bei dem sich der Markt dreht, kann es zu einer Verzögerung des Signals kommen, was zu einem verfehlten optimalen Handelszeitpunkt führt oder falsche Signale erzeugt. Fehlgeleitete Parameter können die Strategie-Performance beeinflussen und müssen entsprechend den verschiedenen Markteigenschaften und -Perioden optimiert werden. Die festen Stop-Loss-Prozentsätze können sich möglicherweise nicht an Veränderungen der Marktvolatilität anpassen, und es besteht die Gefahr, dass fehlgeleitete Parameter zu Verlusten führen.

Richtung der Strategieoptimierung

  1. Versuchen Sie, die Signalzuverlässigkeit durch die Verwendung von mehreren unterschiedlichen Periodenzusammenhängen zu verbessern, wie z. B. Doppel- oder Drei-Linien-Kreuzungen.
  2. Die Einstellungen für Stop-Loss können weiter optimiert werden, z. B. durch dynamische Anpassung an die Volatilitätsindikatoren wie ATR oder durch die Verwendung von Stop-Loss-Strategien.
  3. Weitere Filterbedingungen können hinzugefügt werden, z. B. wenn der Preis wichtige Unterstützungswiderstände durchbricht oder sich das Handelsvolumen ändert, um die Signalqualität zu verbessern.
  4. In der Praxis sind strategische Rückprüfungen und Vermögensverwaltungen erforderlich, um das Risiko für einzelne Geschäfte und die Gesamtrücknahmen zu kontrollieren.

Zusammenfassen

Die Moving Average Crossover Strategie ist eine einfache, praktische, quantitative Handelsstrategie, die durch Trendverfolgung und Stop-Loss-Kontrolle in Trendsituationen profitiert. Die Strategie selbst hat jedoch bestimmte Grenzen, die aufgrund der Merkmale des Marktes und der Risikopräferenzen optimiert und verbessert werden müssen. In der praktischen Anwendung muss auch darauf geachtet werden, Disziplin und Risikokontrolle streng durchzuführen.

Strategiequellcode
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg)