Esta estrategia es un sistema de negociación de red dinámica basado en el indicador TTM, que determina la dirección de la tendencia del mercado mediante el cálculo de promedios móviles exponenciales (EMA) de máximos y mínimos, y implementa un sistema de negociación de red en torno a un precio base dinámicamente actualizado.
La lógica central radica en el cálculo del estado de TTM, implementado a través de los siguientes pasos: 1. Calcular dos EMAs basados en el parámetro ttmPeriod: EMA de mínimos (lowMA) y máximos (highMA) 2. Definir dos niveles de umbral entre el alto y bajo MA: - Bajo Tercero:1⁄3posición desde abajo - Tercero:2⁄3posición desde abajo 3. Determinar el estado del TTM basado en la posición de precio de cierre en relación con estos umbrales: - Devuelve 1 (tendencia alcista) cuando el cierre está por encima del máximoThird - Retorna 0 (tendencia bajista) cuando el cierre está por debajo de la bajaThird - Devuelve -1 (estado neutro) cuando close está entre lowThird y highThird
El sistema de negociación de la red se ajusta dinámicamente en función del estado TTM: 1. Actualiza el precio base de la red y la dirección cuando cambia el estado de TTM 2. Calcula los niveles de precios de compra/venta basados en la dirección de la red y el espaciamiento 3. Ejecuta las operaciones de compra o venta correspondientes cuando el precio rompe los niveles de la red
Esta estrategia combina la detección de tendencias TTM con el comercio dinámico de la red para crear un sistema de comercio adaptativo y controlado por el riesgo. A través del ajuste dinámico de la dirección de la red y los niveles de precios, la estrategia puede adaptarse eficazmente a diferentes entornos de mercado.
/*backtest start: 2024-12-04 00:00:00 end: 2024-12-11 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("TTM Grid Strategy", overlay=true) // Input parameters int ttmPeriod = input.int(6, minval=1, title="TTM Period") int gridLevels = input.int(5, minval=2, title="Grid Levels") float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)") // Calculate TTM State ttmState() => lowMA = ta.ema(low, ttmPeriod) highMA = ta.ema(high, ttmPeriod) lowThird = (highMA - lowMA) / 3 + lowMA highThird = 2 * (highMA - lowMA) / 3 + lowMA if close > highThird 1 else if close < lowThird 0 else -1 // State tracking variables var float gridBasePrice = 0.0 var int gridDirection = -1 // Determine grid state updateGridState(float currentClose, int currentState) => float newBasePrice = gridBasePrice int newDirection = gridDirection if currentState != -1 and currentState != gridDirection newBasePrice := currentClose newDirection := currentState [newBasePrice, newDirection] // Calculate grid levels calcGridLevels(float basePrice, int direction, int levels) => float[] buyLevels = array.new_float(levels) float[] sellLevels = array.new_float(levels) for i = 1 to levels multiplier = i * gridSpacing if direction == 1 // Buy grid array.set(buyLevels, i-1, basePrice * (1 - multiplier)) array.set(sellLevels, i-1, basePrice * (1 + multiplier)) else // Sell grid array.set(buyLevels, i-1, basePrice * (1 + multiplier)) array.set(sellLevels, i-1, basePrice * (1 - multiplier)) [buyLevels, sellLevels] // Execute grid trades executeGridTrades(float basePrice, int direction, int levels) => [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels) for i = 0 to levels - 1 float buyLevel = array.get(buyLevels, i) float sellLevel = array.get(sellLevels, i) if direction == 1 // Buy grid if low <= buyLevel strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i)) if high >= sellLevel strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i)) else // Sell grid if high >= buyLevel strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i)) if low <= sellLevel strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i)) // Main strategy logic currentState = ttmState() [newGridBasePrice, newGridDirection] = updateGridState(close, currentState) // Update global variables if newGridBasePrice != gridBasePrice gridBasePrice := newGridBasePrice if newGridDirection != gridDirection gridDirection := newGridDirection // Execute grid trades executeGridTrades(newGridBasePrice, newGridDirection, gridLevels) // Visualization plotColor = newGridDirection == 1 ? color.green : color.red plot(newGridBasePrice, color=plotColor, style=plot.style_cross)