La stratégie 3 10 Oscillator Profile Flagging génère des signaux de trading en calculant la différence entre les moyennes mobiles simples de 3 et 10 jours comme indicateur MACD et en combinant l'analyse du volume pour déterminer la force des acheteurs et des vendeurs sur le marché.
L'indicateur de base de cette stratégie est le MACD, qui se compose d'une ligne moyenne mobile rapide et d'une ligne moyenne mobile lente. La ligne rapide est une moyenne mobile simple de 3 jours et la ligne lente est une moyenne mobile simple de 10 jours. La différence entre eux forme l'histogramme MACD. Lorsque la ligne rapide traverse au-dessus de la ligne lente depuis le bas, elle représente un renforcement du pouvoir d'achat et génère un signal d'achat. Inversement, lorsque la ligne rapide traverse au-dessous de la ligne lente depuis le haut, le pouvoir de vente se renforce et un signal de vente est généré.
En outre, la stratégie intègre une analyse de la force relative du volume d'achat et de vente basée sur la relation de taille entre le volume d'achat et le volume de vente de chaque chandelier. La méthode spécifique est: Volume d'achat = Volume x (Close - Low) ÷ (High - Low); Volume de vente = Volume x (High - Close) ÷ (High - Low). Si le volume d'achat est significativement supérieur au volume de vente, cela signifie que le chandelier ferme avec un pouvoir d'achat relativement fort, ce qui est un signal d'achat.
En combinant l'indicateur MACD et l'analyse du volume, la stratégie peut déterminer efficacement la relation entre l'offre et la demande et la direction pendante du marché. En même temps, la stratégie vérifie également des conditions telles que si le prix est dans une zone clé, si le MACD a un renversement efficace et si la différence entre le volume d'achat et de vente est suffisamment grande, afin de filtrer un certain bruit impulsif et d'assurer une entrée à haute probabilité et à haute efficacité.
Le plus grand avantage de cette stratégie est qu'elle intègre pleinement le jugement de la relation entre l'offre et la demande du marché. L'histogramme MACD peut déterminer efficacement le contraste entre le pouvoir d'achat et de vente et la direction en attente sur le marché; l'analyse de la différence de volume peut clairement identifier le pouvoir dominant entre acheteurs et vendeurs. Dans le même temps, la stratégie définit plusieurs conditions de révision pour éviter de poursuivre les hausses et de battre les baisses, assurant une probabilité de profit relativement élevée. En outre, le mécanisme de stop profit et de stop loss intégré de la stratégie peut également limiter les pertes individuelles.
Les risques susmentionnés peuvent être évités en: déterminant avec précision la tendance principale du marché pour éviter d'utiliser cette stratégie pendant les fluctuations du marché; en prêtant attention aux informations du marché pour identifier les volumes de négociation artificiellement gonflés; en ajustant soigneusement les paramètres ou en sollicitant les conseils de professionnels.
La stratégie peut être optimisée dans les aspects suivants:
En résumé, on constate qu'il y a beaucoup de marge d'optimisation de cette stratégie: les investisseurs peuvent apporter des ajustements et des améliorations appropriés en fonction de leur situation et des conditions du marché afin d'obtenir une meilleure efficacité de la stratégie.
La stratégie de flagging de profil d'oscillateur 3 10 intègre avec succès les idées de l'analyse MACD, de la comparaison de volume et de la vérification de filtrage multi-condition. Elle a de fortes capacités à déterminer les relations offre-demande et les directions en attente du marché, tout en contrôlant les risques grâce à des mécanismes de stop profit et stop loss intégrés.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.8) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=10) takeProfit = input( title="Take Profit", defval=0.75) stopLoss = input( title="Stop Loss", defval=0.5) fast_ma = ta.sma(close, 3) slow_ma = ta.sma(close, 10) macd = fast_ma - slow_ma signal = ta.sma(macd, 16) hline(0, "Zero Line", color = color.black) buyVolume = volume*((close-low)/(high-low)) sellVolume = volume*((high-close)/(high-low)) buyVolSlope = buyVolume - buyVolume[1] sellVolSlope = sellVolume - sellVolume[1] signalSlope = ( signal - signal[1] ) macdSlope = ( macd - macd[1] ) //plot(macdSlope, color=color.red, title="Total Volume") //plot(signalSlope, color=color.green, title="Total Volume") intrabarRange = high - low getLookBackSlope(lookBack) => signal - signal[lookBack] getBuyerVolBias(lookBack) => j = 0 for i = 1 to lookBack if buyVolume[i] > sellVolume[i] j += 1 j getSellerVolBias(lookBack) => j = 0 for i = 1 to lookBack if sellVolume[i] > buyVolume[i] j += 1 j getVolBias(lookBack) => float b = 0 float s = 0 for i = 1 to lookBack b += buyVolume[i] s += sellVolume[i] b > s getSignalBuyerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] > signalBiasValue j += 1 j getSignalSellerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < ( 0 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 0 - signalBiasValue ) j += 1 j getPriceRising(lookBack) => j = 0 for i = 1 to lookBack if close[i] > close[i + 1] j += 1 j getPriceFalling(lookBack) => j = 0 for i = 1 to lookBack if close[i] < close[i + 1] j += 1 j getRangeNarrowing(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] < intrabarRange[i + 1] j+= 1 j getRangeBroadening(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] > intrabarRange[i + 1] j+= 1 j bool isNegativeSignalReversal = signalSlope < 0 and signalSlope[1] > 0 bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0 bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0 bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0 bool hasBearInversion = signalSlope > 0 and macdSlope < 0 bool hasBullInversion = signalSlope < 0 and macdSlope > 0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0 bool hasSignalSellerBias = hasSignalBias and signal < 0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 0 - macdBiasValue ) bool hasBullAntiPattern = ta.crossunder(macd, signal) bool hasBearAntiPattern = ta.crossover(macd, signal) bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 ) bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 ) // 7.48 Profit 52.5% if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion) strategy.entry("Short1", strategy.short, qty=10) strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss) // 32.53 Profit 47.91% if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias) strategy.entry("Long1", strategy.long, qty=10) strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)