Une stratégie quantitative simple basée sur l'ajout de positions par étapes temporelles


Date de création: 2023-12-27 17:39:40 Dernière modification: 2023-12-27 17:39:40
Copier: 0 Nombre de clics: 684
1
Suivre
1623
Abonnés

Une stratégie quantitative simple basée sur l’ajout de positions par étapes temporelles

Aperçu

Cette stratégie est une stratégie simple qui utilise la méthode de l’augmentation de la position de l’échelle de temps pour effectuer des transactions quantitatives. L’idée principale de la stratégie est d’ouvrir plusieurs positions chaque jour à des heures fixes, puis de définir des conditions de stop-loss différentes pour chaque position, ce qui permet de réaliser des stop-loss ou des stop-loss par lots.

Principe de stratégie

La stratégie est basée sur trois logiques clés:

  1. L’échelle de temps est en hausse

UtilisationsessionTimeLe paramètre définit une période de négociation d’une journée pendant laquelle chaque jour d’ouverture de la bourse, le montant de la mise en position est progressivement augmenté de manière FIXED, la distribution moyenne du nombre de positions maximales dans le pool de fonds.

  1. Stop loss personnalisé

Pour chaque ordre d’ouverture de position, définissez un point d’arrêt correspondanttakeProfitet le point de rupturestopLossChaque commande a une logique de stop-loss indépendante, permettant ainsi de réaliser des stops-loss par lots.

  1. La période de clôture de la transaction

À la fin de la période de négociation intra-journée, il est possible de choisir d’effectuer un placement ou non sur tous les ordres qui n’ont pas été bloqués pendant cette période.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. La diversification des risques, qui consiste à répartir les fonds du pool entre les différentes commandes, permet de contrôler efficacement la perte d’une seule commande.

  2. Le blocage des pertes par lots, avec une logique de blocage des pertes indépendante pour chaque commande, empêche la perte de toutes les commandes en même temps.

  3. La configuration est flexible et permet de personnaliser les paramètres tels que le nombre maximal de mises en position, la période de négociation quotidienne, le taux de stop-loss.

  4. La logique de la stratégie est simple et claire.

Risque stratégique

Cette stratégie comporte aussi des risques:

  1. Il y a un risque d’évitement, qui peut être évité par la configuration raisonnable d’un ratio d’arrêt, si toutes les commandes n’ont pas atteint la ligne d’arrêt et ont déclenché la ligne d’arrêt correspondante.

  2. Il n’y a pas de limite au montant total de la mise en place par jour. En cas de circonstances exceptionnelles, il est possible que le nombre d’ordres mis en place simultanément dépasse la capacité financière.

  3. Une mauvaise configuration de la période peut entraîner des opportunités manquées. Il est recommandé de configurer la période de négociation en fonction de la période d’activité de la variété de négociation cible.

Optimisation de la stratégie

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Ajout d’une logique d’évaluation des conditions d’ouverture de position, permettant d’ouvrir une position uniquement lorsque le signal d’un indicateur technique spécifique est satisfait, afin d’éviter une augmentation aveugle des positions.

  2. Augmenter le plafond du montant total des placements par jour afin de prévenir le dépassement de la capacité de la réserve de fonds.

  3. Pour chaque ordre, définissez un ratio de stop-loss différent, permettant ainsi un stop-loss différentiel.

  4. Logique d’augmentation du nombre d’ordres liés au solde du pool de fonds, afin que le nombre d’ordres soit lié aux fonds disponibles.

Résumer

L’ensemble de la stratégie est un modèle de stratégie très simple qui utilise l’idée d’une hiérarchie temporelle pour effectuer des transactions quantitatives. La logique de la stratégie est claire, mais il existe également un certain risque et une marge d’optimisation, sur laquelle les développeurs peuvent optimiser de manière appropriée, ce qui en fait une stratégie quantitative plus stable et plus fiable.

Code source de la stratégie
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © A3Sh

//@version=5
strategy("Simple_Pyramiding", overlay=true, pyramiding=99, initial_capital=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.075, close_entries_rule='FIFO')

// Study of a Simple DCA strategy that opens a position every day at a specified time.
// A position is opened at the start time of the Timeframe.
// Positions exit individually when the take profit level is triggered.
// Option to activate Stop Loss and/or Position exit at the end of the Timeframe


// Backtest Window
start_time   = input(defval=timestamp("01 April 2021 20:00"), group = "Backtest Window", title="Start Time")
end_time     = input(defval=timestamp("01 Aug 2022 20:00"),  group = "Backtest Window", title="End Time")
window() => true


// Inputs
posCount     = input.int    (6,           group = "Risk",         title = "Max Amount of DCA Entries")
takeProfit   = input.float  (2.5,         group = "Risk",         title = "Take Profit %")
slSwitch     = input.bool   (true,        group = "Risk",         title = "Activate Stop Loss")
stopLoss     = input.float  (9,           group = "Risk",         title = "Stop Loss %")
sessionTime =  input("1800-1700", group = "DCA Settings", title = "DCA Order Timeframe", tooltip="Open order at the start/If ativated, close order at the end")
exitDCA     =  input.bool   (false,       group = "DCA Settings", title = "Exit DCA Entry at end of Timeframe")


// Order size based on max amount of pyramid orders
q = (strategy.equity  / posCount) / open


// Timeframe for opening and closing a DCA order
// example taken from https://stackoverflow.com/questions/69230164/pinescript-basic-question-open-a-trade-at-a-set-time-each-day
t       = time("D", sessionTime)
isStart = na(t[1]) and not na(t) or t[1] < t
isEnd   = na(t) and not na(t[1]) or t[1] < t
bgcolor(t ? color.new(color.blue,95) : na, title = " TimeFrame Color")


// Create DCA Entries
entry_price = 0.0
if isStart and window() 
    for i = 0 to strategy.opentrades
        if strategy.opentrades == i
            entry_price := close
            entry_id = "PE_" + str.tostring(i + 1) 
            strategy.entry(id = entry_id, direction=strategy.long, limit=entry_price, qty=q)
        if strategy.opentrades == posCount
            break
            
 
//Exit DCA Entries when take profit or stop loss is triggered
if strategy.opentrades > 0 and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, profit = close * takeProfit / 100 / syminfo.mintick, loss = slSwitch ? close * stopLoss /100 / syminfo.mintick :na)
        

//Exit DCA Entries at end of DCA Timeframe
if strategy.opentrades > 0 and exitDCA and isEnd and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, stop = close)