Esta estrategia observa la acción de los precios alrededor de las EMA triples para determinar las tendencias y las rupturas de las operaciones después de los retrocesos.
Estrategia lógica:
Establecer EMA rápidas, medianas y lentas, por lo general 25, 100, 200 períodos.
El precio que alcanza la EMA más rápida durante el retroceso al alza / bajada indica un alcista / bajista interino.
Entra largo en el rebote hacia arriba cuando el precio se rompe por encima de la EMA más rápida. Entra corto en el rebote hacia abajo cuando el precio se rompe por debajo de la EMA más rápida.
Zonas de compra/venta con código de color para la intuición visual.
Se utilizarán el stop loss fijo y la relación riesgo/beneficio para la gestión del riesgo.
Ventajas:
El comercio de retroceso disfruta de una mayor tasa de ganancias.
Los EMAs triplos discernen las tendencias y evitan los golpes.
La relación riesgo/beneficio mejora la sostenibilidad del rendimiento.
Riesgos:
Los retiros prolongados pueden perder el mejor momento de entrada.
El ajuste de la EMA necesitaba coincidir con diferentes períodos.
Las paradas fijas pueden ser demasiado mecánicas y necesitan calibración.
En resumen, esta estrategia negocia breakouts de retroceso utilizando EMA triples para rastrear tendencias más amplias.
/*backtest start: 2023-09-04 00:00:00 end: 2023-09-11 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Pullback", overlay=true, initial_capital=1000, slippage=25) averageData = input.source(close, title="Source") target_stop_ratio = input.float(title="Ratio Risk/Reward", defval=2, group="Money Management") security = input.float(50, title='min of pips (00001.00) for each position', group="Money Management") risk = input.float(2, title="Risk per Trade %", group="Money Management") riskt = risk / 100 + 1 ema1V = input.int(25, title="Rapide", group="Ema Period") ema2V = input.int(100, title="Moyenne", group="Ema Period") ema3V = input.int(200, title="Lente", group="Ema Period") ema1 = ta.ema(averageData, ema1V) ema2 = ta.ema(averageData, ema2V) ema3 = ta.ema(averageData, ema3V) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true float pricePullAboveEMA_maxClose = na float pricePullBelowEMA_minClose = na if ta.crossover(close, ema1) pricePullAboveEMA_maxClose := close else pricePullAboveEMA_maxClose := pricePullAboveEMA_maxClose[1] if close > pricePullAboveEMA_maxClose pricePullAboveEMA_maxClose := close if ta.crossunder(close, ema1) pricePullBelowEMA_minClose := close else pricePullBelowEMA_minClose := pricePullBelowEMA_minClose[1] if close < pricePullBelowEMA_minClose pricePullBelowEMA_minClose := close BuyZone = ema1 > ema2 and ema2 > ema3 SellZone = ema1 < ema2 and ema2 < ema3 longcondition = ta.crossover(close, ema1) and pricePullBelowEMA_minClose > ema3 and pricePullBelowEMA_minClose < ema1 shortcondition = ta.crossunder(close , ema1) and pricePullAboveEMA_maxClose < ema3 and pricePullAboveEMA_maxClose > ema1 float risk_long = na float risk_short = na float stopLoss = na float takeProfit = na float entry_price = na risk_long := risk_long[1] risk_short := risk_short[1] lotB = (strategy.equity*riskt-strategy.equity)/(close - ema2) lotS = (strategy.equity*riskt-strategy.equity)/(ema2 - close) if strategy.position_size == 0 and BuyZone and longcondition and inTradeWindow risk_long := (close - ema2) / close minp = close - ema2 if minp > security strategy.entry("long", strategy.long, qty=lotB) if strategy.position_size == 0 and SellZone and shortcondition and inTradeWindow risk_short := (ema2 - close) / close minp = ema2 - close if minp > security strategy.entry("short", strategy.short, qty=lotS) if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit) plot(ema1, color=color.blue, linewidth=2, title="Ema Rapide") plot(ema2, color=color.orange, linewidth=2, title="Ema Moyenne") plot(ema3, color=color.white, linewidth=2, title="Ema Lente") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit') fill(p_sl, p_ep, color.new(color.red, transp=85)) fill(p_tp, p_ep, color.new(color.green, transp=85)) bgcolor(BuyZone ? color.new(color.green, 95) : na) bgcolor(SellZone ? color.new(color.red, 95) : na)