Stratégie DCA


Date de création: 2023-09-26 17:28:27 Dernière modification: 2023-09-26 17:28:27
Copier: 0 Nombre de clics: 976
1
Suivre
1617
Abonnés

Aperçu

La stratégie est un processus de rétroaction de la négociation d’une position en utilisant le principe de la moyenne des coûts en dollars (DCA). Elle permet d’ajouter des positions après l’ouverture initiale, en fonction du pourcentage de déviation du prix et du nombre de fois que la position a été placée. La stratégie comprend également une stratégie d’arrêt et une fonction d’arrêt de suivi.

Principe de stratégie

La stratégie consiste d’abord à ouvrir immédiatement une position dans la fenêtre de temps de retracement, lorsque le prix de clôture est supérieur à 0 le jour, le prix d’ouverture étant le prix de base bo_level. Ensuite, en l’absence d’une commande de sécurité (((so), toutes les commandes de placement possibles sont placées sur la barre actuelle en fonction du pourcentage de déviation du prix défini et du nombre de fois qu’elle a été placée.

Pendant la phase de tenue de position, si le montant de la position est supérieur à 0, le prix d’arrêt est calculé en fonction du prix de base et du pourcentage d’arrêt de la cible. Si la fonction d’arrêt de suivi est désactivée, ce prix d’arrêt fixe est utilisé. Sinon, le prix d’arrêt le plus élevé de suivi est constamment mis à jour en fonction du prix le plus élevé de la cible et le prix d’arrêt est ajusté en conséquence.

Analyse des forces stratégiques

  • La stratégie DCA permet d’augmenter automatiquement le risque après une baisse des prix, de réduire le coût moyen de détention et de couvrir le risque systémique.

  • Prise en charge de paramètres personnalisés, possibilité de configurer de manière flexible les règles d’ouverture et de fermeture des positions en fonction des variétés et des styles de négociation.

  • La fonction de suivi de freinage intégrée permet de régler automatiquement la position de freinage en fonction de la situation, évitant ainsi le déclenchement prématuré du freinage.

  • Les paramètres de réaction sont flexibles, ce qui permet de tester facilement les données de différentes périodes et d’évaluer l’efficacité de la stratégie.

  • La plate-forme 3commas permet de configurer un robot réel directement à partir des résultats de sondage, sans nécessiter de développement supplémentaire.

Analyse stratégique des risques

  • La stratégie DCA présente un risque d’hypothèque, car si les conditions de marché continuent à baisser, le volume des positions augmentera encore et les pertes augmenteront également. Des règles d’hypothèque raisonnables sont nécessaires.

  • Les stoppers à pourcentage fixe ne peuvent pas être ajustés en fonction des fluctuations du marché et peuvent être prématurés ou ne pas être en place. Il est nécessaire de configurer le suivi des stops.

  • Il y a un risque d’adaptation, l’efficacité de la plate-forme peut être affectée par des facteurs tels que le coût de la transaction. Une évaluation des risques est nécessaire.

  • La stabilité du système des bourses et des 3 commas doit être prise en compte afin d’éviter l’échec de l’exécution des transactions prévues.

Orientation de l’optimisation de la stratégie

  • Il est possible d’ajuster les prix en fonction de la volatilité des variétés pour optimiser les règles de mise en place.

  • On peut combiner les indicateurs de volatilité pour déterminer un pourcentage de freinage plus scientifique.

  • Des fenêtres de temps de rétroaction raisonnables peuvent être définies en fonction des périodes de négociation de chaque variété.

  • Il est possible d’introduire des stratégies de stop-loss et de se retirer en cas de perte importante.

  • Les algorithmes d’apprentissage automatique peuvent être combinés pour optimiser dynamiquement les paramètres de la stratégie.

Résumer

Cette stratégie est globalement une méthode de DCA très pratique. Elle prend en charge une bonne configuration de paramètres personnalisés et permet de configurer avec souplesse les règles d’ouverture et de fermeture des positions. La fonctionnalité de suivi des arrêts intégrée compense les lacunes des arrêts fixes.

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