Robot Caja Blanca Estrategia del iceberg

El autor:¿ Qué pasa?, Fecha: 2023-09-26 21:02:21
Las etiquetas:

Resumen general

Esta estrategia se basa en la media móvil. Establece tres niveles de líneas de entrada largas y cortas para implementar posiciones de apertura bidireccionales, pertenecientes a la estrategia de seguimiento de tendencia. Cuando el precio rompe la media móvil, la estrategia abre posiciones largas y cortas en lotes mediante la colocación de órdenes pendientes.

Estrategia lógica

La estrategia utiliza principalmente el avance del promedio móvil para determinar la dirección de la tendencia. Específicamente, calcula la media aritmética del precio de apertura, precio de cierre, precio más alto, precio más bajo y así sucesivamente para obtener un indicador de promedio móvil. Luego establece líneas de entrada largas por encima del promedio móvil y líneas de entrada cortas por debajo de él. Cuando el precio rompe el promedio móvil desde abajo, se activan órdenes largas una por una. Cuando el precio rompe desde arriba, se activan órdenes cortas una por una.

El número de órdenes largas y cortas aumenta progresivamente. Al establecer órdenes pendientes, implementa posiciones de apertura por lotes. Por ejemplo, la línea de entrada 1 activa la apertura de 1 contrato largo / corto, la línea de entrada 2 activa la adición de 1 contrato y la línea de entrada 3 agrega otro contrato. Esto ayuda a diversificar el costo de entrada y reducir el riesgo de una sola orden.

La estrategia también tiene un mecanismo de cobertura. Cuando el tamaño de la posición no es 0, establecerá una orden de stop loss de seguimiento basada en el precio promedio móvil. Si el precio vuelve a romper el promedio móvil, cerrará la posición para obtener ganancias parciales y proteger el capital.

En resumen, esta estrategia hace pleno uso del indicador de promedio móvil para determinar la dirección de la tendencia, maximiza el rango de ganancias a través de múltiples líneas de entrada y controla los riesgos con órdenes de stop loss.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. El uso de promedios móviles para determinar la dirección de la tendencia es claro y factible. Los promedios móviles pueden filtrar el ruido del mercado de manera efectiva y determinar la dirección de la tendencia principal.

  2. Con múltiples líneas de entrada, puede capturar todo el rango de tendencia tanto como sea posible y expandir el espacio de ganancia.

  3. La apertura de posiciones en lotes reduce el riesgo de una sola orden, mientras que la entrada en el mercado en múltiples ocasiones diversifica los riesgos de las órdenes y reduce el coste medio de tenencia.

  4. El mecanismo de stop loss de cobertura controla los riesgos de manera efectiva. La orden de stop loss de cobertura realiza una pérdida rápida cuando el precio rompe la media móvil nuevamente, evitando enormes pérdidas.

  5. La lógica de la estrategia es clara y fácil de entender, con ajustes de parámetros flexibles que se pueden optimizar para diferentes mercados.

Análisis de riesgos

Hay algunos riesgos en esta estrategia:

  1. La probabilidad de señales erróneas de la media móvil. Las medias móviles tienen retraso y pueden dar señales erróneas.

  2. La estrategia asume una tendencia, por lo que las inversiones de tendencia pueden conducir a pérdidas enormes.

  3. Las líneas de entrada demasiado frecuentes aumentan la frecuencia de negociación y los costos de deslizamiento.

  4. Las posiciones de apertura de lotes aumentan el riesgo de concentración cuando el tamaño de la posición es demasiado grande.

  5. La configuración incorrecta del punto de stop loss puede dar lugar a un stop loss prematuro o al punto de stop loss demasiado pequeño.

Medidas de gestión de riesgos correspondientes:

  1. Optimice los parámetros de la media móvil y seleccione los períodos adecuados.

  2. Preste atención a los indicadores técnicos clave para detectar señales de inversión de tendencia y detener la pérdida a tiempo.

  3. Ajuste la distancia entre las líneas de entrada para disminuir la frecuencia de negociación.

  4. Optimizar el tamaño de la posición y la proporción para controlar el riesgo de concentración.

  5. Prueba y optimización de los puntos de stop loss para reducir el riesgo de stop loss.

Direcciones de optimización

La estrategia se puede optimizar a partir de los siguientes aspectos:

  1. Prueba de diferentes parámetros de media móvil y fuentes de datos para encontrar el mejor indicador de media móvil para determinar tendencias.

  2. Optimizar la distancia de intervalo y la proporción de tamaño de posición de las líneas de entrada largas y cortas para encontrar los parámetros óptimos.

  3. Añadir otros indicadores como condiciones de filtro para evitar señales erróneas del promedio móvil, como MACD, RSI, etc.

  4. Optimizar la posición de la línea de stop loss, o establecer puntos de stop loss dinámicamente basados en ATR.

  5. Añadir el juicio de la inversión de tendencia para cerrar todas las condiciones de las posiciones.

  6. Optimizar los parámetros para diferentes períodos de mercado.

  7. Añadir ajuste dinámico del tamaño de la posición basado en el porcentaje de uso de la cuenta.

Resumen de las actividades

Esta estrategia juzga la dirección de la tendencia principalmente en base a promedios móviles, y aprovecha las tendencias como fuente de ganancias. Al usar múltiples líneas de entrada y abrir posiciones en lotes, puede capturar efectivamente las tendencias y expandir las zonas de ganancia. Al mismo tiempo, se utilizan mecanismos de stop loss para controlar los riesgos. La lógica de la estrategia es simple y clara, adecuada para que los principiantes aprendan, y también para la optimización profunda.


/*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")

Más.