
Esta estrategia utiliza un sistema de doble línea de paridad para buscar oportunidades potenciales de ruptura en una acción o moneda digital en particular. Su principio básico es comprar acciones o monedas digitales cuando la línea de paridad corta rebota por debajo de la línea de paridad larga.
La estrategia utiliza una media móvil simple (SMA) de dos períodos diferentes como señal de negociación. El primer ciclo SMA es más largo y representa la dirección de la tendencia general. El segundo ciclo SMA es más corto y se utiliza para capturar movimientos de precios a corto plazo.
Cuando el SMA corto se desprende del SMA largo por debajo, representa que el precio está en una tendencia ascendente en general, por lo que la estrategia abre una posición de más cabeza. Cuando el precio baja y se vuelve a probar el SMA largo, indica el final del pullback corto, en este momento la estrategia considera el stop loss o el beneficio para cerrar la posición.
Además, la estrategia también establece condiciones de sobreventa y sobreventa para evitar el comercio en situaciones extremas. La posición se abrirá solo si se cumplen al mismo tiempo las condiciones de doble cruce de línea y valoración razonable.
La estrategia tiene espacio para ser optimizada aún más:
Esta estrategia integra las ventajas del seguimiento de tendencias y el ajuste de operaciones, utilizando un sistema de doble línea para juzgar la aparición de oportunidades. Al mismo tiempo, la construcción de ciertas condiciones de sobrecompra y sobreventa evita la apertura de posiciones innecesarias. Esta es una estrategia de comercio cuantitativa muy práctica que vale la pena investigar y optimizar.
/*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)