
El sistema de negociación, llamado “Coin Dynamic Risk Adjusted Leverage Trading System”, está diseñado para administrar las operaciones en función de la fluctuación actual del mercado en relación con su promedio histórico. El sistema calcula el número de posiciones abiertas objetivo en función del indicador ATR (Average True Range) y ajusta el apalancamiento en consecuencia. El sistema adopta una forma de apertura de posición piramidal que permite abrir varias posiciones al mismo tiempo.
Los pasos del sistema son los siguientes:
Calcular el ATR de un ciclo de 14 días y estandarizarlo por el precio de cierre actual.
Calcula el promedio móvil simple de 100 días de la ATR estandarizada (SMA) [2].
Calcula el ratio entre el ATR estandarizado y su SMA de 100 días.
Determina el objetivo de la palanca en función de la inversión de la proporción ((2 / proporción)).
Calcula el número de posiciones objetivo multiplicado por 5 por el objetivo de la palanca.
Traza en un gráfico el número de posiciones abiertas objetivo y el número de posiciones abiertas en la actualidad.
Compruebe si hay una oportunidad de compra (si el número de posiciones abiertas actuales es menor que el número objetivo) o una oportunidad de posición baja (si el número de posiciones abiertas actuales es mayor que el número objetivo) más 1).
Si hay una oportunidad de compra, escriba más órdenes y agregue las transacciones a la matriz de openTrades.
Si hay una oportunidad de liquidación y hay transacciones en la matriz de openTrades, liquide las transacciones más recientes y eliminelas de la matriz.
El sistema está diseñado para capturar las tendencias del mercado mediante la adaptación dinámica de la cantidad de posiciones abiertas y el apalancamiento, y el uso de un seguimiento de las posiciones abiertas en una serie para un mejor control de la apertura de una sola transacción.
La estrategia tiene las siguientes ventajas:
Ajuste dinámico de la cantidad de la palanca y la posición, se puede ajustar el umbral de riesgo en función de los cambios en la volatilidad del mercado. Cuando la volatilidad es baja, aumentar la cantidad de la palanca y la posición, cuando la volatilidad es alta, reducir la cantidad de la palanca y la posición, para controlar eficazmente el riesgo.
El uso del indicador ATR para calcular el número de posiciones objetivo, que refleja la volatilidad del mercado, es una opción razonable para ajustar las posiciones dinámicamente.
El método de la pirámide de la subida de la posición, que abre varias posiciones al mismo tiempo, permite obtener ganancias en la tendencia.
El uso de una matriz para registrar cada operación de apertura de posición permite un control claro de la apertura de las operaciones individuales, evitando la aparición de operaciones inversas innecesarias.
La estrategia tiene pocos parámetros y es fácil de implementar y manejar.
La estrategia es clara y fácil de entender, la estructura del código es razonable, fácil de optimizar e iterar.
La estrategia también tiene sus riesgos:
Los indicadores ATR solo reflejan la volatilidad en el pasado, y los cambios en la volatilidad en el futuro no se pueden predecir, lo que puede provocar un ajuste inadecuado del apalancamiento.
El método de la pirámide puede acumular pérdidas cuando la tendencia se invierte.
El registro de arrays de apertura de posición solo se aplica a operaciones simples de apertura de posición, y si la lógica de apertura de posición es más compleja, se requiere una estructura de datos más compleja.
La configuración del objetivo de la palanca y el número de posiciones debe ajustarse a las características de la variedad y no debe limitarse a un parámetro fijo.
Un solo indicador puede ser engañoso y se puede considerar la inclusión de otros indicadores de volatilidad o algoritmos de aprendizaje automático para mejorar la estabilidad.
La estrategia puede ser optimizada en los siguientes aspectos:
Incrementar las estrategias de stop loss y activar el stop loss cuando las pérdidas alcanzan el punto de stop loss.
Optimizar los parámetros del indicador para probar el efecto de diferentes parámetros del ciclo ATR.
Pruebe diferentes estrategias de apertura de posiciones, como la apertura de una cantidad fija, para ver si funcionan.
Aumentar el uso combinado de otros indicadores para medir la volatilidad, como WIDTH, KD, RSI, etc.
El uso de métodos de aprendizaje automático para predecir la tasa de fluctuación, en lugar de métodos de suavización simple.
Para optimizar el cálculo de la cantidad de posiciones abiertas, se puede usar el multiplicador ATR o la función de fluctuación.
Registre más detalles de la apertura de la posición, como el precio de apertura, el tiempo, etc., para la optimización del análisis de la estrategia.
Se añade la función de optimización de parámetros para optimizar automáticamente la búsqueda de la combinación de parámetros óptima.
Esta estrategia se basa en el ATR de ajuste dinámico de la palanca y la cantidad de posiciones abiertas, en la tendencia de ajuste de la brecha de riesgo, tiene ciertas ventajas. Pero también hay problemas de configuración de parámetros de dificultad, espacio de optimización de indicadores y otros que merecen una optimización adicional. En general, la estrategia es clara, fácil de operar y fácil de optimizar, vale la pena profundizar en el estudio de la aplicación.
/*backtest
start: 2022-10-09 00:00:00
end: 2023-10-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("I11L - Risk Adjusted Leveraging", overlay=false, pyramiding=25, default_qty_value=20, initial_capital=20000, default_qty_type=strategy.percent_of_equity,process_orders_on_close=false, calc_on_every_tick=false)
atr = ta.atr(14) / close
avg_atr = ta.sma(atr,100)
ratio = atr / avg_atr
targetLeverage = 2 / ratio
targetOpentrades = 5 * targetLeverage
plot(targetOpentrades)
plot(strategy.opentrades)
isBuy = strategy.opentrades < targetOpentrades
isClose = strategy.opentrades > targetOpentrades + 1
var string[] openTrades = array.new_string(0)
if(isBuy)
strategy.entry("Buy"+str.tostring(array.size(openTrades)),strategy.long)
array.push(openTrades, "Buy" + str.tostring(array.size(openTrades)))
if(isClose)
if array.size(openTrades) > 0
strategy.close(array.get(openTrades, array.size(openTrades) - 1))
array.pop(openTrades)