Una estrategia cuantitativa simple basada en la suma de posiciones en intervalos de tiempo


Fecha de creación: 2023-12-27 17:39:40 Última modificación: 2023-12-27 17:39:40
Copiar: 0 Número de Visitas: 684
1
Seguir
1623
Seguidores

Una estrategia cuantitativa simple basada en la suma de posiciones en intervalos de tiempo

Descripción general

La estrategia es una estrategia simple para el comercio cuantitativo que utiliza la escala de tiempo. La idea principal de la estrategia es establecer múltiples posiciones diarias a una hora fija, y luego establecer diferentes condiciones de stop loss para cada posición, lo que permite el stop loss o el stop loss por lotes.

Principio de estrategia

La estrategia se basa en tres lógicas clave:

  1. Escalera de tiempo

AprovechosessionTimeEl parámetro establece un período de tiempo de negociación diaria, durante el cual el número de posiciones se acumula gradualmente en la escalera FIXED al abrir el mercado cada día, y el número de posiciones acumuladas se distribuye en promedio entre el número de posiciones máximas en el fondo de capital.

  1. Detención de pérdidas personalizadas

Establecer un punto de parada para cada orden de apertura de posicióntakeProfity el punto de paradastopLossEl objetivo es que cada orden tenga una lógica de stop-loss independiente, lo que permite un stop-loss por lotes.

  1. Terminación del período de liquidación

Al finalizar el período de negociación en el mismo día, se puede elegir la opción de liquidar o no todas las órdenes que no se hayan detenido durante ese período.

Ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. Diseminación de riesgos, distribución de los fondos de la bolsa de fondos entre los diferentes pedidos, control eficaz de pérdidas por orden.

  2. Separación de los pedidos con una lógica de parada independiente para evitar que todos los pedidos se detengan al mismo tiempo.

  3. La configuración es flexible y se pueden personalizar los parámetros como el número máximo de alzas de posición, el período de tiempo de negociación diario, el porcentaje de stop-loss.

  4. Es fácil de entender, la lógica de la estrategia es simple y clara.

Riesgo estratégico

La estrategia también tiene ciertos riesgos:

  1. Existe el riesgo de que se produzca una pérdida mayor si se activa la línea de stop loss correspondiente antes de que todos los pedidos lleguen a la línea de stop loss. Se puede evitar mediante la configuración razonable de la proporción de stop loss.

  2. No se puede limitar el total de la posición abierta por día, si se enfrentan a situaciones especiales, el exceso de pedidos al mismo tiempo puede estar por encima de la capacidad de soporte de los fondos. Se puede considerar agregar un límite máximo al total de la posición abierta por día.

  3. La configuración incorrecta del período de tiempo puede perder oportunidades de mercado, se recomienda configurar el período de negociación con referencia al período de tiempo activo de la variedad de negociación objetivo.

Optimización de la estrategia

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Aumentar la lógica de juicio de las condiciones de apertura de la posición, abrir la posición solo cuando se cumplen las señales de los indicadores técnicos específicos, para evitar la acumulación ciega de la posición.

  2. Incrementar el límite de la suma total de las adquisiciones diarias para evitar que se supere la capacidad de soporte del fondo de capital.

  3. Establezca diferentes proporciones de stop-loss para diferentes pedidos para lograr un stop-loss diferenciado.

  4. La lógica de incrementar el número de pedidos en relación con el saldo de la reserva de fondos, para que el número de pedidos esté vinculado a los fondos disponibles.

Resumir

La estrategia en su conjunto es una plantilla de estrategia muy simple para el comercio cuantitativo utilizando la idea de la hipoteca de la escalera del tiempo, la lógica de la estrategia es clara, pero también existe un cierto riesgo y espacio de optimización, y los desarrolladores pueden optimizar adecuadamente sobre esta base, lo que la convierte en una estrategia cuantitativa más estable y confiable.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 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/
// © A3Sh

//@version=5
strategy("Simple_Pyramiding", overlay=true, pyramiding=99, initial_capital=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.075, close_entries_rule='FIFO')

// Study of a Simple DCA strategy that opens a position every day at a specified time.
// A position is opened at the start time of the Timeframe.
// Positions exit individually when the take profit level is triggered.
// Option to activate Stop Loss and/or Position exit at the end of the Timeframe


// Backtest Window
start_time   = input(defval=timestamp("01 April 2021 20:00"), group = "Backtest Window", title="Start Time")
end_time     = input(defval=timestamp("01 Aug 2022 20:00"),  group = "Backtest Window", title="End Time")
window() => true


// Inputs
posCount     = input.int    (6,           group = "Risk",         title = "Max Amount of DCA Entries")
takeProfit   = input.float  (2.5,         group = "Risk",         title = "Take Profit %")
slSwitch     = input.bool   (true,        group = "Risk",         title = "Activate Stop Loss")
stopLoss     = input.float  (9,           group = "Risk",         title = "Stop Loss %")
sessionTime =  input("1800-1700", group = "DCA Settings", title = "DCA Order Timeframe", tooltip="Open order at the start/If ativated, close order at the end")
exitDCA     =  input.bool   (false,       group = "DCA Settings", title = "Exit DCA Entry at end of Timeframe")


// Order size based on max amount of pyramid orders
q = (strategy.equity  / posCount) / open


// Timeframe for opening and closing a DCA order
// example taken from https://stackoverflow.com/questions/69230164/pinescript-basic-question-open-a-trade-at-a-set-time-each-day
t       = time("D", sessionTime)
isStart = na(t[1]) and not na(t) or t[1] < t
isEnd   = na(t) and not na(t[1]) or t[1] < t
bgcolor(t ? color.new(color.blue,95) : na, title = " TimeFrame Color")


// Create DCA Entries
entry_price = 0.0
if isStart and window() 
    for i = 0 to strategy.opentrades
        if strategy.opentrades == i
            entry_price := close
            entry_id = "PE_" + str.tostring(i + 1) 
            strategy.entry(id = entry_id, direction=strategy.long, limit=entry_price, qty=q)
        if strategy.opentrades == posCount
            break
            
 
//Exit DCA Entries when take profit or stop loss is triggered
if strategy.opentrades > 0 and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, profit = close * takeProfit / 100 / syminfo.mintick, loss = slSwitch ? close * stopLoss /100 / syminfo.mintick :na)
        

//Exit DCA Entries at end of DCA Timeframe
if strategy.opentrades > 0 and exitDCA and isEnd and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, stop = close)