Stratégie de trading quantitative K-line avec stop loss de suivi dynamique à un tiers

TRINITY ATR
Date de création: 2025-02-18 13:57:33 Dernière modification: 2025-02-18 13:57:33
Copier: 0 Nombre de clics: 345
1
Suivre
1617
Abonnés

Stratégie de trading quantitative K-line avec stop loss de suivi dynamique à un tiers

Aperçu

Il s’agit d’une stratégie de trading quantitative qui combine la méthode d’analyse des trois K-lignes de Bill Williams et la fonction de suivi dynamique des arrêts de pertes. Cette stratégie génère des signaux polyvalents clairs en analysant les caractéristiques structurelles des lignes K actuelles et précédentes, et utilise des mécanismes de suivi des arrêts de pertes configurables pour protéger les positions, permettant une entrée/sortie et une gestion des risques précises.

Principe de stratégie

La logique centrale de la stratégie repose sur les éléments clés suivants:

  1. Calcul de la troisième équivalence de la ligne K: Divisez la portée de chaque ligne K (le prix le plus élevé - le prix le plus bas) en trois équivalents pour obtenir la limite de la zone supérieure et de la zone inférieure.
  2. La classification des K-lignes: Les K-lignes sont divisées en plusieurs types en fonction de la position des prix d’ouverture et de clôture dans les sous-zones de troisième ordre. Par exemple, lorsqu’une ligne est ouverte dans la zone inférieure et fermée dans la zone supérieure, elle est considérée comme une forme de forte hausse.
  3. Règles de génération de signaux: déterminer un signal de transaction efficace en analysant en combinaison la forme de la ligne K actuelle et de la ligne K précédente. Par exemple, lorsque deux lignes K consécutives affichent des caractéristiques de force, le déclenchement de la multiplication des signaux.
  4. Stop-loss suivi dynamique: utilisez le prix le plus bas de la ligne K de la racine N précédente (plusieurs têtes) ou le prix le plus élevé (bure) comme point de stop-loss mobile pendant la période de temps indiquée.

Avantages stratégiques

  1. Logique claire: La stratégie utilise une méthode intuitive d’analyse de la structure de la ligne K. Les règles de négociation sont claires et faciles à comprendre.
  2. Gestion des risques: grâce à un mécanisme de suivi dynamique des arrêts de perte, il est possible de contrôler efficacement le risque de retrait tout en conservant une marge de profit suffisante.
  3. Adaptabilité: La stratégie peut être adaptée aux différents environnements de marché pour suivre les paramètres de stop loss et a une bonne adaptabilité.
  4. Le niveau d’automatisation est élevé: la génération de signaux et la gestion des positions sont entièrement automatisées, sans intervention humaine.

Risque stratégique

  1. Risque de choc du marché: Dans un contexte de choc horizontal, de fréquents signaux de fausse rupture peuvent être générés, entraînant des transactions excessives.
  2. Risque de sursaut: en cas de sursaut important, le stop de suivi peut ne pas être déclenché à temps, ce qui entraîne des pertes plus importantes que prévues.
  3. Sensitivité des paramètres: les paramètres sélectionnés pour suivre les pertes ont un impact significatif sur la performance de la stratégie. Une mauvaise configuration des paramètres peut entraîner des sorties prématurées ou une protection insuffisante.

Orientation de l’optimisation de la stratégie

  1. Augmentation des filtres d’environnement de marché: des indicateurs de tendance ou de volatilité peuvent être introduits pour ajuster dynamiquement les paramètres de stratégie dans différents environnements de marché.
  2. Optimisation des mécanismes d’arrêt des pertes: il peut être envisagé de combiner les indicateurs ATR pour définir des distances d’arrêt plus flexibles et améliorer l’adaptabilité des pertes.
  3. Introduction de la gestion des positions: la taille des positions peut être ajustée en fonction de l’intensité des signaux et de la dynamique de la volatilité du marché, permettant un contrôle plus précis des risques.
  4. Augmentation de l’optimisation des sorties: vous pouvez ajouter des objectifs de profit ou des indicateurs techniques pour aider à juger et optimiser le timing des sorties.

Résumer

Il s’agit d’une stratégie de trading quantifiée, structurée et logiquement claire, qui présente une bonne utilité en combinant l’utilisation de méthodes d’analyse technique classiques et de techniques modernes de gestion des risques. La stratégie a été conçue en tenant pleinement compte des besoins de la négociation en bourse, y compris les éléments clés tels que la génération de signaux, la gestion des positions et le contrôle des risques.

Code source de la stratégie
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-16 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)