Cette stratégie est appelée
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.
Il s'agit d'une stratégie de rupture qui utilise le canal de prix pour juger de la tendance globale.
L'utilisation du canal de prix pour déterminer la direction générale de la tendance peut filtrer efficacement le bruit du marché.
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é.
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.
La logique de la stratégie est simple et facile à mettre en œuvre.
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.
La stratégie comporte également des risques potentiels:
Il y a encore une probabilité d'échec de l'évasion, ce qui peut entraîner des pertes.
Le canal de prix peut échouer lorsque le marché fluctue violemment.
L'absence de mécanisme de stop loss ne permet pas de contrôler efficacement les pertes.
Des règles commerciales simples comportent des risques de suradaptation.
Incapable de s'adapter à un environnement de marché plus complexe.
Les solutions correspondantes sont:
Optimiser les paramètres pour améliorer le taux de réussite de l'évasion.
Ajoutez l'indice de volatilité pour éviter les marchés agités.
Ajoutez le stop loss mobile.
Effectuer un test de complexité pour vérifier le surajustement.
Améliorer les modèles d'apprentissage automatique pour améliorer l'adaptabilité.
Les principales orientations d'optimisation sont les suivantes:
Ajoutez un mécanisme de stop loss pour mieux contrôler les risques.
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.
Ajouter des conditions de filtrage pour améliorer la certitude de la rupture.
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.
Optimiser le portefeuille, combiner différents types de stratégies de rupture pour atteindre l'orthogonalité et réduire les similitudes.
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()