Dieser Artikel stellt eine Trendhandelsstrategie vor, die auf mehreren gleitenden Durchschnitten basiert, die als
Die Strategie verwendet drei einfache gleitende Durchschnitte (SMAs): langfristige (Default 200 Perioden), mittelfristige (Default 21 Perioden) und kurzfristige (Default 9 Perioden). Ein Kaufsignal wird ausgelöst, wenn der Preis über den langfristigen und mittelfristigen gleitenden Durchschnitten liegt und den kurzfristigen gleitenden Durchschnitt überschreitet, vorausgesetzt, es gibt keine offenen Positionen. Die Strategie legt auch festgelegte Stop-Gain- und Stop-Loss-Niveaus fest, um das Risiko zu managen. Zusätzlich werden alle Positionen jeden Handelstag um 17:00 Uhr geschlossen.
Berechnen Sie die einfachen gleitenden Durchschnitte für die langfristigen (Standard 200-Perioden), mittelfristigen (Standard 21-Perioden) und kurzfristigen (Standard 9-Perioden).
Bestimmen Sie, ob der aktuelle Preis über den langfristigen und mittelfristigen gleitenden Durchschnitten liegt.
Überprüfen Sie, ob der aktuelle Kurs über dem kurzfristigen gleitenden Durchschnitt liegt.
Wenn die Bedingungen 2 und 3 erfüllt sind und keine offenen Positionen vorliegen, wird ein Kaufsignal ausgelöst.
Nach dem Kauf legen Sie festgelegte Stop-Gain- und Stop-Loss-Levels fest und schließen die Position, wenn der Preis eine der beiden Ebenen erreicht.
Alle Positionen werden jeden Handelstag um 17:00 Uhr geschlossen.
Einfach und leicht verständlich: Die Strategie basiert auf gleitenden Durchschnitten, sodass sie leicht zu verstehen und umzusetzen ist.
Trendverfolgung: Durch die Analyse der Preisposition im Verhältnis zu gleitenden Durchschnitten verschiedener Zeiträume erfasst die Strategie effektiv aufsteigende Markttrends.
Risikokontrolle: Die Strategie beinhaltet festgelegte Stop-Gain- und Stop-Loss-Level, die dazu beitragen, das Risiko für einzelne Trades zu steuern.
Automatisches Positionsschließen: Die Strategie schließt automatisch alle Positionen zu einer bestimmten Zeit an jedem Handelstag und vermeidet somit Übernachtungsrisiken.
Parameteroptimierung: Die Performance der Strategie kann auf die Periodenparameter des gleitenden Durchschnitts anfällig sein und erfordert eine Optimierung für verschiedene Märkte und Instrumente.
Unruhige Märkte: In unruhigen Marktbedingungen können häufige Crossover-Signale zu einer suboptimalen Strategieleistung führen.
Slipper-Risiko: Bei hoher Marktvolatilität können festgelegte Stop-Gain- und Stop-Loss-Level möglicherweise nicht wie beabsichtigt ausgeführt werden, was zu einem Slipper-Risiko führt.
Dynamische Stop-Gain und Stop-Loss: Die Stop-Gain- und Stop-Loss-Level werden dynamisch anhand der Marktvolatilität oder der Preisentwicklung angepasst, um das Risiko-Rendite-Verhältnis zu optimieren.
Trendfilter: Zusätzliche technische Indikatoren, wie z. B. den ADX, werden eingesetzt, um die Trendstärke zu bestätigen und falsche Signale in unruhigen Märkten zu filtern.
Anpassung an verschiedene Instrumente: Strategie zur Anpassung an verschiedene Futures-Instrumente und Marktmerkmale verfeinern.
Geldverwaltung: Um die Robustheit der Strategie zu erhöhen, müssen anspruchsvollere Geldverwaltungsregeln wie Positionsgröße und Risikokontrolle eingeführt werden.
Die
/*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()