Backtesting de estrategia de trading basada en canal largo-corto


Fecha de creación: 2023-09-20 17:02:40 Última modificación: 2023-09-20 17:02:40
Copiar: 0 Número de Visitas: 688
1
Seguir
1617
Seguidores

Descripción general

La estrategia utiliza el establecimiento de un canal de múltiples espacios para realizar una verificación de retroalimentación de sistemas de tipo de canal de ruptura, que pertenece a la estrategia de comercio de tipo de ruptura de tendencia.

Principio de estrategia

  1. Se calcula el precio máximo para la construcción de canales múltiples y el precio mínimo para la construcción de canales sin cabeza en un período determinado.

  2. La compra se realiza cuando el precio supera la línea de canal superior.

  3. Se vende cuando el precio se rompe por debajo de la línea de canal.

  4. Se puede configurar un rango de tiempo de retroalimentación para verificar la estrategia.

  5. La estrategia es clara y sencilla.

Análisis de las ventajas

  1. Los canales multi-espacio pueden definirse de manera más intuitiva que los canales de circulación.

  2. La tendencia al alza después de la ruptura de la línea de canal es más probable.

  3. La retrospectiva puede validar la eficacia de las estrategias en el contexto histórico.

  4. La idea de la ruptura del canal es sencilla y fácil.

  5. El código es más sencillo, fácil de modificar y optimizar.

Análisis de riesgos

  1. La existencia de una falsa brecha tras la ruptura de Bring corre el riesgo de un desvío.

  2. No se puede configurar eficazmente el stop loss y el stop stop.

  3. La configuración incorrecta de los parámetros de canal puede afectar la eficacia de la estrategia.

  4. Los resultados de la detección pueden tener un desvío de optimización.

  5. El resultado puede ser diferente cuando se implementa en el disco.

Dirección de optimización

  1. Prueba diferentes parámetros para encontrar la combinación óptima de ellos.

  2. Añade otros factores combinados para filtrar falsas brechas.

  3. Establecer mecanismos para detener y detener los daños.

  4. El objetivo es tratar los datos de retroalimentación y eliminar los errores.

  5. Se realizan pruebas de retroalimentación en varios entornos de mercado.

  6. La simulación del disco real se verifica para configurar los parámetros del disco real.

Resumir

La estrategia utiliza una simple regla de la vía de ruptura para la verificación de retroalimentación, es fácil de operar, pero aún necesita ser optimizada para mejorar la estabilidad. Se puede perfeccionar aún más a través de ajustes de parámetros, control de riesgo, etc., para que sea un sistema de negociación de ruptura confiable.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-20 00:00:00
end: 2023-08-30 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//strategy(title = "Backtest Donchian Teixeira", default_qty_type = strategy.fixed, default_qty_value = 100, overlay = true, commission_type = strategy.commission.cash_per_order, commission_value = 2.50, precision = 2, calc_on_every_tick = true, pyramiding = 0, initial_capital = 10000)

testStartYear = input(2000, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 00, 00)

testEndYear = input(2018, "Backtest End Year")
testEndMonth = input(12, "Backtest End Month")
testEndDay = input(1, "Backtest End Day")
testPeriodEnd = timestamp(testStartYear, testStartMonth, testStartDay, 23, 59)

window()  => true //nao funciona

length1 = input(20, minval=1, title="Upper Channel")
length2 = input(20, minval=1, title="Lower Channel")

dcUpper = highest(length1)
dcLower = lowest(length2)

plot(dcLower, style=line, linewidth=1, color=red, offset=1)
plot(dcUpper, style=line, linewidth=1, color=lime, offset=1)
plot(dcLower, style=line, linewidth=1, color=gray)

if (strategy.position_size == 0)
    strategy.entry("COMPRA", true, stop = dcUpper)
    
if (strategy.position_size > 0)
    strategy.exit("VENDA", stop = dcLower)