SSL-Kanal-Backtester-Strategie mit ATR und Geldmanagement

Schriftsteller:ChaoZhang, Datum: 2023-11-23 10:26:58
Tags:

img

Übersicht

Dies ist eine Backtesting-Strategie, die auf dem SSL-Kanalindikator basiert und mit Funktionen wie ATR Stop Loss, ATR Take Profit und Money Management integriert ist, um einen umfassenderen Test der SSL-Kanalstrategie zu erleichtern.

Strategie Logik

SSL-Kanalanzeiger

Der SSL-Kanalindikator besteht aus der Kanalmitte und den Kanalbändern. Die Kanalmitte enthält eine obere Spur und eine untere Spur, die normalerweise einfache gleitende Durchschnitte von hohen und niedrigen Preisen über einen Rückblickzeitraum sind. Die Kanalbänder bilden sich zwischen den oberen und unteren Spuren.

Wenn der Preis sich dem oberen Band nähert, deutet er auf Überkaufszustände hin; wenn der Preis sich dem unteren Band nähert, signalisiert er auf Überverkaufszustände.

Der SSL-Kanalparameter ist aufssl_period=16in dieser Strategie.

ATR Stop Loss/Take Profit

Der durchschnittliche tatsächliche Bereich (ATR) misst die Marktvolatilität und kann zur Bestimmung von Stop-Loss- und Take-Profit-Niveaus verwendet werden.

Diese Strategie verwendet einen 14-Perioden-ATR (atr_period=14) und dynamische Multiplikatorenatr_stop_factor=1.5undatr_target_factor=1.0Anpassungsfähige Stop-Loss- und Gewinnsätze auf Basis von Volatilität festzulegen.

Außerdem wird überprüft, ob das Messgerät eine 2-Dezimal-Genauigkeit aufweist (two_digit) um den Stopp und das Zielwert für Paare wie Gold und JPY entsprechend anzupassen.

Geldmanagement

Das Geldmanagement wird durchposition_size(Feststandsdimensionierung) undrisk(Risiko-Prozentsatz pro Handel). Das Geldmanagementmodul wird aktiviert, wennuse_mm=true.

Das Ziel besteht darin, die optimale Positionsgröße für jeden Handel zu bestimmen.

Analyse der Vorteile

  • SSL-Kanal ist wirksam bei der Erfassung von Trendumkehrsignalen
  • ATR-basierte Stopps werden automatisch anhand der Volatilität angepasst
  • Das Geldmanagement hilft, Risiken in allen Branchen zu kontrollieren

Risikoanalyse

  • SSL-Kanalsignale sind möglicherweise nicht vollständig zuverlässig, es können falsche Signale auftreten
  • ATR-Stopps können zu breit oder zu eng sein
  • Eine falsche Geldverwaltung kann zu übergroßen Positionen oder geringer Effizienz führen

Diese Risiken können durch:

  1. Hinzufügen von Filtern zur Bestätigung von Signalen und Vermeidung falscher Eingaben
  2. Abstimmung des ATR-Periodenparameters für optimale Stop-Loss-/Take-Profit-Levels
  3. Verschiedene Geldmanagementparameter für die ideale Positionsgröße testen

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen verbessert werden:

  1. Optimieren Sie die SSL-Kanalparameter für eine optimale Leistung
  2. Verbesserung oder Ersetzung des ATR-Stoppmechanismus
  3. Hinzufügen von Filterindikatoren, um unnötige Trades zu vermeiden
  4. Einbeziehung der Positionsgröße zur Maximierung der risikobereinigten Renditen
  5. Feinabstimmungsparameter für verschiedene Instrumente
  6. Hinzufügen von quantitativen Instrumenten für umfassendere Tests

Mit systematischer Optimierung kann diese Strategie zu einem robusten algorithmischen Handelssystem werden.

Schlussfolgerung

Diese Strategie kombiniert den SSL-Kanal für den Trend, ATR für die Risikokontrolle und das Geldmanagement für die Positionsgröße. Umfassendes Backtesting erleichtert die Bewertung und Verbesserung der Strategie in ein automatisiertes Handelssystem. Es gibt auch Raum für Verbesserungen wie das Hinzufügen von Filtern, die Optimierung von Parametern und die Erweiterung der Funktionalität. Insgesamt bildet dies eine solide Grundlage für den Aufbau algorithmischer Handelsstrategien.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © comiclysm

//@version=4
strategy("SSL Backtester", overlay=false)

//--This strategy will simply test the effectiveness of the SSL using
//--money management and an ATR-derived stop loss

//--USER INPUTS

two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)")
ssl_period = input(16, "SSL Period")
atr_period = input(14, "ATR Period")
atr_stop_factor = input(1.5, "ATR Stop Loss Factor")
atr_target_factor = input(1.0, "ATR Target Factor")
use_mm = input(true, "Check this to use Money Management")
position_size = input(1000, "Position size (for Fixed Risk)")
risk = input(0.01, "Risk % in Decimal Form")

//--INDICATORS------------------------------------------------------------

    //--SSL
    
sma_high = sma(high, ssl_period)
sma_low = sma(low, ssl_period)
ssl_value = 0
ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1]
ssl_low = ssl_value < 0 ? sma_high : sma_low
ssl_high = ssl_value < 0 ? sma_low : sma_high

    //--Average True Range
    
atr = atr(atr_period)

//--TRADE LOGIC----------------------------------------------------------

signal_long = ssl_value > 0 and ssl_value[1] < 0
signal_short = ssl_value < 0 and ssl_value[1] > 0

//--RISK MANAGMENT-------------------------------------------------------
strategy.initial_capital = 50000
balance = strategy.netprofit + strategy.initial_capital
risk_pips = atr*10000*atr_stop_factor
if(two_digit)
    risk_pips := risk_pips / 100
risk_in_value = balance * risk
point_value = syminfo.pointvalue
risk_lots = risk_in_value / point_value / risk_pips
final_risk = use_mm ? risk_lots * 10000 : position_size

//--TRADE EXECUTION-----------------------------------------------------

if (signal_long)
    stop_loss = close - atr * atr_stop_factor
    target = close + atr * atr_target_factor
    strategy.entry("Long", strategy.long, final_risk)
    strategy.exit("X", "Long", stop=stop_loss, limit=target)
if (signal_short)
    stop_loss = close + atr * atr_stop_factor
    target = close - atr * atr_target_factor
    strategy.entry("Short", strategy.short, final_risk)
    strategy.exit("X", "Short", stop=stop_loss, limit=target)
    
//--PLOTTING-----------------------------------------------------------

plot(ssl_low, "SSL", color.red, linewidth=1)
plot(ssl_high, "SSL", color.lime, linewidth=1)


Mehr