
Esta estrategia es un sistema de trading de seguimiento de tendencias basado en la media móvil exponencial (EMA) de 5 días. Analiza la relación posicional entre el precio y la EMA y combina el ajuste dinámico de los objetivos de stop loss y de ganancias para captar la tendencia del mercado. La estrategia adopta un método de gestión de posiciones porcentuales y tiene en cuenta factores de costos de transacción, lo que la hace altamente práctica y flexible.
La lógica central de la estrategia es determinar el momento de entrada en función de la interacción entre el precio y la EMA de 5 días. En concreto, cuando el precio más alto del periodo actual es inferior a la EMA y se produce una ruptura en el periodo actual, el sistema emitirá una señal de compra. Al mismo tiempo, la estrategia también incluye una condición adicional opcional que requiere que el precio de cierre sea mayor que el del período anterior para aumentar la confiabilidad de la señal. Para el control del riesgo, la estrategia proporciona dos métodos de stop-loss: stop-loss dinámico basado en mínimos anteriores y stop-loss basado en puntos fijos. Los objetivos de beneficio se establecen de forma dinámica en función de la relación riesgo-rendimiento, lo que garantiza el potencial de beneficio de la transacción.
Esta es una estrategia de seguimiento de tendencias bien diseñada y lógica que puede capturar eficazmente las tendencias del mercado a través de la combinación de indicadores EMA y comportamiento de precios. La estrategia cuenta con mecanismos relativamente completos de control de riesgos y gestión de rentabilidad, y ofrece múltiples direcciones para la optimización, con un fuerte valor práctico y margen de mejora. Posteriormente, se puede mejorar aún más la estabilidad y rentabilidad de la estrategia añadiendo análisis multiperiodo, ajustando el mecanismo de stop-loss, etc.
/*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