Estrategia de DCA


Fecha de creación: 2023-09-26 17:28:27 Última modificación: 2023-09-26 17:28:27
Copiar: 0 Número de Visitas: 976
1
Seguir
1617
Seguidores

Descripción general

La estrategia es un método de retroalimentación de las operaciones de alza que utiliza el principio de promedio de costos en dólares (DCA, por sus siglas en inglés). Se puede añadir posición después de la apertura inicial, de acuerdo con el porcentaje de desviación de precio establecido y la regla de la cantidad de alzas. La estrategia también incluye la estrategia de stop loss y la función de seguimiento de stop loss.

Principio de estrategia

La estrategia comienza con una apertura de posición inmediata dentro de la ventana de tiempo de retracción, cuando el precio de cierre del día es mayor a 0, y el precio de apertura sirve como precio base bo_level. Luego, si no hay un pedido de seguridad (((so), se coloca toda la orden de posición baja posible en la barra actual según el porcentaje de desviación del precio establecido y el número de veces que se coloca.

En la fase de mantenimiento de la posición, si el volumen de la posición es mayor que 0, se calcula el precio de la parada en función del precio base y el porcentaje de parada objetivo. Si la función de seguimiento de la parada está desactivada, se utiliza este precio de parada fijo; de lo contrario, se actualiza constantemente el precio máximo de seguimiento de la parada en función del precio más alto de la parada, y se ajusta el precio de la parada en consecuencia, para lograr el seguimiento de la parada.

Análisis de las ventajas estratégicas

  • Utilizando la estrategia DCA, se puede aumentar automáticamente la posición después de la caída de los precios, reduciendo el costo promedio de la posición y la cobertura del riesgo sistémico.

  • Soporta parámetros personalizados, puede configurar las reglas de apertura de posición y las estrategias de cierre de posición de manera flexible según las diferentes variedades y estilos de negociación.

  • La función de seguimiento del frenado incorporada permite ajustar la posición del frenado automáticamente según las circunstancias, evitando que el frenado se active demasiado pronto.

  • La configuración de los parámetros de retroalimentación es flexible, lo que permite probar datos de diferentes períodos de tiempo para evaluar el efecto de la estrategia.

  • En combinación con la plataforma 3commas, se puede configurar un robot de disco duro directamente con los resultados de la retroalimentación, sin necesidad de desarrollo adicional.

Análisis de riesgos estratégicos

  • Las estrategias de DCA presentan un riesgo de alza de la posición. Si el mercado continúa bajando, la cantidad de posiciones aumentará aún más y las pérdidas aumentarán. Se requiere una configuración razonable de las reglas de alza de la posición.

  • El parón de porcentaje fijo no se puede ajustar a la amplitud de las fluctuaciones del mercado, y puede pararse prematuramente o salir del campo. Se necesita configurar el seguimiento del parón.

  • La detección de la existencia de riesgos de adaptación, la efectividad del disco se verá afectada por factores como el costo de la transacción. Se necesita una evaluación de riesgos.

  • La estabilidad del sistema de las bolsas y las 3 commas debe ser objeto de atención para evitar el fracaso de la ejecución de las transacciones programadas.

Dirección de optimización de la estrategia

  • Se puede ajustar el porcentaje de desviación del precio en función de la volatilidad de las diferentes variedades, optimizando las reglas de alza de posición.

  • Se puede combinar con un indicador de fluctuación para determinar un porcentaje de frenado más científico.

  • Se puede establecer una ventana de tiempo razonable de retrospección en función de los diferentes períodos de negociación de cada variedad.

  • Se pueden introducir estrategias de stop loss y de exit en caso de grandes pérdidas.

  • Se puede combinar con algoritmos de aprendizaje automático para optimizar dinámicamente los parámetros de la estrategia.

Resumir

En general, esta estrategia es una prueba de retroceso de DCA muy práctica. Apoya una buena configuración de parámetros personalizados y puede configurar con flexibilidad las reglas de apertura y cierre de posiciones. Al mismo tiempo, la función de seguimiento de paradas integrada compense la deficiencia de paradas fijas.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 15h
basePeriod: 15m
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/
// © rouxam

// Author: rouxam
// Inspired by the original work of ericlin0122

//@version=4
// strategy("Backtesting 3commas DCA Bot", overlay=true, pyramiding=99, process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.1)

// Strategy Inputs
price_deviation         = input(1.0, type=input.float,  title='Price deviation to open safety orders (%)', minval=0.0, step=0.1)/100
take_profit             = input(1.0, type=input.float,  title='Target Take Profit (%)', minval=0.0, step=0.1)/100
ttp                     = input(0.5, type=input.float,  title='Trailing Take Profit (%) [0 = Disabled]', minval=0.0, step=0.1)/100
base_order              = input(10.0, type=input.float, title='base order') 
safe_order              = input(20.0, type=input.float, title='safe order') 
safe_order_volume_scale = input(2.0, type=input.float,  title='Safety order volume scale', step=0.1) 
safe_order_step_scale   = input(1.5, type=input.float,  title='Safety order step scale', step=0.1) 
max_safe_order          = input(5,                      title='Max safe order', minval=1, maxval=99, step=1) 

// Date Inputs
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = time >= start and time <= finish ? true : false // create function "within window of time"

var bo_level = 0.0
var latest_so_level = 0.0
var next_so_level = 0.0
var ttp_active = false
var ttp_max = 0.0
var ttp_level = 0.0
var take_profit_level = 0.0

if strategy.position_size <= 0.0
    ttp_max := 0.0
    ttp_active := false


// First Position
if(strategy.opentrades == 0 and window and close > 0)
    // Place Buy Order ASAP
    bo_level := open
    strategy.entry("BO", limit=bo_level, long=strategy.long, qty=base_order/bo_level)
    latest_so_level := open

// Dollar Cost Averaging
place_safety_orders = latest_so_level == bo_level
if place_safety_orders
    // Placing all possible exit orders on that candle
    for i = 1 to max_safe_order
        next_so_level := latest_so_level * (1 - price_deviation * pow(safe_order_step_scale,  i - 1))
        so_name = "SO" + tostring(i) 
        strategy.entry(so_name, long=strategy.long, limit=next_so_level, qty=safe_order * pow(safe_order_volume_scale, i - 1)/next_so_level)
        latest_so_level := next_so_level

// Take Profit
if strategy.position_size > 0
    take_profit_level := strategy.position_avg_price * (1 + take_profit)
    if ttp <= 0.0
        // No trailing take profit
        strategy.exit(id="TP", limit=take_profit_level)
    else
        // Trailing take profit
        if take_profit_level <= close
            ttp_max := max(high, ttp_max)
            ttp_active := true
        if ttp_active 
            // Update exit order
            ttp_level := ttp_max * (1 - ttp)
            strategy.exit(id="TTP", stop=ttp_level)