Esta estrategia emplea un sistema dual de promedios móviles para identificar oportunidades potenciales de ruptura en acciones o criptomonedas seleccionadas. El principio básico es comprar cuando el promedio móvil a corto plazo rebota por debajo del promedio móvil a largo plazo y vender cuando los precios vuelven a probar el promedio móvil a largo plazo.
La estrategia utiliza dos promedios móviles simples (SMA) con diferentes períodos como señales comerciales. El primer SMA tiene un período más largo para representar la dirección general de la tendencia. El segundo SMA tiene un período más corto para capturar las fluctuaciones de precios a corto plazo.
Cuando la SMA a corto plazo cruza por encima de la SMA a largo plazo desde abajo, señala una tendencia alcista en los precios en general, por lo que la estrategia abre una posición larga.
Además, la estrategia tiene condiciones de "sobreventa" y "sobrecompra" para evitar la negociación en situaciones extremas.
Hay más margen para optimizar esta estrategia:
Esta estrategia combina los puntos fuertes de la tendencia de seguimiento y el comercio de retroceso utilizando un sistema de media móvil dual para detectar oportunidades. Al mismo tiempo, las condiciones de sobrecompra / sobreventa incrustadas evitan la apertura de posiciones innecesarias. Es una estrategia de comercio de cantidades muy práctica que merece una investigación y optimización más profundas.
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA') ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA') sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters") too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') // Calculations ma1 = ta.sma(close,ma_length1) ma2 = ta.sma(close,ma_length2) too_deep2 = (ma2/ma1-1) < too_deep too_thin2 = (ma2/ma1-1) > too_thin // Entry and close condtions var float buy_price = 0 buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2 close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1]) stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na close_condition2 = strategy.position_size > 0 and stop_distance > sl stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na // Entry and close orders if buy_condition strategy.entry('Long',strategy.long) if buy_condition[1] buy_price := open if close_condition1 or close_condition2 strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : "")) buy_price := na plot(ma1,color = color.blue) plot(ma2,color = color.orange)