Stratégie quantitative d'ajustement dynamique de position de grille de suivi de tendance

TTM EMA GRID DCA ATR SMA
Date de création: 2024-12-12 11:19:17 Dernière modification: 2024-12-12 11:19:17
Copier: 0 Nombre de clics: 641
1
Suivre
1617
Abonnés

Stratégie quantitative d’ajustement dynamique de position de grille de suivi de tendance

Aperçu

La stratégie est un système de négociation de grille dynamique basé sur les indicateurs TTM, qui détermine la direction de la tendance du marché en calculant les moyennes mobiles indicielles des hauts et des bas et déploie un système de négociation de grille autour des prix de référence mis à jour dynamiquement. La direction de la grille et les niveaux de prix s’ajustent en fonction de la dynamique de la tendance et les transactions sont exécutées lorsque les prix traversent un niveau de grille prédéfini.

Principe de stratégie

La logique centrale de la stratégie réside dans le calcul de l’état TTM, qui est réalisé par les étapes suivantes:

  1. Deux EMA sont calculées sur la base des paramètres de la période ttm: le point bas EMA ((lowMA) et le point haut EMA ((highMA)
  2. Deux niveaux de seuil sont définis entre le highMA et le lowMA:
    • lowThird: en dessous du tiers
    • highThird: position des deux tiers inférieurs
  3. Déterminez l’état du TTM en fonction de la position du cours de clôture par rapport à ces seuils:
    • Retour à 1 lorsque le prix de clôture est supérieur à HighThird (trend à la hausse)
    • Retour à 0 lorsque le prix de clôture est inférieur à lowThird (trend baissier)
    • Retour à -1 (état neutre) lorsque le prix de clôture se situe entre le lowThird et le highThird

Le système de trading de la grille s’adapte dynamiquement à l’état du TTM:

  1. Mettre à jour le prix et la direction de référence de la grille lorsque le statut du TTM change
  2. Le niveau des prix d’achat et de vente est calculé en fonction de la direction et de l’espacement de la grille.
  3. Effectuer une opération d’achat ou de vente correspondante lorsque le prix franchit le niveau de la grille

Avantages stratégiques

  1. Adaptabilité dynamique: la stratégie est capable d’ajuster dynamiquement la direction de la grille et le niveau des prix en fonction des tendances du marché, ce qui améliore l’adaptabilité et la rentabilité de la stratégie
  2. Contrôle des risques: gestion des positions avec des pourcentages fixes et contrôle efficace des marges de risque pour chaque transaction
  3. Paramètres réglables: les paramètres clés tels que le cycle TTM, le niveau de grille et l’intervalle peuvent être optimisés en fonction des différentes conditions du marché
  4. Mechanisme d’exécution clair: les signaux de transaction sont clairs, la logique d’exécution est simple et intuitive, facile à détecter et à utiliser en direct

Risque stratégique

  1. Délai de jugement de la tendance: l’indicateur TTM basé sur EMA présente un certain retard qui peut entraîner un retard dans le signal du point de basculement de la tendance
  2. Risque de choc des marchés: dans les marchés de choc horizontal, les commutations fréquentes de direction de la grille peuvent entraîner des pertes de transactions excessives et de frais de traitement
  3. La pression de la gestion des fonds: la nécessité d’une plus grande quantité de fonds lorsque plusieurs grilles fonctionnent simultanément peut affecter la faisabilité de la stratégie
  4. Effets des points de glissement: les transactions sur la grille à haute fréquence peuvent faire face à des points de glissement plus importants en cas de manque de liquidité, ce qui affecte la performance de la stratégie

Orientation de l’optimisation de la stratégie

  1. Les tendances ont été optimisées:
    • L’introduction d’analyses à cycles multiples pour améliorer l’exactitude des tendances
    • Confirmation de la tendance en combinaison avec d’autres indicateurs techniques tels que le RSI, le MACD
  2. Optimisation des paramètres de la grille:
    • Adaptation dynamique de l’espacement des grilles en fonction de la volatilité
    • Mise en place d’un mécanisme d’adaptation au niveau de la grille
  3. Amélioration de la gestion des fonds:
    • Une allocation dynamique des positions
    • Augmentation du mécanisme de parité des risques
  4. Les mécanismes d’application sont améliorés:
    • Augmentation des mécanismes d’arrêt et d’arrêt
    • Optimiser le timing d’exécution des commandes

Résumer

La stratégie permet d’obtenir un système de négociation adaptatif et à risque contrôlable en combinant le jugement de tendance TTM avec la négociation de grille dynamique. En ajustant dynamiquement la direction de la grille et le niveau de prix, la stratégie est mieux adaptée aux différents environnements de marché. Bien qu’il existe des risques inhérents, la stratégie présente une bonne valeur pratique et un bon potentiel de développement grâce à des paramètres et des mesures d’optimisation raisonnables.

Code source de la stratégie
/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TTM Grid Strategy", overlay=true)

// Input parameters
int ttmPeriod = input.int(6, minval=1, title="TTM Period")
int gridLevels = input.int(5, minval=2, title="Grid Levels")
float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)")

// Calculate TTM State
ttmState() =>
    lowMA = ta.ema(low, ttmPeriod)
    highMA = ta.ema(high, ttmPeriod)
    lowThird = (highMA - lowMA) / 3 + lowMA
    highThird = 2 * (highMA - lowMA) / 3 + lowMA

    if close > highThird
        1
    else if close < lowThird
        0
    else
        -1

// State tracking variables
var float gridBasePrice = 0.0
var int gridDirection = -1

// Determine grid state
updateGridState(float currentClose, int currentState) =>
    float newBasePrice = gridBasePrice
    int newDirection = gridDirection

    if currentState != -1 and currentState != gridDirection
        newBasePrice := currentClose
        newDirection := currentState
    
    [newBasePrice, newDirection]

// Calculate grid levels
calcGridLevels(float basePrice, int direction, int levels) =>
    float[] buyLevels = array.new_float(levels)
    float[] sellLevels = array.new_float(levels)

    for i = 1 to levels
        multiplier = i * gridSpacing
        if direction == 1  // Buy grid
            array.set(buyLevels, i-1, basePrice * (1 - multiplier))
            array.set(sellLevels, i-1, basePrice * (1 + multiplier))
        else  // Sell grid
            array.set(buyLevels, i-1, basePrice * (1 + multiplier))
            array.set(sellLevels, i-1, basePrice * (1 - multiplier))
    
    [buyLevels, sellLevels]

// Execute grid trades
executeGridTrades(float basePrice, int direction, int levels) =>
    [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels)

    for i = 0 to levels - 1
        float buyLevel = array.get(buyLevels, i)
        float sellLevel = array.get(sellLevels, i)

        if direction == 1  // Buy grid
            if low <= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if high >= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))
        else  // Sell grid
            if high >= buyLevel
                strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i))
            if low <= sellLevel
                strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i))

// Main strategy logic
currentState = ttmState()
[newGridBasePrice, newGridDirection] = updateGridState(close, currentState)

// Update global variables
if newGridBasePrice != gridBasePrice
    gridBasePrice := newGridBasePrice
if newGridDirection != gridDirection
    gridDirection := newGridDirection

// Execute grid trades
executeGridTrades(newGridBasePrice, newGridDirection, gridLevels)

// Visualization
plotColor = newGridDirection == 1 ? color.green : color.red
plot(newGridBasePrice, color=plotColor, style=plot.style_cross)