L'idée principale est d'ouvrir des positions longues tous les jours à des heures fixes, et de définir différents niveaux de prise de profit et d'arrêt de perte pour chaque position pour réaliser une prise de profit et un arrêt de perte par lots.
La stratégie repose sur trois logiques clés:
La pyramide par étapes dans le temps
Utilisez lesessionTime
Paramètre permettant de définir une fenêtre de temps de négociation quotidienne, les positions longues pyramidales sont progressivement ouvertes sur le marché pendant cette fenêtre.
L'exposition au risque est calculée comme suit:
Ensemble correspondant au niveau de prise de profittakeProfit
et niveau de stop lossstopLoss
pour chaque position ouverte, de sorte que chaque position ait sa propre logique de prise de profit et d'arrêt des pertes pour réaliser des exécutions par lots.
Fermer toutes les positions à la fin de la fenêtre de temps
Choisissez si vous souhaitez fermer toutes les positions ouvertes pendant la fenêtre de temps à la fin de la fenêtre.
La stratégie présente les avantages suivants:
Diversification des risques: allouer le capital de manière uniforme à différentes positions afin de contrôler efficacement les pertes d'une seule position.
Les différentes positions ont des logiques indépendantes pour éviter les pertes massives.
Des paramètres personnalisables tels que les temps de pyramide maximaux, la fenêtre de temps quotidienne, les ratios de prise de profit/arrêt de perte, etc.
Une logique simple et claire, facile à comprendre.
Il y a aussi des risques:
Le risque de blocage de tout le capital si toutes les positions déclenchent un stop loss avant de réaliser un profit.
Il n'y a pas de limite au capital total des positions ouvertes par jour. Trop de positions peuvent dépasser la tolérance du capital en cas de situation de marché inhabituelle.
Une configuration incorrecte de la fenêtre de temps peut vous faire rater des opportunités de négociation.
La stratégie peut être améliorée par les aspects suivants:
Ajouter des conditions de position ouverte basées sur des indicateurs techniques pour éviter une pyramide imprudente.
Ajouter la limite de fonds propres totale journalière des positions ouvertes pour éviter de dépasser la tolérabilité des fonds propres.
Définir différents ratios de prise de profit/arrêt de perte pour différentes positions afin de réaliser une prise de profit et un arrêt de perte différenciés.
Ajouter des logiques pour relier le montant de la position au solde du pool de capitaux.
En conclusion, il s'agit d'un modèle de stratégie de trading de quantité très simple utilisant la méthodologie de pyramide par étapes dans le temps.
/*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)