Estrategia de negociación personalizada del día de la semana

El autor:¿ Qué pasa?, Fecha: 2023-09-26 20:49:44
Las etiquetas:

Resumen general

Esta es una estrategia de trading larga / corta personalizada para bitcoin que permite realizar pruebas de retroceso de anhelo o cortocircuito en diferentes días de la semana.

Asegúrese de estar en el marco de tiempo diario al ver el rendimiento y el historial de operaciones para asegurarse de que el script funcione según lo previsto y tenga el máximo de datos históricos de TradingView.

Estrategia lógica

La lógica central de la estrategia es permitir al usuario elegir el largo, corto o ningún comercio para cada día de la semana.

En primer lugar, permite al usuario establecer el rango de fechas para backtesting, incluyendo el mes de inicio, día, año y final mes, día, año.

Luego, utiliza marcos de tiempo de una matriz para almacenar la representación numérica de cada día de la semana, desde el domingo 0 hasta el sábado 6.

Otra matriz timeframes_options se utiliza para almacenar la elección de largo, corto o ningún comercio para cada día.

En un bucle for, la estrategia comprueba si el día de negociación actual coincide con un día en la matriz de marcos de tiempo.

Si la opción no es None, se abre una posición en la dirección adecuada en función del largo o corto elegido.

Por lo tanto, la estrategia puede operar largo / corto en el rango de fecha establecido basado en los ajustes para cada día de la semana.

Análisis de ventajas

La principal ventaja de esta estrategia es que proporciona un comercio largo / corto altamente personalizable. El usuario tiene total libertad para elegir la dirección de negociación para cada día de la semana.

A diferencia de las estrategias de negociación semanales fijas, esta se puede ajustar de manera flexible.

El rango de fechas de backtest también es muy flexible, lo que permite probar cualquier período especificado por el usuario para ver qué combinaciones de fechas funcionan mejor.

La lógica de negociación es muy clara y simple, fácil de entender y modificar.

La estrategia también cierra automáticamente posiciones en cambio de dirección cada día, evitando riesgos innecesarios.

Análisis de riesgos

El principal riesgo es que las opciones de negociación diaria elegidas por el usuario no se adapten a todos los intervalos de fechas.

Por ejemplo, las largas jornadas entre semana y los fines de semana cortos pueden resultar eficaces en algunos períodos pero no en otros.

Por lo tanto, los rangos de fechas deben ser cuidadosamente probados y no depender de un resultado de backtest.

Otro riesgo es la incapacidad de reducir las pérdidas a tiempo cuando la dirección cambia diariamente.

En general, la estrategia depende en gran medida de la optimización y requiere pruebas suficientes para encontrar conjuntos de parámetros que se adapten a diferentes condiciones del mercado.

Direcciones de optimización

La estrategia puede mejorarse en varios aspectos:

  1. Añadir una lógica de stop loss en el cambio diario de dirección, fijando paradas de trailing cuando las posiciones son rentables para limitar los retiros.

  2. Añadir un filtro, tomando sólo las señales en la ruptura de ciertos días alto / bajo, evitando la negociación sin tendencia.

  3. Reducir el tamaño de las posiciones en períodos de alta volatilidad y aumentar cuando la volatilidad es baja para controlar el riesgo.

  4. Agregue aprendizaje automático a las selecciones de días de negociación, juzgando la probabilidad de cada día basado en datos históricos, generando direcciones diarias dinámicas.

  5. Agregue lógica para manejar eventos repentinos como noticias importantes al pausar el comercio para evitar ser atrapado fuera de juego.

Conclusión

Esta estrategia proporciona una capacidad de negociación larga / corta muy flexible a través de selecciones diarias de dirección. Los usuarios pueden combinar libremente las pruebas para los parámetros óptimos. Pero tiene altos requisitos de optimización, que requieren pruebas extensas para encontrar configuraciones que se adapten a diferentes mercados. Agregar mejoras como paradas, filtros, ajustes dinámicos puede reducir el riesgo y mejorar la robustez.


/*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"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


Más.