Stratégie de rupture de l'oscillation efficace à double arrêt des profits et arrêt des pertes

Auteur:ChaoZhang est là., Date: 2024-02-01 à 14h46
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de trading bidirectionnelle hautement efficace conçue sur la base d'indicateurs de canal et de principes de rupture.

La logique de la stratégie

La stratégie utilise des indicateurs SMA pour construire des canaux. Elle entre en long lorsque le prix dépasse le canal et entre en court lorsque les prix dépassent le canal.

Plus précisément, la stratégie calcule le rail supérieur et inférieur du canal. Le rail supérieur est la SMA de 10 périodes du prix de clôture multipliée par 1,02; Le rail inférieur est la SMA de 10 périodes du prix le plus bas divisé par 1,02. Allez long lorsque le prix de clôture dépasse le rail supérieur, allez court lorsque le prix de clôture dépasse le rail inférieur.

Après le long, deux niveaux de prise de profit sont fixés à 1% et 3% respectivement, avec un stop loss de 3%. Le short a des paramètres de profit/perte similaires. Grâce aux principes de rupture, la stratégie peut atteindre un taux de gain d'entrée relativement élevé; grâce aux doubles profits, elle peut bloquer plus de profits; grâce au stop loss, elle contrôle le montant de la perte par transaction.

Analyse des avantages

Les stratégies de rupture de canal comme celle-ci présentent des avantages tels que des signaux d'entrée clairs, une fréquence d'opération élevée, une prise de profit à plusieurs niveaux, etc. Les principaux avantages sont les suivants:

  1. L'utilisation d'indicateurs de canal pour identifier la fourchette d'oscillation des prix et choisir les points de rupture à entrer peut obtenir un taux de gain relativement élevé.

  2. Opérer sur un graphique de 1 minute pour saisir plus d'opportunités et répondre aux besoins de trading rapide.

  3. Avoir deux niveaux de prise de profit permet de bloquer plus de bénéfices lorsque la tendance va bien.

  4. Un stop-loss relativement large donne à l'évolution du prix une certaine marge, évitant ainsi un stop-loss prématuré.

Analyse des risques

Le plus grand risque avec de telles stratégies de rupture est de fausses ruptures conduisant à des pertes.

  1. Les signaux de rupture peuvent être de fausses ruptures et ne pas atteindre le profit ou le stop loss.

  2. Un seuil de stop loss de 3% pourrait être difficile à supporter pour certains traders.

  3. Cette stratégie est plus adaptée au trading à court terme et nécessite une surveillance.

Directions d'optimisation

Les stratégies de rupture de tendance comme celle-ci peuvent être optimisées principalement dans les aspects suivants:

  1. Testez plus d'indicateurs pour créer des canaux et trouvez-en de plus fiables pour réduire les fausses fuites.

  2. Optimisez le réglage des paramètres de moyenne mobile, découvrez les meilleures combinaisons de paramètres.

  3. Testez des mécanismes d'entrée plus complexes, comme l'ajout de filtres de volume, etc.

  4. Définir des combinaisons de paramètres adaptées aux différentes caractéristiques des produits pour obtenir une auto-adaptation des paramètres.

  5. Ajouter des mécanismes d'arrêt automatique des pertes qui ajustent dynamiquement le stop loss au fil du temps.

Conclusion

Il s'agit d'une stratégie de trading bidirectionnelle efficace basée sur des indicateurs de canal. Il entre sur les marchés grâce aux principes de rupture, double prise de profit pour verrouiller les récompenses, stop loss pour contrôler les risques.


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Erweiterte SSL Channel Strategy mit 2 TPs, SL und BE", overlay=true)

period = input(title="Period", defval=10)
len = input(title="Length", defval=10)
multiplier = input(title="Multiplier", defval=1.0, minval=1.0)
tp1Percent = input(title="Take Profit 1 (%)", defval=1.0) / 100
tp2Percent = input(title="Take Profit 2 (%)", defval=20.0) / 100
slPercent = input(title="Stop Loss (%)", defval=3.0) / 100

var float tp1Price = na
var float tp2Price = na
var float slPrice = na
var bool tp1Reached = false

smaHigh = sma(high * multiplier, len)
smaLow = sma(low / multiplier, len)

Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : nz(Hlv[1])
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

plot(sslDown, linewidth=2, color=color.red)
plot(sslUp, linewidth=2, color=color.lime)

longCondition = crossover(close, sslUp)
shortCondition = crossunder(close, sslDown)

if (longCondition)
    strategy.entry("Long", strategy.long)
    tp1Price := strategy.position_avg_price * (1 + tp1Percent)
    tp2Price := strategy.position_avg_price * (1 + tp2Percent)
    slPrice := strategy.position_avg_price * (1 - slPercent)
    tp1Reached := false

if (shortCondition)
    strategy.entry("Short", strategy.short)
    tp1Price := strategy.position_avg_price * (1 - tp1Percent)
    tp2Price := strategy.position_avg_price * (1 - tp2Percent)
    slPrice := strategy.position_avg_price * (1 + slPercent)
    tp1Reached := false

// Take Profit, Break-even und Stop-Loss Logik
if (strategy.position_size > 0) // Long-Positionen
    if (not tp1Reached and close >= tp1Price)
        strategy.close("Long", qty_percent = 50)
        strategy.exit("BE Long", "Long", stop = strategy.position_avg_price)
        tp1Reached := true
    if (tp1Reached and close < tp1Price)
        strategy.exit("BE Long", "Long", stop = strategy.position_avg_price)
    if (close >= tp2Price)
        strategy.close("Long", qty_percent = 100)
    if (not tp1Reached)
        strategy.exit("SL Long", "Long", stop = slPrice)

if (strategy.position_size < 0) // Short-Positionen
    if (not tp1Reached and close <= tp1Price)
        strategy.close("Short", qty_percent = 50)
        strategy.exit("BE Short", "Short", stop = strategy.position_avg_price)
        tp1Reached := true
    if (tp1Reached and close > tp1Price)
        strategy.exit("BE Short", "Short", stop = strategy.position_avg_price)
    if (close <= tp2Price)
        strategy.close("Short", qty_percent = 100)
    if (not tp1Reached)
        strategy.exit("SL Short", "Short", stop = slPrice)


Plus de