Die Ressourcen sind geladen. Beförderung...

Anpassungsfähige Handelsstrategie für mehrjährige Fractal-Breakout-Order

Schriftsteller:ChaoZhang, Datum: 2024-12-27 15:49:16
Tags:OBS.D.- Nein.ATR

img

Übersicht

Diese Strategie ist ein anpassungsfähiges Handelssystem, das auf Fraktaltheorie und Auftragsblockanalyse basiert. Es erfasst hochwahrscheinliche Handelsmöglichkeiten, indem es wichtige Unterstützungs- und Widerstandsniveaus in der Marktstruktur identifiziert, indem es Fraktal-Breakout-Signale mit Auftragsblockbestätigung kombiniert. Die Strategie integriert mehrere technische Indikatoren, einschließlich Fraktal-Indikatoren, dynamischen Auftragsblöcken und Preis-Breakout-Bestätigungssystemen, um eine präzise Positionierung von Marktwendepunkten und genaue Timing der Trades zu erreichen.

Strategieprinzipien

Die Kernlogik der Strategie basiert auf drei Hauptpfeilern: Erstens, kontinuierliche Überwachung von Markthochs und Tiefs durch das Fraktalberechnungsmodul, um potenzielle Trendumkehrbereiche zu identifizieren; zweitens, Festlegung von Angebot und Nachfragezonen an wichtigen Preisniveaus durch Orderblockanalyse; und schließlich Überprüfung der Gültigkeit von Preisbreaches durch das Breakout-Bestätigungssystem. Wenn der Preis über ein Fraktal bricht und die Gültigkeit bestätigt, erstellt das System einen Nachfragezonen-Orderblock im letzten roten Kerzenbereich und eröffnet eine Long-Position; wenn der Preis unter ein Fraktal bricht und die Gültigkeit bestätigt, erstellt das System einen Angebotszone-Order im letzten grünen Kerzenbereich und eröffnet eine Short-Position. Die Strategie enthält auch dynamische Orderblock-Farbupdates, um die relative Beziehung zwischen Preis und Bestellblock visuell anzuzeigen.

Strategische Vorteile

  1. Starke Anpassungsfähigkeit: Die Strategie kann die Position und Größe des Auftragsblocks dynamisch an die Marktbedingungen anpassen.
  2. Mehrere Bestätigungsmechanismen: Kombiniert Fraktal-Breakouts, Orderblockbestätigung und Preisbewegungsanalyse, um das Risiko eines falschen Signals zu reduzieren.
  3. Umfassendes Risikomanagement: Hilft den Händlern, den Status der Strategie in Echtzeit durch ein klares visuelles Feedback und eine Statuscheckliste zu überwachen.
  4. Ausgezeichnete Visualisierung: Bietet eine intuitive grafische Schnittstelle, einschließlich Fraktalmarker, Anzeige von Auftragsblöcken und Status-Checklisten.
  5. Flexible Parameter: Ermöglicht es Benutzern, wichtige Parameter wie Fraktalperiode und Breakout-Typ nach persönlichem Handelsstil anzupassen.

Strategische Risiken

  1. Marktvolatilitätsrisiko: Kann in stark volatilen Märkten falsche Ausbruchssignale erzeugen, die zusätzliche Filtermechanismen erfordern.
  2. Slipperrisiko: Die Auftragsausführungspreise können in Märkten mit unzureichender Liquidität von den idealen Einstiegspunkten abweichen.
  3. Abhängigkeit von Trends: Die Strategieergebnisse sind möglicherweise nicht so ideal auf den unterschiedlichen Märkten wie auf den Trends.
  4. Parameterempfindlichkeit: Unterschiedliche Einstellungen der Fraktalperiode können zu signifikant unterschiedlichen Handelsergebnissen führen.
  5. Rechenressourcenverbrauch: Komplexe Visualisierungsfunktionen und Echtzeitberechnungen können die Systemlast erhöhen.

Optimierungsrichtlinien

  1. Einführung eines Volatilitätsfilters: Optimierung der Handelssignale durch ATR oder andere Volatilitätsindikatoren.
  2. Hinzufügen eines Trendbestätigungsmechanismus: Verbesserung der Signalzuverlässigkeit durch Kombination von gleitenden Durchschnitten oder anderen Trendindikatoren.
  3. Perfekter Stop-Loss-Mechanismus: Entwerfen einer dynamischen Stop-Loss-Strategie auf der Grundlage der Order-Blockstruktur.
  4. Optimierung der Auftragsblockgröße: Dynamische Anpassung der Auftragsblockgröße anhand der Marktvolatilität.
  5. Volumenanalyse hinzufügen: Überprüfen Sie die Breakout-Gültigkeit durch Einbeziehung von Volumendaten.

Zusammenfassung

Dies ist eine zusammengesetzte Handelsstrategie, die mehrere Dimensionen der technischen Analyse integriert und ein vollständiges Handelssystem mit Fraktaltheorie und Auftragsblockanalyse in ihrem Kern aufbaut. Die Stärken der Strategie liegen in ihrer Anpassungsfähigkeit und mehreren Bestätigungsmechanismen, aber es muss auch auf die Auswirkungen des Marktumfeldes auf die Strategieleistung geachtet werden. Durch die vorgeschlagenen Optimierungsrichtungen können die Zuverlässigkeit und Stabilität der Strategie weiter verbessert werden.


/*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)

Verwandt

Mehr