
Dieser Artikel beschreibt eine Trend-Trading-Strategie, die auf mehreren Moving Averages basiert. Diese Strategie wird hauptsächlich auf den NASDAQ-Futures-Markt angewendet, um die steigenden Trends des Marktes zu erfassen, indem sie die Position des Preises gegenüber den langen, mittleren und kurzfristigen Moving Averages analysiert und alle Positionen zu einem bestimmten Zeitpunkt stilllegt.
Die Strategie verwendet drei einfache Moving Averages (SMA): langfristig (default 200-Zyklen), mittelfristig (default 21-Zyklen) und kurzfristig (default 9-Zyklen). Die Strategie löst ein Kaufsignal aus, wenn die Preise über den langfristigen und mittelfristigen Durchschnittslinien liegen und eine Kreuzung auf der kurzfristigen Durchschnittslinie auftritt. Die Strategie setzt außerdem eine feste Anzahl von Stopps und Stop-Losses ein, um das Risiko zu kontrollieren.
Berechnen Sie einfache gleitende Durchschnitte für die langfristige (Standard 200 Zyklen), die mittlere (Standard 21 Zyklen) und die kurzfristige (Standard 9 Zyklen).
Beurteilen Sie, ob der aktuelle Preis höher ist als der langfristige und der mittelfristige Durchschnittswert.
Beurteilen Sie, ob der aktuelle Preis über dem kurzfristigen Durchschnitt liegt.
Wenn die Bedingungen 2 und 3 gleichzeitig erfüllt sind und keine Position vorhanden ist, wird ein Kaufsignal ausgelöst.
Nach dem Kauf setzt man eine Stop-Loss-Liste mit festen Punkten ein und platziert die Position, wenn der Preis die Stop-Loss-Liste erreicht.
Alle Positionen werden um 17:00 Uhr an jedem Handelstag platziert.
Einfach und leicht zu verstehen: Die Strategie basiert auf einem Moving Average, die Prinzipien sind einfach und leicht zu verstehen und umzusetzen.
Trend-Tracking: Die Strategie kann die Aufwärtsentwicklung des Marktes effektiv erfassen, indem sie analysiert, wo sich die Preise gegenüber den verschiedenen periodischen Durchschnittslinien befinden.
Risikokontrolle: Die Strategie setzt Stop-and-Loss-Systeme mit festen Punkten ein, um das Risiko eines einzelnen Handels zu kontrollieren.
Automatische Pause: Die Strategie wird automatisch zu einem bestimmten Zeitpunkt an jedem Handelstag platziert, um das Übernachtungsrisiko zu vermeiden.
Parameteroptimierung: Die Strategie kann mit Parametern für die Durchschnittszyklus sensibel sein und muss für verschiedene Märkte und Sorten optimiert werden.
In einem bewegten Marktumfeld können häufige Kreuzungen zu einer schlechten Strategie führen.
Slippage-Risiko: Bei starken Marktschwankungen können Stop-Ops und Stop-Losses mit festen Punkten nicht wie erwartet ausgeführt werden, was zu einem Slippage-Risiko führt.
Dynamische Stop-Loss-Punkte: Die Stop-Loss-Punkte werden dynamisch angepasst, um die Risiko-Gewinn-Relation zu optimieren, je nach Marktvolatilität oder Preisentwicklung.
Trendfilter: Die Einführung von anderen technischen Indikatoren wie ADX, um die Stärke des Trends zu bestätigen, um falsche Signale in den Schaukelmärkten zu filtern
Anpassung an verschiedene Futures: Strategieverbesserungen, um sich an verschiedene Futures und Markteigenschaften anzupassen
Geldmanagement: Einführung von komplexeren Geldmanagementregeln wie Positionsmanagement und Risikokontrolle, um die Stabilität der Strategie zu verbessern.
Die Strategie setzt eine feste Anzahl von Stop-Loss-Punkten ein und schließt automatisch Positionen zu bestimmten Zeiten pro Tag, um das Risiko zu kontrollieren. Die Strategie kann jedoch in einem wackligen Markt schlecht abschneiden und sich mit Problemen wie Parameteroptimierung und Slippage-Risiko konfrontiert sehen. Die Stärke und Anpassungsfähigkeit der Strategie kann durch die Einführung von dynamischen Stop-Loss-Punkten, Trendfiltern, Multivariate-Adaption und Optimierung der Kapitalverwaltung weiter verbessert werden.
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Médias Móveis de MarcosJR", overlay=true)
// Inputs para data inicial e final
start_year = input.int(2020, title="Ano Inicial")
start_month = input.int(1, title="Mês Inicial")
start_day = input.int(1, title="Dia Inicial")
end_year = input.int(2020, title="Ano Final")
end_month = input.int(12, title="Mês Final")
end_day = input.int(31, title="Dia Final")
// Convertendo dia, mês e ano para timestamp
start_date = timestamp(start_year, start_month, start_day, 00, 00)
end_date = timestamp(end_year, end_month, end_day, 23, 59)
// Condição para verificar se a data está dentro do intervalo especificado
date_within_range = true
// Parâmetros para os períodos das médias móveis
ma_short_period = input.int(9, title="MA Curta")
ma_medium_period = input.int(21, title="MA Média")
ma_long_period = input.int(200, title="MA Longa")
// Definindo médias móveis
ma_short = ta.sma(close, ma_short_period)
ma_medium = ta.sma(close, ma_medium_period)
ma_long = ta.sma(close, ma_long_period)
// Plotando as médias móveis no gráfico com espessura aumentada
plot(ma_short, color=color.blue, title="MA Curta", linewidth=2)
plot(ma_medium, color=color.orange, title="MA Média", linewidth=2)
plot(ma_long, color=color.red, title="MA Longa", linewidth=2)
// Verificando se o preço está acima das médias móveis
above_ma_long = close > ma_long
above_ma_medium = close > ma_medium
// Verificando se o preço tocou na média móvel curta
touch_ma_short = ta.crossover(close, ma_short)
// Condições de compra
buy_condition = date_within_range and above_ma_long and above_ma_medium and touch_ma_short
// Sinais de entrada e saída de compra
var float entry_price = na
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
entry_price := close // Define o preço de entrada ao comprar
// Parâmetros para o tamanho do stop gain e stop loss em pontos
stop_gain_points = input.int(100, title="Stop Gain (pontos)", minval=1)
stop_loss_points = input.int(100, title="Stop Loss (pontos)", minval=1)
// Calcular o preço de saída alvo (Stop Gain) e de stop loss
target_price = entry_price + stop_gain_points * syminfo.mintick
stop_loss_price = entry_price - stop_loss_points * syminfo.mintick
// Sair da operação de compra quando o preço atingir o stop gain ou stop loss
if (strategy.position_size > 0)
strategy.exit("Venda", "Compra", limit=target_price, stop=stop_loss_price)
// Sinais de entrada de compra
if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento
strategy.entry("Compra", strategy.long)
// Plotando setas de compra
plotshape(series=buy_condition, title="Sinal de Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
// Função para verificar se é 17:00 do mesmo dia
is_17_oclock_same_day = hour == 17 and minute == 0 and hour[1] < 17
// Sair de todas as operações às 17:00 do mesmo dia
if (is_17_oclock_same_day)
strategy.close_all()