Estrategia de trading cuantitativo de criptomonedas basada en DCA dinámico

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Fecha de creación: 2025-02-19 16:59:45 Última modificación: 2025-02-27 17:56:06
Copiar: 1 Número de Visitas: 462
2
Seguir
319
Seguidores

Estrategia de trading cuantitativo de criptomonedas basada en DCA dinámico Estrategia de trading cuantitativo de criptomonedas basada en DCA dinámico

Descripción general

Se trata de una estrategia de comercio cuantitativa diseñada específicamente para el mercado de criptomonedas, que aprovecha las características de alta volatilidad del mercado de criptomonedas, aumentando dinámicamente la posición en caso de una corrección de precios a través de la media de costos inteligente (DCA). La estrategia funciona en un marco de tiempo de 15 minutos y es capaz de responder eficazmente a las rápidas fluctuaciones del mercado de criptomonedas, al tiempo que evita los riesgos que conlleva el exceso de comercio.

Principio de estrategia

La estrategia se compone de cuatro módulos principales:

  1. Sistema de entrada inteligente: primera colocación basada en el promedio ponderado OHLC4, adaptado a las características de alta volatilidad del mercado de criptomonedas
  2. Mecanismo de reposición dinámica: activación de órdenes de seguridad en caso de corrección de precios, aumentando el reposición a medida que aumenta la profundidad, aprovechando la fluctuación del mercado
  3. Sistemas de gestión de riesgos: optimización de la relación riesgo-beneficio a través de la adición piramidal y el ajuste flexible del apalancamiento
  4. Controles rápidos de suspensión: mecanismos de suspensión diseñados para las características de fluctuación rápida del mercado de criptomonedas, que incluyen optimización de comisiones

Ventajas estratégicas

  1. Adaptabilidad al mercado: optimizado específicamente para las características de alta volatilidad del mercado de criptomonedas
  2. Dispersión de riesgos: reducir el riesgo de contingencia en el mercado de criptomonedas mediante la construcción dinámica de depósitos en masa
  3. Eficiencia en el arbitraje: aprovechar las fluctuaciones de precios en el mercado de criptomonedas para obtener ganancias
  4. Ejecución automatizada: soporte de acceso a API de varias de las principales bolsas de criptomonedas
  5. Eficiencia de capital: mejorar la eficiencia de la utilización de capital en las transacciones de criptomonedas a través de la gestión inteligente del apalancamiento

Riesgo estratégico

  1. Riesgo de mercado: las fluctuaciones extremas en el mercado de criptomonedas podrían provocar un retiro mayor
  2. Riesgo de liquidez: algunas criptomonedas de menor valor podrían tener problemas de falta de liquidez
  3. Riesgo de apalancamiento: la alta volatilidad en el mercado de criptomonedas aumenta el riesgo de operaciones con apalancamiento
  4. Riesgo tecnológico: depender de la estabilidad de las API de la bolsa y la calidad de la conexión a la red
  5. Riesgo regulatorio: los cambios en la política del mercado de criptomonedas pueden afectar la ejecución de la estrategia

Dirección de optimización de la estrategia

  1. Adaptación a la volatilidad: la introducción de un indicador de volatilidad propio del mercado de criptomonedas para ajustar dinámicamente los parámetros
  2. Sinergia multicurrency: desarrollo de la lógica de intercambio multicurrency para descentralizar el riesgo de la moneda única
  3. Filtrado de sentimiento de mercado: Indicadores de sentimiento integrados en el mercado de criptomonedas para optimizar el momento de entrada
  4. Optimización de los costos de las transacciones: Reducción de los costos a través de rutas inteligentes y opciones de intercambio
  5. Mecanismo de alerta de riesgo: creación de un sistema de alerta basado en fluctuaciones anormales en el mercado

Resumir

La estrategia ofrece una solución completa de automatización para el comercio de criptomonedas a través de un método innovador de DCA y gestión dinámica de riesgos. Aunque el mercado de criptomonedas es de alto riesgo, la estrategia puede mantener la estabilidad en la mayoría de los entornos de mercado a través de un mecanismo de control de riesgos cuidadosamente diseñado y una optimización de la adaptabilidad al mercado.

Código Fuente de la Estrategia
/*backtest
start: 2020-08-29 15:00:00
end: 2025-02-18 17:22:45
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
strategy('Autotrade.it DCA', overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02)

// Date Ranges
from_month = 1
from_day = 1
from_year = 2021
to_month = 1
to_day = 1
to_year = 9999
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"

source_type = 'OHLC4'
source_function(type) =>
    if type == 'Close'
        close
    else if type == 'Open'
        open
    else if type == 'High'
        high
    else if type == 'Low'
        low
    else if type == 'HL2'
        hl2
    else if type == 'HL3'
        hlc3
    else if type == 'OHLC4'
        ohlc4
    else if type == 'Median Body'
        (open + close) / 2
    else if type == 'Weighted Close'
        (high + low + 2 * close) / 4
    else if type == 'Trend Biased'
        close > open ? (high + close) / 2 : (low + close) / 2
    else if type == 'Trend Biased Extreme'
        close > open ? high : low
truncate(number, decimals) =>
    factor = math.pow(10, decimals)
    int(number * factor) / factor
// Strategy Inputs
price_deviation = input.float(1.0, title='Price deviation to open safety orders (%)', minval=0.0) / 100
take_profit = 1.0 / 100
base_order = 10.0
safe_order = 10.0
safe_order_volume_scale = 1.1
safe_order_step_scale = 1.1
max_safe_order = 30

var current_so = 0
var initial_order = 0.0
var previous_high_value = 0.0
var original_ttp_value = 0.0
// Calculate our key levels
take_profit_level = strategy.position_avg_price * (1 + take_profit)
startTrade = input.int(defval=1, title='Trade Start')
margin = input.float(title='Margin', defval=1, step=1, tooltip='USDT')
leverage = input.int(title='Leverage', defval=50, tooltip='it only used on futures trade')
multi = 1.125
var float multiplier = 1
symbol = str.replace_all(syminfo.ticker, '.P', '')
var float totalMargin = 0.0
var bool isTrade =false
var float totalPrice = 0.0
var int totalTrade = 0
var float totalQtys = 0
var float sellPrice = 0
var float sellQty = 0


// // First Position
if strategy.position_size == 0 and window and source_function(source_type) > 0 and previous_high_value == 0.0
    strategy.entry('No Position', strategy.long, qty=base_order / source_function(source_type))
    initial_order := source_function(source_type)
    current_so := 1
    previous_high_value := 0.0
    original_ttp_value := 0
    original_ttp_value

threshold = 0.0
if safe_order_step_scale == 1.0
    threshold := initial_order - initial_order * price_deviation * safe_order_step_scale * current_so
    threshold
else
    threshold := initial_order - initial_order * ((price_deviation * math.pow(safe_order_step_scale, current_so) - price_deviation) / (safe_order_step_scale - 1))
    threshold

// Average Down
if current_so > 0 and source_function(source_type) <= threshold and current_so <= max_safe_order and previous_high_value == 0.0
    if(startTrade<=current_so)
        margin := math.round(margin * multiplier * 100) / 100
        multiplier *= multi
        totalMargin += margin
        avePrice = (totalPrice/totalTrade)
        qty = margin*leverage/close
        isTrade := true
        totalPrice+=close
        totalTrade+=1
        totalQtys+=qty
        alert('{"category": "linear", "mode": 3, "tradeMode": 0, "symbol": "' + str.tostring(symbol) + '", "leverage": "' + str.tostring(leverage) + '", "side": "Buy", "orderType": "Market", "marketUnit": "quoteCoin", "qty": "' + str.tostring(margin) + '", "reduceOnly": false, "positionIdx": 1 }')
        strategy.entry('Trade # ' + str.tostring(current_so) +"---Margin: $" + str.tostring(margin), direction=strategy.long, qty=safe_order * math.pow(safe_order_volume_scale, current_so - 1) / source_function(source_type))
    else
        strategy.entry('Trade # ' + str.tostring(current_so) +" No position", direction=strategy.long, qty=safe_order * math.pow(safe_order_volume_scale, current_so - 1) / source_function(source_type))
    current_so += 1
    current_so


// Take Profit!
if take_profit_level <= source_function(source_type) and strategy.position_size > 0 or previous_high_value > 0.0
    if(isTrade)
        avePrice = totalMargin * leverage / totalQtys * 1.002  // Include fee directly
        percentGain = math.round((close - avePrice) / avePrice * 100 * 100) / 100
        gain = math.round(percentGain * leverage * totalMargin / 100 * 100) / 100
        isTrade := false
        sellPrice := avePrice*0.95
        sellQty := totalMargin * leverage/sellPrice
        loop = current_so-1
        testQty = sellQty/loop
        strategy.close_all(comment= "Take Profit: $" + str.tostring(gain))
        alert('{"category": "linear", "mode": 3, "tradeMode": 0, "symbol": "' + str.tostring(symbol) + '", "leverage": "' + str.tostring(testQty) + '", "side": "Sell", "orderType": "Market", "marketUnit": "baseCoin", "qty": "' + str.tostring(sellQty) + '", "reduceOnly": true, "positionIdx": 1, "loop": "' + str.tostring(loop) + '" }')
                    
    else
        strategy.close_all(comment='No Position')
    current_so := 0
    previous_high_value := 0
    original_ttp_value := 0
    multiplier:=1
    totalMargin:=0.0
    totalPrice:=0
    totalTrade:=0
    totalQtys:=0