Estratégia de negociação quantitativa de criptomoeda baseada em DCA dinâmico

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Data de criação: 2025-02-19 16:59:45 última modificação: 2025-02-27 17:56:06
cópia: 1 Cliques: 462
2
focar em
319
Seguidores

Estratégia de negociação quantitativa de criptomoeda baseada em DCA dinâmico Estratégia de negociação quantitativa de criptomoeda baseada em DCA dinâmico

Visão geral

Trata-se de uma estratégia de negociação quantitativa projetada especificamente para o mercado de criptomoedas, que aproveita as características de alta volatilidade do mercado de criptomoedas, aumentando dinamicamente o posicionamento quando os preços se ajustam através de uma média de custo inteligente (DCA). A estratégia funciona em um período de 15 minutos e é capaz de responder eficazmente às rápidas flutuações do mercado de criptomoedas, evitando ao mesmo tempo os riscos associados à negociação excessiva.

Princípio da estratégia

A estratégia consiste em quatro módulos principais:

  1. Sistema de entrada inteligente: construção de uma primeira posição baseada na média ponderada OHLC4, adaptada às características de alta volatilidade do mercado de criptomoedas
  2. Mecanismo de reposição dinâmica: acionar ordens de segurança quando os preços se ajustam, aumentando o volume de reposição conforme a profundidade aumenta, aproveitando as flutuações do mercado
  3. Sistema de gestão de risco: otimização do risco-benefício por meio de acréscimo piramidal e ajustes flexíveis de alavancagem
  4. Controle de stop-loss rápido: mecanismo de stop-loss projetado para características de flutuação rápida do mercado de criptomoedas, incluindo otimização de comissões

Vantagens estratégicas

  1. Adaptabilidade do mercado: otimizada especificamente para as características de alta volatilidade do mercado de criptomoedas
  2. Dispersão de risco: reduzir o risco de surpresa no mercado de criptomoedas por meio da construção de depósitos em lotes dinâmicos
  3. Eficiência de arbitragem: aproveite as flutuações de preços do mercado de criptomoedas
  4. Execução automática: Acesso a API de várias das principais exchanges de criptomoedas
  5. Eficiência de capital: aumentar a eficiência de uso de capital nas transações de criptomoedas por meio de gerenciamento de alavancagem inteligente

Risco estratégico

  1. Risco de mercado: extrema volatilidade no mercado de criptomoedas pode levar a um retorno maior
  2. Risco de liquidez: algumas criptomoedas de menor valor podem ter problemas de falta de liquidez
  3. Risco de alavancagem: a alta volatilidade do mercado de criptomoedas aumenta o risco de negociação com alavancagem
  4. Riscos tecnológicos: dependência da estabilidade das APIs das exchanges e da qualidade da conexão de rede
  5. Riscos regulatórios: mudanças de política no mercado de criptomoedas podem afetar a execução da estratégia

Direção de otimização da estratégia

  1. Adaptação à volatilidade: introdução de indicadores de volatilidade exclusivos do mercado de criptomoedas para ajustar dinamicamente os parâmetros
  2. Sinergia multicurrency: Desenvolver uma lógica de transação multicurrency para diversificar o risco de uma moeda única
  3. Filtragem de sentimento de mercado: Indicadores de sentimento integrados no mercado de criptomoedas para otimizar o momento de entrada
  4. Otimização de custos de transação: reduzir custos com roteamento inteligente e opções de câmbio
  5. Mecanismo de alerta de risco: criação de um sistema de alerta baseado em variações anormais no mercado

Resumir

A estratégia oferece uma solução completa de automação para a negociação de criptomoedas por meio de métodos inovadores de DCA e gerenciamento de risco dinâmico. Embora o mercado de criptomoedas seja de alto risco, a estratégia é capaz de manter a estabilidade na maioria dos cenários de mercado por meio de mecanismos de controle de risco cuidadosamente projetados e otimização de adaptabilidade ao mercado. A otimização futura será focada em aumentar a adaptabilidade da estratégia às especificidades do mercado de criptomoedas.

Código-fonte da estratégia
/*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