En la carga de los recursos... Cargando...

Estrategia de parada de seguimiento inteligente basada en SMA con reconocimiento de patrones intradiarios

El autor:¿ Qué pasa?, Fecha: 2025-01-17 16:04:09
Las etiquetas:La SMASe trata de la MA18El ATR

 SMA-Based Intelligent Trailing Stop Strategy with Intraday Pattern Recognition

Resumen general

Esta es una estrategia basada en el promedio móvil simple de 18 días (SMA18), que combina el reconocimiento de patrones intradiarios y mecanismos inteligentes de parada de seguimiento. La estrategia observa principalmente la relación de precios con SMA18, junto con posiciones altas y bajas intradiarias, para ejecutar entradas largas en momentos óptimos. Emplea un enfoque flexible de stop-loss, que ofrece puntos fijos de stop-loss y una opción de parada de seguimiento de dos días.

Principios de estrategia

La lógica central incluye varios elementos clave: Condiciones de entrada basadas en la posición de precios en relación con la media móvil de 18 días, con opciones para entradas de ruptura o por encima de la línea Análisis de los patrones de velas intradiarios, centrándose particularmente en los patrones de Inside Bar para mejorar la precisión de la entrada 3. Comercio selectivo basado en las características del día de la semana 4. Fijación del precio de entrada mediante órdenes límite con un pequeño desplazamiento al alza de los mínimos para mejorar la probabilidad de llenado Mecanismos de doble stop-loss: paradas fijas basadas en el precio de entrada o paradas de seguimiento basadas en mínimos de dos días

Ventajas estratégicas

  1. Combina indicadores técnicos y patrones de precios para señales de entrada más fiables
  2. Mecanismo de selección flexible de los plazos de negociación para la optimización específica del mercado
  3. Sistema inteligente de stop-loss que protege las ganancias y permite un movimiento adecuado de los precios
  4. Parámetros muy ajustables para diferentes entornos de mercado
  5. Reducción efectiva de la señal falsa mediante el filtrado de patrones de la barra interna

Riesgos estratégicos

  1. Las paradas fijas pueden provocar salidas anticipadas en mercados volátiles
  2. Las paradas de seguimiento podrían bloquear ganancias mínimas durante las inversiones rápidas
  3. Las barras internas frecuentes durante la consolidación pueden conducir a un exceso de negociación Medidas de mitigación:
  • Ajuste dinámico del stop-loss basado en la volatilidad del mercado
  • Adición de indicadores de confirmación de tendencia
  • Aplicación de objetivos mínimos de utilidad para filtrar operaciones de baja calidad

Direcciones de optimización

  1. Incorporar indicadores de volatilidad (como ATR) para el ajuste dinámico de pérdidas de parada
  2. Añadir dimensión de análisis de volumen para mejorar la fiabilidad de la señal
  3. Desarrollar algoritmos de selección de fechas más inteligentes basados en el rendimiento histórico
  4. Implementar filtros de fuerza de tendencia para evitar el comercio en tendencias débiles
  5. Mejorar los algoritmos de reconocimiento de la barra interior para una mejor identificación de patrones

Resumen de las actividades

Esta estrategia construye un sistema de negociación integral mediante la combinación de múltiples dimensiones analíticas. Sus principales fortalezas se encuentran en la flexibilidad de los parámetros y los mecanismos inteligentes de stop-loss, lo que permite la adaptación a diversos entornos de mercado. A través de la optimización y mejora continua, la estrategia muestra promesa para mantener un rendimiento estable en diferentes condiciones de mercado.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')




Relacionados

Más.