Cette stratégie combine plusieurs modèles de modèles de bougies pour négocier des actions.
La logique de base de cette stratégie est de construire plusieurs règles de reconnaissance de modèles de bougies et de générer des signaux de trading en combinant ces règles.
Tout d'abord, il définit certaines variables de base pour décrire les propriétés du chandelier comme la taille du corps de la bougie, le prix d'ouverture, le prix de fermeture, etc.
Ensuite, en fonction de la relation entre le prix de clôture et le prix d'ouverture, il définit 3 types de barres de négociation: 1 pour la hausse, -1 pour la baisse et 0 pour l'absence de changement.
Sur cette base, 3 règles de reconnaissance de modèle de chandelier sont construites:
Modèle d'engloutissement: la bougie actuelle engloutit la précédente, générant des signaux d'achat ou de vente.
Harami Pattern: la bougie précédente engloutit celle actuelle, générant des signaux d'achat ou de vente.
Harami Cross Pattern: combinaison de Harami et Doji, générant des signaux d'achat ou de vente.
Selon ces modèles de chandeliers, le moment de l'achat et de la vente peut être déterminé.
La logique de négociation vérifie d'abord la position existante. Si elle contredit la direction du signal, elle fermera d'abord la position actuelle, puis ouvrira une nouvelle position selon le signal.
La combinaison améliore la stabilité. Un modèle unique est sujet aux conditions spécifiques du marché. La combinaison peut améliorer la fiabilité.
La confirmation améliore l'exactitude, les différents modèles se vérifient mutuellement, les faux signaux peuvent être évités.
Flexibilité: les utilisateurs peuvent librement combiner des modèles et ajuster les paramètres en fonction des différentes dynamiques du marché.
Le contrôle des risques: la logique de gestion des positions et de stop loss gère efficacement les risques.
Plus de paramètres, plus de complexité, une mauvaise combinaison peut nuire aux performances.
Le réglage des paramètres nécessite de l'expertise.
Le risque de détention unilatérale. Long ou court limite seulement le potentiel de profit. Permettre à la fois long et court peut aider.
L'absence de points d'inversion. En se concentrant sur les tendances, on perd de vue les signaux d'inversion de tendance. L'ajout d'autres indicateurs peut aider à identifier les points d'inversion potentiels.
Ajouter un stop loss pour réduire le risque de détention.
Incorporer d'autres indicateurs techniques pour déterminer la tendance globale, en évitant de négocier contre la tendance majeure, par exemple MACD, bande de Bollinger, etc.
Test des paramètres du modèle sur différents produits, établir des ensembles de paramètres optimaux pour chaque produit.
Introduire l'apprentissage automatique pour aider à optimiser les paramètres et la reconnaissance de modèles à l'aide de l'IA.
Cette stratégie construit un système de trading à court terme relativement stable en combinant plusieurs modèles de bougies. Mais le réglage des paramètres et le contrôle des risques doivent encore être améliorés pour s'adapter à des marchés plus complexes.
/*backtest start: 2022-10-10 00:00:00 end: 2023-10-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's CandleModels Tests", shorttitle = "CandleModels tests", 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") eng = input(true, defval = true, title = "Model Engulfing") har = input(true, defval = true, title = "Model Harami") harc = input(true, defval = true, title = "Model Harami Cross") 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") rev = input(false, defval = false, title = "Reversive trading") //Body body = abs(close - open) abody = sma(body, 10) //MinMax Bars min = min(close, open) max = max(close, open) //Signals bar = close > open ? 1 : close < open ? -1 : 0 doji = body < abody / 10 up1 = eng and bar == 1 and bar[1] == -1 and min <= min[1] and max >= max[1] dn1 = eng and bar == -1 and bar[1] == 1 and min <= min[1] and max >= max[1] up2 = har and bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] dn2 = har and bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] up3 = harc and doji and bar[1] == -1 and low >= min[1] and high <= max[1] dn3 = harc and doji and bar[1] == 1 and low >= min[1] and high <= max[1] exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 and rev == false //Trading if up1 or up2 or up3 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 or dn3 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()