Les ressources ont été chargées... Je charge...

Stratégie de négociation adaptative de bloc d'ordre de rupture fractal à plusieurs périodes

Auteur:ChaoZhang est là., Date: 2024-12-27 à 15h49
Les étiquettes:ObésitéSD- Je vous en prie.ATR

img

Résumé

Cette stratégie est un système de trading adaptatif basé sur la théorie fractale et l'analyse des blocs d'ordres. Elle capture des opportunités de trading à haute probabilité en identifiant les niveaux de support et de résistance clés dans la structure du marché, en combinant les signaux de rupture fractale avec la confirmation des blocs d'ordres.

Principes de stratégie

La logique de base de la stratégie repose sur trois piliers principaux: d'abord, surveiller en permanence les hauts et les bas du marché via le module de calcul fractal pour identifier les zones de renversement de tendance potentielles; deuxièmement, établir des zones d'offre et de demande aux niveaux de prix clés grâce à l'analyse des blocs d'ordres; et enfin, vérifier la validité des ruptures de prix via le système de confirmation de rupture. Lorsque le prix dépasse un fractal et confirme la validité, le système crée un bloc d'ordre de zone de demande dans la zone de bougie rouge récente et ouvre une position longue; lorsque le prix dépasse un fractal et confirme la validité, le système crée un ordre de zone d'offre dans la zone de bougie verte récente et ouvre une position courte.

Les avantages de la stratégie

  1. Une grande adaptabilité: la stratégie peut ajuster dynamiquement la position et la taille des blocs d'ordres en fonction des conditions du marché.
  2. Mécanismes de confirmation multiples: Combine les ruptures fractales, la confirmation des blocs d'ordres et l'analyse de l'action des prix pour réduire le risque de faux signaux.
  3. Gestion complète des risques: aide les traders à surveiller l'état de la stratégie en temps réel grâce à une rétroaction visuelle claire et à une liste de contrôle de l'état.
  4. Excellente visualisation: fournit une interface graphique intuitive comprenant des marqueurs fractaux, l'affichage des blocs d'ordre et la liste de contrôle de l'état.
  5. Paramètres flexibles: permet aux utilisateurs d'ajuster les paramètres clés tels que la période fractale et le type de rupture en fonction de leur style de trading personnel.

Risques stratégiques

  1. Risque de volatilité du marché: peut générer de faux signaux de rupture sur des marchés très volatils, nécessitant des mécanismes de filtrage supplémentaires.
  2. Risque de glissement: les prix d'exécution des ordres peuvent s'écarter des points d'entrée idéaux sur les marchés où la liquidité est insuffisante.
  3. Dépendance de la tendance: les performances de la stratégie peuvent ne pas être aussi idéales sur les marchés en évolution que sur les marchés en évolution.
  4. Sensibilité des paramètres: les différents réglages de la période fractale peuvent entraîner des résultats de négociation significativement différents.
  5. Consommation de ressources informatiques: des fonctionnalités de visualisation complexes et des calculs en temps réel peuvent augmenter la charge du système.

Directions d'optimisation

  1. Introduction d'un filtre de volatilité: Optimiser les signaux de négociation au moyen de l'ATR ou d'autres indicateurs de volatilité.
  2. Ajouter un mécanisme de confirmation de tendance: améliorer la fiabilité du signal en combinant des moyennes mobiles ou d'autres indicateurs de tendance.
  3. Mécanisme de stop-loss parfait: concevoir une stratégie de stop-loss dynamique basée sur la structure des blocs d'ordres.
  4. Optimiser la taille du bloc d'ordres: ajuster dynamiquement la taille du bloc d'ordres en fonction de la volatilité du marché.
  5. Ajouter une analyse de volume: vérifier la validité de la rupture en incorporant des données de volume.

Résumé

Il s'agit d'une stratégie de trading composite qui intègre plusieurs dimensions de l'analyse technique, construisant un système de trading complet avec la théorie fractale et l'analyse des blocs d'ordres au cœur.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)

Relationnée

Plus de