Esta estratégia é um sistema de negociação baseado na média móvel exponencial de 5 dias (EMA), que analisa a relação entre o preço e a EMA para capturar as tendências do mercado.
A lógica central é baseada na interação entre o preço e a EMA de 5 dias para determinar os pontos de entrada. Especificamente, um sinal longo é gerado quando o máximo do período anterior está abaixo da EMA e o período atual mostra um avanço. A estratégia também inclui uma condição adicional opcional que exige que o preço de fechamento seja maior do que o período anterior para aumentar a confiabilidade do sinal. Para o controle de risco, a estratégia oferece dois tipos de métodos de stop-loss: stop-loss dinâmico baseado em mínimos anteriores e stop-loss de ponto fixo. Os objetivos de lucro são definidos dinamicamente com base na relação risco-recompensa potencial para garantir lucro comercial.
Esta é uma estratégia de tendência bem projetada com lógica clara, capturando efetivamente as tendências do mercado através da combinação do indicador EMA e ação de preços. A estratégia tem mecanismos abrangentes para controle de risco e gerenciamento de lucros, oferecendo múltiplas direções de otimização, demonstrando forte valor prático e espaço para melhoria. Melhorias futuras podem se concentrar na adição de análise de vários prazos e no ajuste de mecanismos de stop-loss para melhorar ainda mais a estabilidade e a lucratividade da estratégia.
/*backtest start: 2024-12-29 00:00:00 end: 2025-01-05 00:00:00 period: 30m basePeriod: 30m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Demo GPT - PowerOfStocks 5EMA", overlay=true) // Inputs enableSL = input.bool(false, title="Enable Extra SL") usl = input.int(defval=5, title="SL Distance in Points", minval=1, maxval=100) riskRewardRatio = input.int(defval=3, title="Risk to Reward Ratio", minval=3, maxval=25) showSell = input.bool(true, title="Show Sell Signals") showBuy = input.bool(true, title="Show Buy Signals") buySellExtraCond = input.bool(false, title="Buy/Sell with Extra Condition") startDate = input(timestamp("2018-01-01 00:00"), title="Start Date") endDate = input(timestamp("2069-12-31 23:59"), title="End Date") // EMA Calculation ema5 = ta.ema(close, 5) // Plot EMA plot(ema5, "EMA 5", color=color.new(#882626, 0), linewidth=2) // Variables for Buy var bool longTriggered = na var float longStopLoss = na var float longTarget = na // Variables for Sell (used for signal visualization but no actual short trades) var bool shortTriggered = na var float shortStopLoss = na var float shortTarget = na // Long Entry Logic if true if (showBuy) longCondition = high[1] < ema5[1] and high[1] < high and (not buySellExtraCond or close > close[1]) if (longCondition and not longTriggered) entryPrice = high[1] stopLoss = enableSL ? low[1] - usl * syminfo.mintick : low[1] target = enableSL ? entryPrice + (entryPrice - stopLoss) * riskRewardRatio : high[1] + (high[1] - low[1]) * riskRewardRatio // Execute Buy Order strategy.entry("Buy", strategy.long, stop=entryPrice) longTriggered := true longStopLoss := stopLoss longTarget := target label.new(bar_index, entryPrice, text="Buy@ " + str.tostring(entryPrice), style=label.style_label_up, color=color.green, textcolor=color.white) // Short Signal Logic (Visual Only) if (true) if (showSell) shortCondition = low[1] > ema5[1] and low[1] > low and (not buySellExtraCond or close < close[1]) if (shortCondition and not shortTriggered) entryPrice = low[1] stopLoss = enableSL ? high[1] + usl * syminfo.mintick : high[1] target = enableSL ? entryPrice - (stopLoss - entryPrice) * riskRewardRatio : low[1] - (high[1] - low[1]) * riskRewardRatio // Visual Signals Only label.new(bar_index, entryPrice, text="Sell@ " + str.tostring(entryPrice), style=label.style_label_down, color=color.red, textcolor=color.white) shortTriggered := true shortStopLoss := stopLoss shortTarget := target // Exit Logic for Buy if longTriggered // Stop-loss Hit if low <= longStopLoss strategy.close("Buy", comment="SL Hit") longTriggered := false // Target Hit if high >= longTarget strategy.close("Buy", comment="Target Hit") longTriggered := false // Exit Logic for Short (Signals Only) if shortTriggered // Stop-loss Hit if high >= shortStopLoss shortTriggered := false // Target Hit if low <= shortTarget shortTriggered := false