Dreifache Standardabweichung – Bollinger-Band-Durchbruch – quantitative Handelsstrategie kombiniert mit 100-Tage-Durchschnittsoptimierung

MA BB SMA SD
Erstellungsdatum: 2024-12-13 11:20:13 zuletzt geändert: 2024-12-13 11:20:13
Kopie: 3 Klicks: 483
1
konzentrieren Sie sich auf
1617
Anhänger

Dreifache Standardabweichung – Bollinger-Band-Durchbruch – quantitative Handelsstrategie kombiniert mit 100-Tage-Durchschnittsoptimierung

Überblick

Die Strategie ist eine quantitative Handelsstrategie, die auf einem Brin-Band-Breakout basiert, mit einer 3-fachen Standardabweichung und einer 1-fachen Standardabweichung, wobei der 100-Tage-Moving-Average als Mittelbahn verwendet wird. Die Strategie erfasst die langfristigen Trends hauptsächlich durch die Erfassung von Kurs-Break-Up-Trends und nutzt Down-Tracks als Stop-Signal.

Strategieprinzip

Die Kernprinzipien der Strategie basieren auf den statistischen Merkmalen des Brin-Bands. Die oberen Bahnen verwenden eine 3-fache Standardabweichung, was bedeutet, dass die Wahrscheinlichkeit, dass der Preis die Oberbahn durchbricht, unter der Annahme einer normalen Verteilung nur 0,15% beträgt. Daher weisen die Durchbrüche häufig auf eine deutliche Trendbildung hin. Die mittleren Bahnen verwenden einen 100-Tage-Moving-Average, der lange genug ist, um kurzfristige Marktlärm zu filtern.

Strategische Vorteile

  1. Trendschnappen: Durch eine Einstellung mit einer Dreifachen Standardabweichung können wichtige Trendbrechungschancen effektiv erfasst werden.
  2. Risikokontrolle ist vernünftig: Einmalige Standarddifferenz als Stop-Line und eher konservative Risikokontrolle.
  3. Die Parameter sind flexibel: Die Standarddifferenz-Mehrzahl und die Moving-Average-Periode für den Auf- und Abstieg können an die Merkmale des Marktes angepasst werden.
  4. Systematisch: Strategische Logik ist klar, die Rückverfolgung funktioniert, und die Performance der Transaktionen kann genau gemessen werden.
  5. Weite Anwendbarkeit: Es kann in mehreren Bereichen wie dem Aktienmarkt und dem Kryptowährungsmarkt angewendet werden.

Strategisches Risiko

  1. Falsche Durchbruchrisiken: Der Markt kann nach einem kurzfristigen Durchbruch schnell zurückgehen, was zu falschen Signalen führt.
  2. Große Rückzüge: Große Rückzüge sind in einem stark schwankenden Markt möglich.
  3. Das Risiko einer Verzögerung: Die 100-Tage-Durchschnittslinie ist etwas verzögerlich und kann einige schnelle Ereignisse verpassen.
  4. Marktumfeldabhängigkeit: In einem unsicheren Markt kann es zu häufigen Ein- und Ausflügen kommen, die zu hohen Transaktionskosten führen.

Richtung der Strategieoptimierung

  1. Einführung der Übertragungsbestätigung: Übertragungsbruchbestätigungsmechanismen können hinzugefügt werden, um die Signalzuverlässigkeit zu verbessern.
  2. Optimierung der Stop-Loss-Mechanismen: Die Einführung von Tracking-Stopps oder ATR-Dynamic-Stopps kann in Erwägung gezogen werden, um die Flexibilität der Stop-Loss zu erhöhen.
  3. Hinzufügen von Trendfiltern: Sie können langfristige Trendindikatoren hinzufügen und nur in Richtung des Haupttrends handeln.
  4. Optimierte Positionsverwaltung: Positionsgröße kann je nach Dynamik der Durchbruchstärke angepasst werden.
  5. Zeit-Filter hinzugefügt: Um den Handel zu bestimmten Marktzeiten zu vermeiden.

Zusammenfassen

Dies ist eine Strategie, die durch die statistischen Eigenschaften der Brin-Band und die Trendverfolgung der Moving Averages einen wichtigen Marktdurchbruch effektiv erfassen kann. Obwohl ein gewisses Rückzugrisiko besteht, hat es durch eine vernünftige Stop-Loss-Einstellung und Risikokontrolle immer noch einen guten praktischen Wert. Der Raum für weitere Optimierungen besteht hauptsächlich in der Signalbestätigung, Stop-Loss-Mechanismen und Positionsverwaltung.

Strategiequellcode
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MounirTrades007

// @version=6
strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Get user input
var g_bb        = "Bollinger Band Settings"
upperBandSD     = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb)
lowerBandSD     = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb)
maPeriod        = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb)
var g_tester    = "Backtester Settings"
drawTester      = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display")

// Get Bollinger Bands
[bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD)
[bbMid, bbIgnore3, bbLow]      = ta.bb(close, maPeriod, lowerBandSD)

// Prepare trade persistent variables
drawEntry   = false
drawExit    = false

// Detect bollinger breakout
if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0
    drawEntry := true
    strategy.entry(id="Trade", direction=strategy.long)
    alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Detect bollinger sell signal
if close < bbLow and barstate.isconfirmed and strategy.position_size != 0
    drawExit := true
    strategy.close(id="Trade")
    alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close)

// Draw bollinger bands
plot(bbMid, color=color.blue, title="Middle SMA")
plot(bbHigh, color=color.green, title="Upper Band")
plot(bbLow, color=color.red, title="Lower Band")

// Draw signals
plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal")
plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal")

// // =============================================================================
// // START BACKTEST CODE
// // =============================================================================

// // Prepare stats table
// var table testTable = table.new(position.top_right, 2, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)

// // Draw stats table
// var bgcolor = color.black
// if barstate.islastconfirmedhistory
//     if drawTester
//         dollarReturn = strategy.equity - strategy.initial_capital
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white)

// // =============================================================================
// // END BACKTEST CODE
// // =============================================================================