Esta estrategia rastrea la tendencia de precios de las criptomonedas estableciendo precios altos y bajos de ruptura.
Esta estrategia utiliza principalmente el método de promedio móvil ponderado para determinar si hay una tendencia obvia al alza o a la baja. Específicamente, registrará los precios más altos y más bajos durante un cierto período. Cuando el precio de negociación real excede el precio más alto registrado, se juzga que se ha producido una tendencia al alza, y será larga. Cuando el precio de negociación real es menor que el precio más bajo registrado, se juzga que se ha producido una tendencia a la baja, y será corta.
Los precios de apertura para largo y corto se establecen a través del parámetro de entrada
En concreto, la lógica principal de la estrategia es la siguiente:
A través de este bucle lógico, puede capturar las tendencias al alza y a la baja del precio y lograr el seguimiento de la tendencia.
La mayor ventaja de esta estrategia es que al ajustar los parámetros, puede capturar automáticamente las tendencias de precios sin la necesidad de juzgar manualmente la dirección de la tendencia.
Además, esta estrategia es muy adecuada para la negociación cuantitativa y puede lograr fácilmente la colocación de pedidos automatizados.
Finalmente, esta estrategia también puede maximizar los retornos ajustando los parámetros.
El mayor riesgo de esta estrategia es que la configuración inadecuada de los parámetros puede conducir a una negociación excesivamente frecuente, aumentando las tarifas de negociación y las pérdidas por deslizamiento.
Además, el ajuste inadecuado de los parámetros también puede conducir a la falta de captura de las tendencias de precios a tiempo, perdiendo oportunidades comerciales.
Por último, esta estrategia es demasiado sensible al ruido del mercado a corto plazo, que puede generar señales comerciales erróneas.
Los siguientes aspectos pueden optimizarse aún más para esta estrategia:
Esto permite detener la pérdida cuando las pérdidas exceden un cierto porcentaje para evitar pérdidas mayores.
Añadir filtros de indicadores técnicos como promedio móvil, KDJ para juzgar la tendencia general para evitar demasiada negociación debido al ruido a corto plazo.
Optimizar la lógica de configuración de parámetros. El mecanismo de cambio adaptativo se puede configurar para los parámetros ENTRY y EXIT en lugar de la configuración estática para que puedan ajustarse en función de las condiciones del mercado.
Utilice el aprendizaje automático para entrenar parámetros óptimos. Obtenga los ajustes óptimos de ENTRY y EXIT para el entorno actual del mercado a través de un entrenamiento masivo de datos históricos.
La mayor ventaja de esta estrategia es que mediante la captura de las tendencias de precios se consigue la negociación automatizada, que puede reducir el impacto de las emociones humanas en el comercio, reducir los riesgos y mejorar la eficiencia.
Los principales riesgos de la estrategia son la configuración inadecuada de los parámetros y la sensibilidad excesiva al ruido del mercado.
En general, esta es una tendencia simple y efectiva después de la estrategia adecuada para el comercio cuantitativo y automatizado.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JstMtlQC //@version=4 strategy("Trend Following Breakout",calc_on_order_fills=true,calc_on_every_tick =false, overlay=true, initial_capital=2000,commission_value=.1,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) /////////////// INPUT ENTRY EXIT entry= input(100, "ENTRY H/L") exit= input(50, "EXIT H/L") /////////////// Backtest Input FromYear = input(2015, "Backtest Start Year") FromMonth = input(1, "Backtest Start Month") FromDay = input(1, "Backtest Start Day") ToYear = input(2999, "Backtest End Year") ToMonth = input(1, "Backtest End Month") ToDay = input(1, "Backtest End Day") /////////////// Backtest Setting start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false /////////////// BUY OPEN PLOT highestpricelong = highest(high,entry)[1] plot(highestpricelong, color=color.green, linewidth=2) /////////////// BUY CLOSE PLOT lowestpricelong = lowest(high,exit)[1] plot(lowestpricelong, color=color.green, linewidth=2) /////////////// SHORT OPEN PLOT lowestpriceshort = lowest(low,entry)[1] plot(lowestpriceshort, color=color.red, linewidth=2) /////////////// SHORT CLOSE PLOT highestpriceshort = highest(low,exit)[1] plot(highestpriceshort, color=color.red, linewidth=2) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// CONDITION LONG SHORT ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// SHORT entryshort= crossunder(close, lowestpriceshort) exitshort= crossover(close,highestpriceshort) /////////////// LONG exitlong= crossover(close, lowestpricelong) entrylong= crossover(close,highestpricelong) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// LONG and SHORT ORDER ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// LONG if (entrylong) strategy.entry("LongEntry", strategy.long, when = window()) if (exitlong or entryshort) strategy.close("LongEntry", when=window()) /////////////// SHORT if (entryshort) strategy.entry("short", strategy.short, when = window()) if (exitshort or entrylong) strategy.close("short", when=window())