Stratégie de backtesting du canal SSL avec ATR et gestion de l'argent

Auteur:ChaoZhang est là., Date: 23 janvier 2023
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de backtesting basée sur l'indicateur de canal SSL, intégrée à des fonctions telles que l'ATR stop loss, l'ATR take profit et la gestion de l'argent pour faciliter un test plus complet de la stratégie de canal SSL.

La logique de la stratégie

Indicateur de canal SSL

L'indicateur de canal SSL se compose de la ligne médiane du canal et des bandes de canal. La ligne médiane du canal contient une piste supérieure et une piste inférieure, qui sont généralement des moyennes mobiles simples de prix élevés et bas au cours d'une période de rétrospective. Les bandes de canal sont formées entre les pistes supérieure et inférieure.

Lorsque le prix s'approche de la bande supérieure, il indique des conditions de surachat; lorsque le prix s'approche de la bande inférieure, il indique des conditions de survente.

Le paramètre du canal SSL est réglé surssl_period=16dans cette stratégie.

ATR Stop Loss/Take Profit

La fourchette moyenne réelle (ATR) mesure la volatilité du marché et peut être utilisée pour déterminer les niveaux de stop loss et de take profit.

Cette stratégie utilise un ATR de 14 périodes (atr_period=14) et des multiplicateurs dynamiquesatr_stop_factor=1.5etatr_target_factor=1.0pour définir un stop loss adaptatif et réaliser des bénéfices en fonction de la volatilité.

Il vérifie également si l'instrument a une précision de 2 décimales (two_digit) pour ajuster le stop et la cible en conséquence pour des paires comme l'or et le JPY.

Gestion de l'argent

La gestion de l'argent est réalisée parposition_size(dimensionnement à position fixe) etriskLe module de gestion de l'argent sera activé lorsque:use_mm=true.

L'objectif est de déterminer la taille optimale de la position pour chaque transaction.

Analyse des avantages

  • Le canal SSL est efficace pour capter les signaux d'inversion de tendance
  • Les arrêts basés sur ATR s'ajustent automatiquement en fonction de la volatilité
  • La gestion de l'argent aide à contrôler les risques dans tous les métiers

Analyse des risques

  • Les signaux du canal SSL peuvent ne pas être entièrement fiables, de faux signaux peuvent se produire
  • Les arrêts ATR peuvent être trop larges ou trop serrés
  • Une mauvaise gestion de l'argent peut conduire à des positions surdimensionnées ou à une faible efficacité

Ces risques peuvent être atténués par:

  1. Ajout de filtres pour confirmer les signaux et éviter les fausses entrées
  2. Paramètre de réglage de la période ATR pour des niveaux optimaux de stop loss/take profit
  3. Tester différents paramètres de gestion de trésorerie pour une dimensionnement idéal de la position

Directions d'optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Optimiser les paramètres du canal SSL pour une meilleure performance
  2. Améliorer ou remplacer le mécanisme d'arrêt ATR
  3. Ajouter des indicateurs de filtrage pour éviter les transactions inutiles
  4. Incorporer une dimensionnement des positions pour maximiser les rendements ajustés au risque
  5. Paramètres de réglage fin pour différents instruments
  6. Ajout d'outils quantitatifs pour des tests plus complets

Avec une optimisation systématique, cette stratégie peut devenir un système de trading algorithmique robuste.

Conclusion

Cette stratégie combine le canal SSL pour la tendance, l'ATR pour le contrôle des risques et la gestion de l'argent pour la taille des positions. Le backtesting complet facilite l'évaluation et l'amélioration de la stratégie dans un système de trading automatisé. Il y a également place à des améliorations telles que l'ajout de filtres, l'optimisation des paramètres et l'expansion des fonctionnalités. Dans l'ensemble, cela constitue une base solide pour la construction de stratégies de trading algorithmique.


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


Plus de