Esta estrategia se basa en el comercio de la línea de paridad, mediante el establecimiento de tres líneas de entrada de la cabeza y la cabeza vacía, para lograr la apertura de posiciones de doble sentido de la mano, pertenece a la estrategia de seguimiento de la tendencia. Cuando el precio rompe la línea de paridad, abrir posiciones y hacer más de la mano, a través de la suspensión de la carta para lograr la entrada en serie.
La estrategia se basa principalmente en la ruptura de la línea media para determinar la dirección de la tendencia. En concreto, se obtiene un indicador de la línea media mediante el cálculo de la media aritmética de los precios de apertura, cierre, máximo y mínimo. Luego, se establece una línea de entrada múltiple por encima de la línea media y una línea de entrada en blanco por debajo de la línea media.
El número de órdenes de hacer más vacío se incrementa gradualmente, mediante la configuración de la lista de suspensión para lograr la apertura de la posición por lotes. Por ejemplo, la línea de entrada 1 activa la apertura de 1 mano para hacer más / vacío, la línea de entrada 2 activa la adición de 1 mano para mantener la posición, y la línea de entrada 3 agrega 1 mano para mantener la posición. Esto puede dispersar los costos de entrada y reducir el riesgo de pedidos individuales.
La estrategia también establece un mecanismo de compensación. Cuando la cantidad de la posición es inferior a 0, se establece un stop loss de seguimiento en función del precio de la línea media, y si el precio cae nuevamente por debajo de la línea media, se detiene la posición de equilibrio. Esto puede bloquear parte de las ganancias y proteger los fondos.
En general, la estrategia utiliza el indicador de la línea media para determinar la dirección de la tendencia y maximizar el margen de ganancias a través de una línea de entrada de varios niveles, al tiempo que establece un solo control de riesgo de stop loss, es una estrategia típica de seguimiento de tendencias.
La estrategia tiene las siguientes ventajas:
La línea media puede filtrar el ruido del mercado para determinar la dirección de la tendencia principal.
Línea de entrada de varios niveles, aprovechar al máximo la zona de funcionamiento de la tendencia. A través de varias líneas de entrada, se puede capturar al máximo la zona de funcionamiento de la tendencia en su totalidad, ampliando el espacio de ganancia.
Separar los lotes de apertura de la posición, reducir el riesgo individual. Dividir las entradas en varias veces, puede dispersar el riesgo de los pedidos, reducir el costo promedio de mantenimiento de la posición.
Establezca un mecanismo de compensación de pérdidas y controle el riesgo de manera efectiva. Con la compensación de la indemnización, puede detenerse rápidamente cuando el precio vuelva a caer por debajo de la línea media, evitando pérdidas excesivas.
La estrategia es clara y fácil de entender, los parámetros son flexibles y se pueden optimizar para diferentes mercados.
La estrategia también tiene sus riesgos:
Probabilidad de que la línea media emita una señal errónea. La línea media juzga que hay un retraso en la tendencia y que puede emitir una señal errónea.
Riesgo de pérdidas por cambio de tendencia. La estrategia se basa en la tendencia y, en caso de cambio de tendencia, generará mayores pérdidas.
La línea de entrada está demasiado densa, lo que aumenta la frecuencia de las transacciones y los costos de los puntos de deslizamiento.
La apertura de una posición por lotes aumenta el riesgo de concentración de la posición. Cuando la cantidad de la posición es demasiado grande, el riesgo se concentra.
La configuración del punto de parada no es razonable, puede detenerse prematuramente o el punto de parada es demasiado pequeño.
Las medidas de gestión de riesgos correspondientes:
Optimice los parámetros de la media y seleccione la media periódica adecuada.
Observa los indicadores técnicos más importantes, evalúa las señales de cambio de tendencia y detiene los perjuicios a tiempo.
Ajuste la distancia de la línea de entrada para reducir la frecuencia de las transacciones.
Optimización del tamaño y proporción de las posiciones, control de los riesgos de concentración.
Prueba y optimización de puntos de parada para reducir el riesgo de parada.
La estrategia puede ser optimizada en los siguientes aspectos:
Prueba diferentes parámetros de medias y fuentes de datos para elegir el mejor indicador de medias para determinar el efecto de la tendencia.
Optimización de la distancia entre la línea de entrada y la proporción de posiciones para encontrar el parámetro óptimo.
En combinación con otros indicadores como condiciones de filtración, evita que la línea uniforme emita una señal falsa. Por ejemplo, MACD, RSI, etc.
Optimización de la posición de la línea de parada, también se puede establecer el punto de parada en función de la configuración dinámica de ATR.
Aumentar el criterio de cambio de tendencia y establecer condiciones para cerrar todas las posiciones.
Los parámetros de la estrategia se pueden optimizar en función de las diferentes épocas del mercado.
La función de ajuste dinámico de la cantidad de posiciones aumentadas determina el número de posicionadores abiertos en función de la proporción de uso de fondos.
Esta estrategia en su conjunto utiliza una línea uniforme para determinar la dirección de la tendencia, y el comportamiento de la tendencia es la principal fuente de ganancias. A través de múltiples niveles de entrada y apertura de posiciones por lotes, se puede capturar eficazmente la tendencia y ampliar el área de ganancias. Al mismo tiempo, se establece un mecanismo de stop loss para controlar el riesgo.
/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true
//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult
//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]
//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")
//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
lots := round(size / lot)
strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
lots := round(size / lot)
strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
lots := round(size / lot)
strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
lots := round(size / lot)
strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
lots := round(size / lot)
strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
lots := round(size / lot)
strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
strategy.cancel("TPL")
strategy.cancel("TPS")