Estrategia de negociación en red de posiciones dinámicas de larga martingale basada en la red

El autor:¿ Qué pasa?, Fecha: 2024-03-22 15:12:33
Las etiquetas:

img

Resumen de la estrategia

Esta estrategia es una estrategia de negociación de posiciones dinámicas de Martingale basada en la red. La idea principal es ajustar dinámicamente el tamaño de la posición en función del número de posiciones existentes cuando el precio alcanza las líneas de la red, mientras se establece un número máximo total de posiciones abiertas. Cuando el precio aumenta y alcanza el nivel de toma de ganancias, todas las posiciones largas se cierran.

Principios de estrategia

  1. Dividir el precio en cuadrículas espaciadas uniformemente basadas en el parámetro Tamaño de la cuadrícula.
  2. Coloque órdenes de límite largo en cada línea de la red.
  3. Cuando el precio actual alcanza una línea de red:
    • Si el número actual de posiciones abiertas es 0, abrir una posición con el tamaño start_lot.
    • Si el número actual de posiciones abiertas es superior a 0 y el precio de la red actual es inferior al precio de entrada anterior, abrir una nueva posición larga al precio de la red actual con un tamaño que sea multifactorio multiplicado por el tamaño de la posición anterior.
  4. El número máximo de posiciones abiertas está controlado por el parámetro Max Open Orders.
  5. Después de abrir una posición, fije un nivel de toma de ganancias en TakeProfit puntos por encima del precio de entrada promedio.
  6. Cuando el precio actual alcance el nivel de toma de ganancias, cierre todas las posiciones largas y restablezca los parámetros.

De esta manera, el tamaño de la posición aumenta gradualmente durante las tendencias bajistas, y se obtienen ganancias cuando el precio se recupera y alcanza el nivel de ganancia.

Ventajas estratégicas

  1. Tamaño dinámico de la posición: ajusta dinámicamente el tamaño de la posición para cada entrada en función del número actual de posiciones abiertas.
  2. Parámetros flexibles: el Tamaño de la red, start_lot, multifactor y otros parámetros permiten un control flexible sobre el tamaño de la red, el tamaño de la posición inicial, el factor de escalado de la posición, etc.
  3. Riesgo controlable: el parámetro Max Open Orders controla el número máximo de posiciones abiertas para evitar la sobreexposición.

Riesgos estratégicos

  1. Sin stop loss: la estrategia no tiene stop losses. Si el precio continúa bajando, puede enfrentar riesgos de pérdida significativos.
  2. Sensibilidad a los parámetros: el rendimiento de la estrategia es bastante sensible a parámetros como el "multifactor".
  3. Alta volatilidad: la estrategia puede abrir y cerrar posiciones con frecuencia en condiciones de mercado altamente volátiles, lo que puede suponer costes adicionales de deslizamiento y comisiones.

Medidas de control de riesgos:

  1. Establezca con cuidado parámetros como multifactor basados en la tolerancia al riesgo.
  2. Cuidadosamente backtest y comercio de papel para seleccionar los parámetros adecuados.
  3. Evaluar el rendimiento de la estrategia en condiciones de mercado altamente volátiles.Si es necesario, el riesgo puede mitigarse ajustando los parámetros o restringiendo los escenarios de uso.

Direcciones de optimización

  1. Añadir la detección de tendencias: Determine la tendencia basada en la acción del precio al abrir posiciones.
  2. Dinámico tomar el beneficio: ajustar dinámicamente el nivel de tomar el beneficio basado en la acción del precio, la volatilidad y otros indicadores.
  3. Optimización de la gestión de posiciones: al agregar posiciones, además de considerar el factor de escalado, también se debe incorporar el saldo de la cuenta, la exposición actual, etc. para controlar con mayor precisión el tamaño de las posiciones.
  4. Combinar con otras señales: Integrar el comercio en red con otras señales de detección de tendencias, detección de oscilaciones y otros indicadores para juzgar de manera integral el mercado y guiar el comercio.

Estas optimizaciones pueden mejorar la adaptabilidad de la estrategia para captar mejor los movimientos del mercado, mejorar el potencial de ganancia y la solidez.

Resumen de las actividades

Esta estrategia de negociación de posiciones dinámicas de Martingale larga basada en la cuadrícula intenta reducir el precio promedio de tenencia durante las tendencias bajistas agregando gradualmente posiciones y obteniendo ganancias cuando los precios aumentan. La estrategia ofrece una gran flexibilidad a través de la configuración de parámetros. Sin embargo, también conlleva riesgos potenciales significativos que requieren una evaluación y control cuidadosos. Si se puede agregar detección de tendencias, toma dinámica de ganancias, optimización de posición y otras características, el rendimiento de la estrategia puede mejorarse aún más. La estrategia realiza funciones para abrir y agregar posiciones automáticamente cuando los precios tocan las líneas de la cuadrícula y cerrar automáticamente todas las posiciones cuando los precios alcanzan el nivel de toma de ganancias. La lógica general es relativamente clara, pero hay espacio para la optimización.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 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/
// © lagerta13
//@version=4
strategy("Grid A.", shorttitle="Grid(A)", overlay=true, format=format.price, precision=4, pyramiding = 100)

input_tf=input("15", "Started TimeFrame", 
 options = ["1", "5", "15", "30", "1H", "4H", "1D", "1W", "1M"],
 group="TimeFrame") 

// avg_tf=input("5", "Average TimeFrame", 
//  options = ["1", "5", "15", "30", "1H", "4H", "1D", "1W", "1M"],
//  group="TimeFrame")

slip_Hilo = input(3.0, "Slippage by open order", group="Strategy Settings")
start_lot = input(0.01, "Start lot", group="Strategy Settings")
start_avg = input(2, "Started average since Order #", group="Strategy Settings")
MaxTrades_Hilo = input(10, "Max Open Orders", group="Strategy Settings")
dropdown_selection = input("Only Long", "Direction", options=["Only Long", "Only Short", "Long & Short"],
 group="Strategy Settings")
type_selection = input("By Close", "Type input", options=["By Close", "By grid line"],
 group="Strategy Settings")

multifactor = input(1.5, "Multifactor", group="Strategy Settings")
precision_lot = input(2, "Number of precision", group="Strategy Settings")
take_profit = input(1, "TakeProfit", group="Strategy Settings")

// PipStep_S1 = input(30)
// PipStepX_S1 = input(1.2)
// dinamicStep = input(false, "Dinamic Step for AVG")

get_size_lot_order(number, multi, prec, avg_from, lot_from) =>
	res = lot_from
	for i = 1 to number
		if i >= avg_from
			res := round(res * multi, precision = prec)
	res

var float[] entry_levels = array.new_float(MaxTrades_Hilo + 1)

for i = 0 to MaxTrades_Hilo
    array.push(entry_levels, 0)

gridSize = input(0.5, title="Grid Size")
gridLevels = int(close / gridSize) * gridSize

var int num_open_orders = 0
var float sum_price_orders = 0
var float entry_lot = 0

buy_condition = num_open_orders < MaxTrades_Hilo and gridLevels[0]<gridLevels[1] and dropdown_selection != "Only Short"

if (buy_condition)

    if num_open_orders == 0
        lot = get_size_lot_order(num_open_orders, multifactor, precision_lot, start_avg, start_lot)
        sum_price_orders := sum_price_orders + gridLevels[1] * lot 

        strategy.entry("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]+slip_Hilo) 
        // strategy.order("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]) 

        array.set(entry_levels, num_open_orders, gridLevels[1])

        entry_lot := entry_lot + lot
        num_open_orders := num_open_orders + 1

    else
        if gridLevels[1] < (array.get(entry_levels, num_open_orders - 1))
            lot = get_size_lot_order(num_open_orders, multifactor, precision_lot, start_avg, start_lot)
            sum_price_orders := sum_price_orders + gridLevels[1] * lot 
            entry_lot := entry_lot + lot

            strategy.entry("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]+slip_Hilo) 

            // +" S:" + tostring(sum_price_orders / (entry_lot)) + " Prev:" + tostring(array.get(entry_levels, num_open_orders - 1))
            // strategy.order("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]) 
            array.set(entry_levels, num_open_orders, gridLevels[1])

            num_open_orders := num_open_orders + 1


take = sum_price_orders > 0 and take_profit + (sum_price_orders / entry_lot) < high ? high : na
plotshape(take, location = location.belowbar, color = color.white)


strategy.exit("tp", comment = "TP " + tostring(num_open_orders), qty = entry_lot, limit = take_profit + (sum_price_orders / entry_lot))


if sum_price_orders > 0 and take_profit + (sum_price_orders / entry_lot) <= high
    num_open_orders := 0
    sum_price_orders := 0
    entry_lot := 0
    for i = 0 to MaxTrades_Hilo
        array.set(entry_levels, i, 0)

plot(gridLevels, color=color.blue, style=plot.style_circles, linewidth=2)

 

Más.