Estrategia cuántica simple de pirámide en el tiempo

El autor:¿ Qué pasa?, Fecha: 2023-12-27 17:39:40
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de comercio cuántico simple que utiliza la pirámide de tiempo escalonada. La idea principal es abrir posiciones largas todos los días a horarios fijos, y establecer diferentes niveles de toma de ganancias y stop loss para cada posición para realizar la toma de ganancias y la parada de pérdidas.

Principios

La estrategia se basa en tres lógicas clave:

  1. Pirámide de paso en el tiempo

    Utilice elsessionTimeEl tamaño de la posición es el promedio de la asignación del capital máximo.

  2. Las pérdidas por pérdidas y ganancias individuales

    Conjunto correspondiente al nivel de obtención de beneficiostakeProfity nivel de pérdida de paradastopLosspara cada posición abierta, de modo que cada posición tenga su propia lógica de toma de ganancias y de detención de pérdidas para realizar ejecuciones por lotes.

  3. Cierre todas las posiciones cuando finalice la ventana de tiempo

    Seleccione si desea cerrar todas las posiciones abiertas durante la ventana de tiempo al final de la ventana.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. Diversificación del riesgo: asignar equitativamente el capital a diferentes posiciones para controlar eficazmente la pérdida de una sola posición.

  2. Las diferentes posiciones tienen lógicas independientes para evitar pérdidas masivas.

  3. Configuraciones flexibles. Parámetros personalizables como tiempos máximos de pirámide, ventana de tiempo diaria, ratios de toma de ganancias/detención de pérdidas, etc.

  4. Una lógica simple y clara, fácil de entender.

Los riesgos

También hay algunos riesgos:

  1. El riesgo de que el capital total se quede atascado si todas las posiciones activan el stop loss antes de obtener ganancias.

  2. No hay límite en el capital total de posición abierta por día. Demasiadas posiciones pueden exceder la capacidad de carga de capital si se encuentran situaciones de mercado inusuales. Considere agregar el capital total máximo de posición por día.

  3. La configuración incorrecta de la ventana de tiempo puede perder oportunidades de negociación.

Mejoramiento

La estrategia puede mejorarse en los siguientes aspectos:

  1. Añadir condiciones de posición abierta basadas en indicadores técnicos para evitar pirámides imprudentes.

  2. Se añadirá el límite de capital total de las posiciones abiertas diarias para evitar el exceso de la capacidad de carga de capital.

  3. Establecer diferentes ratios de toma de ganancias/detención de pérdidas para diferentes posiciones para obtener una toma de ganancias y una detención de pérdidas diferenciadas.

  4. Añadir lógica para vincular el importe de la posición con el saldo del fondo de capital.

Conclusión

En conclusión, esta es una plantilla de estrategia de comercio de cantidades muy simple que utiliza la metodología de pirámide de paso en el tiempo. La lógica es simple y clara, mientras que también hay algunos riesgos y espacios para mejorar. Los desarrolladores pueden optimizar adecuadamente para que sea una estrategia de cantidades relativamente estable y confiable.


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




Más.