
Das Multi-Source-Confirmation-Indicator-Retesting-Framework ist ein professionelles, quantitatives Trading-Testsystem, das speziell für die Bewertung von benutzerdefinierten Indikatoren und Trading-Signalen entwickelt wurde. Das Framework integriert verschiedene Signal-Detektionsmethoden, ein Advanced-Confirmation-Filtersystem und professionelle Risikomanagement-Funktionen, die es Händlern ermöglichen, ihre Handelsstrategien umfassend zu testen. Der Kern des Systems liegt in seiner Flexibilität, die es Benutzern ermöglicht, mit jedem benutzerdefinierten Indikator oder einer eingebauten Studie zu verbinden und Signale auf verschiedene Arten zu erfassen, einschließlich Wertänderungen, Kreuzungen und Tiefpunkt-Trigger.
Das Kernprinzip der Strategie ist die Bereitstellung einer umfassenden Testumgebung, die es Händlern ermöglicht, die Wirksamkeit verschiedener Indikatoren zu bewerten. Der Code umfasst folgende wichtige Funktionen:
Verschiedene SignalerkennungsmethodenStrategie: Die Funktionen detectLongSignal () und detectShortSignal () ermöglichen fünf verschiedene Signalerkennungsmethoden:
Bestätigungssystem: Durch die Funktionen longConfirmation ((() und shortConfirmation ((() wird ein Mehrquellen-Bestätigungssystem realisiert, das verlangt, dass ein Handelssignal innerhalb einer bestimmten Rücklaufzeit zusätzliche Bedingungen erfüllt, um ausgeführt zu werden. Diese Funktion reduziert die Falschsignale erheblich.
Eintritts- und AusstiegslogikDie Ein- und Ausstiegsbedingungen werden gemeinsam durch das Signalerkennungs- und Bestätigungssystem festgelegt, während der Ausstieg auf verschiedene Arten realisiert werden kann:
Papen LogikDie Strategie verschiebt automatisch den Stop-Loss zum Einstiegspreis, um die erzielten Gewinne zu schützen, wenn der Handel die angegebene Anzahl von BreakEvenTrigger erreicht. Dies wird durch die Erfassung der Differenz zwischen dem aktuellen Preis und dem Einstiegspreis und die Änderung des Stop-Loss-Niveaus bei Erreichen der Punkte, die der BreakEvenTrigger festgelegt hat, erreicht.
Visualisierung und ÜberwachungStrategie: Die Plotshape-Funktion wird verwendet, um alle Ein- und Ausstiegssignale auf der Grafik zu markieren und eine Echtzeit-Statustabelle über table.new zu erstellen, die die aktuellen Strategie-Einstellungen und den Status des Handels anzeigt.
Hohe FlexibilitätDie Strategie erlaubt es, jeden Indikator als Signalquelle zu verbinden, so dass er für verschiedene Handelsstile und Marktbedingungen geeignet ist. Der Benutzer kann verschiedene Kombinationen von Indikatoren testen, indem er einfach die Eingabequelle ändert.
MehrfachfilterungDurch die Bestätigungsfilter ist die Strategie in der Lage, mehrere Bedingungen gleichzeitig zu erfüllen, um einen Handel auszuführen, was die Fehlsignale erheblich reduziert. Diese Methode der Mehrquellenbestätigung simuliert die Praxis von professionellen Händlern, die mehrere Indikatoren für die Übereinstimmung suchen, bevor sie ihre Handelsentscheidungen treffen.
Umfassendes RisikomanagementDie Strategie beinhaltet professionelle Risikomanagementfunktionen wie:
Echtzeit-Feedback und ÜberwachungDurch die Signalmarkierung und die Statustabelle kann der Trader den Betriebszustand und die Leistung der Strategie intuitiv erfahren, um die Debugging und Optimierung zu erleichtern.
KompatibilitätDie Strategie ist mit Pine Script v6 kompatibel, kann auf jeder Handelsplattform, die diese Version unterstützt, ausgeführt werden und unterstützt die Rückmeldung, die es Händlern ermöglicht, die historische Leistung zu bewerten.
Signal-Erkennung AbhängigkeitDie Effektivität der Strategie hängt stark von der gewählten Signaldetektionsmethode und der Threshold-Einstellung ab. Eine unsachgemäße Konfiguration kann zu zu vielen falschen Signalen oder verpassten wichtigen Handelsmöglichkeiten führen. Es wird empfohlen, dass Händler verschiedene Kombinationen von Einstellungen unter verschiedenen Marktbedingungen testen, um die am besten geeignete Signaldetektionsmethode für einen bestimmten Indikator zu finden.
Bestätigung von SystemfilterrisikenDie Lösung besteht darin, die Strenge des Bestätigungssystems auszugleichen oder für verschiedene Marktbedingungen unterschiedliche Bestätigungsstandards zu entwickeln.
Die Grenzen der Fixed Stop/Stop LossDie Verwendung von Stop/Loss mit festen Punkten ist möglicherweise nicht für alle Marktbedingungen geeignet, insbesondere in Märkten mit hoher Volatilität. Es wird empfohlen, die Stop/Loss-Punkte mit einem Indikator für Marktvolatilität (z. B. ATR) zu koppeln, um sich an unterschiedliche Marktbedingungen anzupassen.
Unterschiede zwischen Rückspürung und FestplatteAlle Rückmeldungsergebnisse sind mit dem Risiko verbunden, dass sie sich von dem realen Handel unterscheiden, da die Rückmeldung keine vollständigen Anpassungen der Gleitpunkte, der Transaktionskosten und der Liquiditätsprobleme ermöglicht. Der Händler sollte die Strategie in einer simulierten Umgebung überprüfen, bevor er mit dem realen Handel beginnt.
Komplexität des CodesDie Komplexität der Strategien kann die Debugging und Wartung erschweren. Detaillierte Kommentare und modulare Designs können helfen, diese Komplexität zu verwalten und die Wartbarkeit des Codes zu gewährleisten.
Dynamische RisikomanagementDie derzeitige Strategie verwendet Stop/Loss mit festen Punkten, die für ein dynamisches Risikomanagementsystem basierend auf Marktvolatilität optimiert werden können. Zum Beispiel kann der Stop/Loss-Punkt mit dem ATR (Average True Range) verknüpft werden, um den Stop-Loss-Bereich zu erweitern, wenn die Volatilität steigt, und den Stop-Loss-Bereich zu verkleinern, wenn die Volatilität sinkt.
Erweiterte BestätigungDas bestehende Bestätigungssystem kann erweitert werden, um weitere Filterbedingungen zu enthalten, wie z. B. Zeitfilter ((Vermeiden Sie den Handel in bestimmten Marktzeiten), Volatilitätsfilter ((Vermeiden Sie den Handel in einem niedrig volatilen Umfeld) oder Trendfilter ((Handeln Sie nur in einer Richtung, die mit den wichtigsten Trends übereinstimmt)). Dies wird die Falschsignale weiter reduzieren und die Stabilität der Strategie verbessern.
PositionsverwaltungDie Strategie kann die Verwaltung von Positionen in Teilen hinzufügen, um die Ein- und Ausgabe von Positionen in Teilen zu ermöglichen, anstatt die gesamte Position auf einmal zu eröffnen oder zu platzieren. Diese Methode verringert das Risiko von Ein- und Ausgabepositionen und kann die Gesamtstrategie verbessern.
Maschinelle LernoptimierungDie Strategieparameter können automatisch anhand von historischen Daten angepasst werden, um sie an unterschiedliche Marktumgebungen anzupassen.
Erhöhung der LeistungsindikatorenObwohl die Strategie bereits eine grundlegende Statusüberwachung bietet, können weitere Performance-Indikatoren, wie die Sharpe Ratio, die Maximum-Rückzahlung und die Verlust-Verlust-Rate, hinzugefügt werden, um eine umfassendere Bewertung der Strategie zu ermöglichen. Diese Indikatoren können in der Statustabelle angezeigt werden, um den Händlern zu helfen, die Strategie-Performance besser zu bewerten.
Die Multi-Source Confirmation Indicator Feedback-Framework ist ein voll funktionsfähiges, quantitatives Trading-Testsystem, das durch die Integration mehrerer Signal-Detektionsmethoden, mehrerer Bestätigungssysteme und professioneller Risikomanagement-Funktionen Händlern ein leistungsfähiges Werkzeug zur Bewertung und Optimierung ihrer Handelsstrategien bietet. Die Hauptvorteile des Frameworks liegen in seiner Flexibilität und Anpassbarkeit, die es Händlern ermöglicht, fast jede Art von Indicator-Kombination und Signal-Generierung zu testen.
Trotz einiger inhärenter Risiken und Einschränkungen, wie die Einschränkungen der Signalerkennungsabhängigkeit und der festen Risikoparameter, können diese Probleme durch empfohlene Optimierungsrichtungen wie die Implementierung von dynamischem Risikomanagement, die Erweiterung der Bestätigungssysteme und die Einführung von Positionsverwaltung in Teilen behoben werden. Durch diese Optimierungen kann der Rahmen seine Effektivität und Anpassungsfähigkeit weiter verbessern und zu einem wertvollen Werkzeug in der Arsenal der Händler werden.
Zusammenfassend stellt der Multi-Source-Confirmation-Meter-Retesting-Framework eine professionelle, systematische Methode zur Prüfung und Bewertung von Handelsstrategien dar, die über die einfache Signalgenerierung hinausgeht und Risikomanagement und mehrschichtige Bestätigung einbezieht, die wichtige Bestandteile eines erfolgreichen Handelssystems sind. Für Händler, die eine benutzerdefinierte Handelsstrategie erstellen und testen möchten, bietet der Framework eine umfassende Lösung.
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("FULLY FUNCTIONAL INDICATOR TESTER", overlay=true, margin_long=100, margin_short=100)
// Entry/Exit Signal Inputs
longEntry = input.source(close, 'Long Entry Trigger', 'Source for long signal (connect your indicator here)')
shortEntry = input.source(close, 'Short Entry Trigger', 'Source for short signal (connect your indicator here)')
activateLongExit = input.bool(false, 'Activate Long Exit Signals')
longExit = input.source(high, 'Long Exit Trigger', 'Source for long exit signal')
activateShortExit = input.bool(false, 'Activate Short Exit Signals')
shortExit = input.source(low, 'Short Exit Trigger', 'Source for short exit signal')
// Signal Detection Method
signalMethod = input.string('Value Change', 'Signal Detection Method', options=['Value Change', 'Crossover Above', 'Crossover Below', 'Value Above Threshold', 'Value Below Threshold'])
signalThreshold = input.float(0, 'Signal Threshold', tooltip='Threshold value for signal detection methods')
// Take Profit and Stop Loss
fixedTp = input.int(0, 'Static TP (in ticks)', 0, tooltip='0 = disabled')
initialSL = input.int(0, 'Initial SL (in ticks)', 0, tooltip='0 = disabled')
// Break Even Settings
breakEvenTrigger = input.int(0, 'Break Even Trigger (in ticks)', 0, tooltip='Move SL to break even after this many ticks profit. 0 = disabled')
// Confluence Settings
useConfluence = input.bool(false, 'Use Confluence Filter', 'Activate confluence filter for entries')
longConfluence = input.source(high, 'Long Signal Confluence', 'Source for long confluence filter')
longConfluenceTrigger = input.source(low, 'Long Confluence Trigger', 'Value that must be below confluence source for long entry')
shortConfluence = input.source(high, 'Short Signal Confluence', 'Source for short confluence filter')
shortConfluenceTrigger = input.source(low, 'Short Confluence Trigger', 'Value that must be above confluence source for short entry')
confluenceLookback = input.int(0, 'Confluence Lookback Period', 0, 10, 1, 'Number of candles to look back for confluence')
// Variables to track entry prices for break-even
var float longEntryPrice = na
var float shortEntryPrice = na
// Signal Detection Functions
detectLongSignal() =>
switch signalMethod
'Value Change' => longEntry != longEntry[1] and longEntry > 0
'Crossover Above' => ta.crossover(longEntry, signalThreshold)
'Crossover Below' => ta.crossunder(longEntry, signalThreshold)
'Value Above Threshold' => longEntry > signalThreshold and longEntry[1] <= signalThreshold
'Value Below Threshold' => longEntry < signalThreshold and longEntry[1] >= signalThreshold
=> false
detectShortSignal() =>
switch signalMethod
'Value Change' => shortEntry != shortEntry[1] and shortEntry > 0
'Crossover Above' => ta.crossover(shortEntry, signalThreshold)
'Crossover Below' => ta.crossunder(shortEntry, signalThreshold)
'Value Above Threshold' => shortEntry > signalThreshold and shortEntry[1] <= signalThreshold
'Value Below Threshold' => shortEntry < signalThreshold and shortEntry[1] >= signalThreshold
=> false
detectLongExit() =>
switch signalMethod
'Value Change' => longExit != longExit[1] and longExit > 0
'Crossover Above' => ta.crossover(longExit, signalThreshold)
'Crossover Below' => ta.crossunder(longExit, signalThreshold)
'Value Above Threshold' => longExit > signalThreshold and longExit[1] <= signalThreshold
'Value Below Threshold' => longExit < signalThreshold and longExit[1] >= signalThreshold
=> false
detectShortExit() =>
switch signalMethod
'Value Change' => shortExit != shortExit[1] and shortExit > 0
'Crossover Above' => ta.crossover(shortExit, signalThreshold)
'Crossover Below' => ta.crossunder(shortExit, signalThreshold)
'Value Above Threshold' => shortExit > signalThreshold and shortExit[1] <= signalThreshold
'Value Below Threshold' => shortExit < signalThreshold and shortExit[1] >= signalThreshold
=> false
// Confluence confirmation functions
longConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := longConfluenceTrigger < longConfluence
else
for x = 0 to confluenceLookback
if longConfluenceTrigger[x] < longConfluence[x]
confirmation := true
break
confirmation
shortConfirmation() =>
confirmation = false
if confluenceLookback == 0
confirmation := shortConfluenceTrigger > shortConfluence
else
for x = 0 to confluenceLookback
if shortConfluenceTrigger[x] > shortConfluence[x]
confirmation := true
break
confirmation
// Entry conditions
longConfirmed = useConfluence ? longConfirmation() : true
shortConfirmed = useConfluence ? shortConfirmation() : true
longCondition = detectLongSignal() and longConfirmed
shortCondition = detectShortSignal() and shortConfirmed
// Entry logic
if (longCondition and strategy.opentrades == 0)
strategy.entry('Long', strategy.long)
longEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Long Exit', 'Long',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
if (shortCondition and strategy.opentrades == 0)
strategy.entry('Short', strategy.short)
shortEntryPrice := close
// Set initial exit orders
if fixedTp > 0 or initialSL > 0
strategy.exit('Short Exit', 'Short',
profit = fixedTp > 0 ? fixedTp : na,
loss = initialSL > 0 ? initialSL : na,
comment_profit = 'TP Hit',
comment_loss = 'SL Hit')
// Custom exit signal logic
if (activateLongExit and detectLongExit() and strategy.position_size > 0)
strategy.close('Long', 'Custom Long Exit')
if (activateShortExit and detectShortExit() and strategy.position_size < 0)
strategy.close('Short', 'Custom Short Exit')
// Break-even logic
if (breakEvenTrigger > 0)
// Long position break-even
if (strategy.position_size > 0 and not na(longEntryPrice))
ticksProfit = math.round((high - longEntryPrice) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Long Exit', 'Long', stop = longEntryPrice, comment_loss = 'Break Even')
// Short position break-even
if (strategy.position_size < 0 and not na(shortEntryPrice))
ticksProfit = math.round((shortEntryPrice - low) / syminfo.mintick)
if (ticksProfit >= breakEvenTrigger)
strategy.exit('Short Exit', 'Short', stop = shortEntryPrice, comment_loss = 'Break Even')
// Reset entry prices when no position
if (strategy.position_size == 0)
longEntryPrice := na
shortEntryPrice := na
// Plot signals for debugging
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(activateLongExit and detectLongExit() and strategy.position_size > 0, title='Long Exit', location=location.abovebar, color=color.orange, style=shape.xcross, size=size.small)
plotshape(activateShortExit and detectShortExit() and strategy.position_size < 0, title='Short Exit', location=location.belowbar, color=color.orange, style=shape.xcross, size=size.small)
// Display current settings in a table for easy reference
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
table.cell(infoTable, 0, 0, "Signal Method:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 0, signalMethod, text_color=color.black)
table.cell(infoTable, 0, 1, "Threshold:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 1, str.tostring(signalThreshold), text_color=color.black)
table.cell(infoTable, 0, 2, "TP (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 2, str.tostring(fixedTp), text_color=color.black)
table.cell(infoTable, 0, 3, "SL (ticks):", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 3, str.tostring(initialSL), text_color=color.black)
table.cell(infoTable, 0, 4, "Break Even:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 4, str.tostring(breakEvenTrigger), text_color=color.black)
table.cell(infoTable, 0, 5, "Confluence:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 5, useConfluence ? "ON" : "OFF", text_color=color.black)
table.cell(infoTable, 0, 6, "Position:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 6, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT", text_color=color.black)
table.cell(infoTable, 0, 7, "Status:", text_color=color.black, bgcolor=color.gray)
table.cell(infoTable, 1, 7, "FULLY FUNCTIONAL", text_color=color.green)