Stratégie de rupture du canal de prix

Auteur:ChaoZhang est là., Date: 2024-01-16 14h22 et 57 min
Les étiquettes:

img

Cette stratégie est appelée Price Channel Breakout Strategy. Son idée principale est d'utiliser le canal de prix pour déterminer la tendance et la direction du marché et établir des positions lorsque le prix sort du canal. Il dessinera d'abord la plage de canal de prix, puis jugera s'il y a deux K-lines rouges ou vertes consécutives. Si la dernière K-line traverse la moitié de la largeur du canal et se ferme à l'extérieur du canal, elle générera des signaux d'achat ou de vente.

La logique de la stratégie

La stratégie calcule le plus haut plus haut et le plus bas plus bas sur une certaine période dans le passé en utilisant les fonctions plus haut ((() et le plus bas (()) pour déterminer les rails supérieurs et inférieurs du canal de prix. Le point médian du canal est défini comme la moyenne des rails supérieurs et inférieurs. Il calcule ensuite la taille du corps de la ligne K et l'assouplit en utilisant SMA pour déterminer si le dernier corps de la ligne K est plus grand que la moitié du corps moyen. Il juge également si les deux dernières lignes K sont dans le même sens (deux lignes consécutives rouges ou vertes). Lorsque ces conditions sont remplies, il génère des signaux d'achat / vente et ferme les positions lorsque le prix retombe dans la direction du canal.

Analyse des avantages

Il s'agit d'une stratégie de rupture qui utilise le canal de prix pour juger de la tendance globale.

  1. L'utilisation du canal de prix pour déterminer la direction générale de la tendance peut filtrer efficacement le bruit du marché.

  2. Deux lignes K consécutives traversant le canal dans la même direction indiquent une dynamique plus forte et un taux de réussite plus élevé.

  3. En jugeant le corps de la ligne K plus grand que la moitié du corps moyen, on peut éviter d'être induit en erreur par une fausse éruption.

  4. La logique de la stratégie est simple et facile à mettre en œuvre.

  5. Les paramètres personnalisables tels que la période de la chaîne, les produits de négociation, les heures de négociation, etc. le rendent très adaptable.

Analyse des risques

La stratégie comporte également des risques potentiels:

  1. Il y a encore une probabilité d'échec de l'évasion, ce qui peut entraîner des pertes.

  2. Le canal de prix peut échouer lorsque le marché fluctue violemment.

  3. L'absence de mécanisme de stop loss ne permet pas de contrôler efficacement les pertes.

  4. Des règles commerciales simples comportent des risques de suradaptation.

  5. Incapable de s'adapter à un environnement de marché plus complexe.

Les solutions correspondantes sont:

  1. Optimiser les paramètres pour améliorer le taux de réussite de l'évasion.

  2. Ajoutez l'indice de volatilité pour éviter les marchés agités.

  3. Ajoutez le stop loss mobile.

  4. Effectuer un test de complexité pour vérifier le surajustement.

  5. Améliorer les modèles d'apprentissage automatique pour améliorer l'adaptabilité.

Directions d'optimisation

Les principales orientations d'optimisation sont les suivantes:

  1. Ajoutez un mécanisme de stop loss pour mieux contrôler les risques.

  2. Optimiser les paramètres tels que la période du canal, le seuil de rupture, etc. Trouver les paramètres optimaux par l'algorithme génétique, la recherche de grille, etc.

  3. Ajouter des conditions de filtrage pour améliorer la certitude de la rupture.

  4. Ajoutez des modèles d'apprentissage automatique comme LSTM pour améliorer la capacité de prédiction et l'adaptabilité en utilisant plus de données.

  5. Optimiser le portefeuille, combiner différents types de stratégies de rupture pour atteindre l'orthogonalité et réduire les similitudes.

Conclusion

En conclusion, il s'agit d'une stratégie quantitative basée sur le canal de prix pour déterminer la tendance et découvrir les signaux de rupture. Elle présente l'avantage de juger la tendance et de confirmer la rupture, mais présente également certains risques de fausse rupture. Nous pouvons améliorer la stratégie en optimisant les paramètres, en supprimant les pertes, en ajoutant des filtres, etc. pour réduire les risques. Pendant ce temps, l'introduction de modèles d'apprentissage automatique peut encore améliorer la capacité prédictive.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.0", shorttitle = "Price Channel str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel")
showcl = input(true, defval = true, title = "Show center-line")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
col = showcl ? blue : na
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Signals
body = abs(close - open)
abody = sma(body, 10)
up = rbars and close > center and body > abody / 2
dn = gbars and close < center and body > abody / 2
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if exit
    strategy.close_all()

Plus de