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