Cette stratégie combine l'indicateur de canal de prix et l'indicateur MACD pour suivre les tendances et identifier les niveaux de surachat et de survente sur plusieurs délais, prenant ainsi des décisions d'achat et de vente.
L'indicateur de canal de prix construit un canal de prix basé sur les lignes EMA des prix les plus élevés et les plus bas pour déterminer les tendances lorsque le prix sort du canal.
Les signaux de négociation de cette stratégie proviennent des aspects suivants:
Entrez long lorsque l'histogramme MACD tourne en rouge. Entrez court lorsque l'histogramme MACD tourne en vert.
Entrez en short lorsque le prix se rapproche du bas du canal et que le MACD est en dessous de la ligne zéro.
Entrez long lorsque le prix s'approche du haut du canal et que le MACD est au-dessus de la ligne zéro.
Entrez long lorsque le MACD dépasse la ligne zéro. Entrez court lorsque le MACD dépasse la ligne zéro.
Les sorties sont déclenchées par le stop loss et le take profit.
Une combinaison d'indicateurs empêche une fausse rupture.
La combinaison d'indicateurs à travers les délais assure une détection fiable des tendances.
L'incorporation de contrôles de stop loss et de profit par perte de transaction.
L'espace d'optimisation limité conduit à une sur-optimisation.
Un prix bas sur le canal échappe à des mouvements plus importants.
Un stop loss serré entraîne des pertes plus importantes.
Les solutions:
Adopter l'optimisation de marche vers l'avant pour éviter une suroptimisation.
Mettre en place des paramètres adaptatifs pour le canal de prix.
Introduire un stop loss basé sur la volatilité pour un ajustement dynamique de la distance d'arrêt.
Optimiser la combinaison des paramètres du MACD.
Optimiser le calcul adaptatif des paramètres des canaux de prix.
Ajouter plus de filtres pour prévenir les fausses fuites et améliorer l'efficacité.
Cette stratégie combine les atouts du canal de prix et du MACD par des paramètres raisonnables et un grand espace d'optimisation. Elle fonctionne bien dans la détection de tendance et l'identification des surachats / survente. Le mécanisme de stop loss / take profit contrôle la perte par transaction. À l'avenir, des améliorations peuvent être apportées en optimisant les paramètres, en ajoutant des filtres et en optimisant le mécanisme de stop loss.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Sonic R + Barcolor MACD", overlay=true) HiLoLen = input(34, minval=2,title="High Low channel Length") pacL = ema(low,HiLoLen) pacH = ema(high,HiLoLen) // Plot the Price Action Channel (PAC) base on EMA high,low and close// L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0) H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0) fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD hisup= iff(delta>delta[1] and delta>0, 1, iff(delta<delta[1], -1, nz(hisup[1], 0))) hisdown = iff(delta<delta[1] and delta<0, 1, iff(delta>delta[1], -1, nz(hisdown[1], 0))) barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue ) //SR PeriodLookBack = input(34) xHighest = highest(PeriodLookBack) xLowest = lowest(PeriodLookBack) Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0) // Strategy// conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0) gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0) gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL if(gobuy) strategy.entry("Buy",strategy.long) if(gosell) strategy.entry("Sell",strategy.short) //if(Trend==-1 and close<pacL) // strategy.close("Buy") //if(Trend==1 and close>pacH) // strategy.close("Sell") ////////////// TP and SL// SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1) rr= input(defval=0.1,title="Reward/Risk",type=float) useTPandSL = input(defval = false, title = "Use exit order strategy?") Stop = SL Take=SL*rr Q = 100 if(useTPandSL) strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop) strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)