Stratégie de trading quantitative de crypto-monnaie basée sur le DCA dynamique

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Date de création: 2025-02-19 16:59:45 Dernière modification: 2025-02-27 17:56:06
Copier: 1 Nombre de clics: 462
2
Suivre
319
Abonnés

Stratégie de trading quantitative de crypto-monnaie basée sur le DCA dynamique Stratégie de trading quantitative de crypto-monnaie basée sur le DCA dynamique

Aperçu

Il s’agit d’une stratégie de trading quantitative spécialement conçue pour le marché de la crypto-monnaie, qui exploite pleinement les caractéristiques de haute volatilité du marché de la crypto-monnaie, en accroissant dynamiquement les positions en cas de rebond des prix grâce à une moyenne de coût intelligente (DCA). La stratégie fonctionne sur une période de 15 minutes, permettant de répondre efficacement aux fluctuations rapides du marché de la crypto-monnaie tout en évitant les risques liés à la survente.

Principe de stratégie

La stratégie est composée de quatre modules principaux:

  1. Système d’entrée intelligente: première position basée sur la moyenne pondérée OHLC4, adaptée aux caractéristiques très volatiles du marché de la crypto-monnaie
  2. Mécanisme de reprise dynamique: déclenchement d’ordres de sécurité lors d’une reprise des prix, augmentation de la quantité de reprise avec la profondeur, afin de profiter des fluctuations du marché
  3. Système de gestion des risques: optimiser le rapport risque/rendement par une prise de risque pyramidale et un ajustement flexible du levier
  4. Contrôle de freinage rapide: un mécanisme de freinage conçu pour les caractéristiques de fluctuation rapide du marché de la crypto-monnaie, comprenant l’optimisation des commissions

Avantages stratégiques

  1. Adaptabilité du marché: optimisé spécifiquement pour les caractéristiques très volatiles du marché de la crypto-monnaie
  2. Dispersion des risques: réduire les risques d’urgence sur le marché de la crypto-monnaie en créant des positions en lots dynamiques
  3. Efficacité de l’effet de levier: tirer parti des fluctuations des prix sur le marché de la crypto-monnaie
  4. Automatisation de l’exécution: prise en charge de l’accès aux API de plusieurs échanges de crypto-monnaie traditionnels
  5. Efficacité des fonds: améliorer l’efficacité de l’utilisation des fonds dans les transactions de crypto-monnaie grâce à une gestion intelligente du levier

Risque stratégique

  1. Risque de marché: les fluctuations extrêmes sur le marché de la crypto-monnaie pourraient entraîner un retrait majeur
  2. Risque de liquidité: certaines crypto-monnaies de petite valeur pourraient être confrontées à un manque de liquidité
  3. Risque d’effet de levier: la volatilité élevée du marché de la crypto-monnaie augmente le risque de transactions à effet de levier
  4. Risques techniques: dépendance à la stabilité de l’API de l’échange et à la qualité de la connexion réseau
  5. Risques réglementaires: les changements de politique sur le marché de la crypto-monnaie pourraient affecter l’exécution de la stratégie

Orientation de l’optimisation de la stratégie

  1. Adaptation à la volatilité: l’introduction d’un indicateur de volatilité propre au marché de la crypto-monnaie pour ajuster dynamiquement les paramètres
  2. Synergie multi-monnaie: développer une logique de transaction interconnectée multi-monnaie pour diversifier les risques monétiques
  3. Le filtrage du sentiment du marché: intégrer les indicateurs de sentiment du marché de la crypto-monnaie et optimiser le moment d’entrée
  4. Optimisation des coûts de transaction: réduction des coûts grâce à un routage intelligent et à la sélection d’un échange
  5. Mécanisme d’alerte à la hausse: mise en place d’un système d’alerte à la hausse basé sur les fluctuations anormales du marché

Résumer

La stratégie fournit une solution complète d’automatisation pour les transactions de crypto-monnaie grâce à une méthode DCA innovante et une gestion dynamique des risques. Bien que le marché des crypto-monnaies soit exposé à des risques élevés, la stratégie est capable de maintenir la stabilité dans la plupart des environnements de marché grâce à des mécanismes de contrôle des risques soigneusement conçus et à une optimisation de l’adaptabilité au marché.

Code source de la stratégie
/*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