
Cette stratégie révèle l’humeur des acteurs du marché en comparant les fluctuations des prix et le volume des transactions, en les présentant sous forme de MACD et en émettant des signaux de trading.
Cette stratégie permet de détecter les émotions du marché principalement à l’aide des calculs suivants:
La variation du prix de chaque ligne K divisée par le volume des transactions. Cela montre directement la force d’achat et de vente.
Appliquer une moyenne mobile lisse à la variation des prix et à la variation du volume des transactions, puis diviser l’EMA de la variation des prix par l’EMA du volume des transactions. Cela permet de filtrer une partie du bruit et d’obtenir une courbe de courbe d’émotion plus lisse.
En calculant rapidement l’EMA sur la courbe de l’émotion du marché, on obtient une courbe similaire à celle du MACD. La courbe MACD indique la direction et l’intensité du mouvement, la courbe de signal est la moyenne mobile, et le diagramme en colonnes indique la différence entre les deux courbes, représentant le changement de mouvement.
Lorsque le graphique à colonnes porte 0 est un signal d’augmentation de l’humeur du marché à plusieurs têtes, et lorsque le graphique à colonnes porte 0 est un signal d’augmentation de l’humeur du marché à tête nue. On peut également observer le phénomène de déviation du graphique à colonnes.
Cette stratégie présente les avantages suivants:
Les informations sur les volumes de transactions sont utilisées pour juger de l’humeur des acteurs du marché, ce qui est plus convaincant.
Le format MACD est intuitif et facile à utiliser.
Les paramètres sont réglables pour différentes variétés et périodes.
Le diagramme de la colonne peut être détecté pour détecter des points de basculement potentiels.
La structure du code est claire, facile à comprendre et à optimiser.
Cette stratégie présente également les risques suivants:
Le volume de transaction peut refléter l’humeur du marché, mais ne garantit pas que les signaux de transaction sont corrects.
Une mauvaise configuration des paramètres du MACD peut entraîner des signaux erronés ou produire de faux signaux. Il est nécessaire d’optimiser les paramètres pour la variété et la période.
Les signaux de déviation peuvent être faux et ne permettent pas de déterminer un renversement de tendance.
Il existe un risque d’inscription tardive. Il est approprié d’attendre le suivi des pertes, ou une vérification raisonnable avec les tendances et les variétés concernées.
Cette stratégie peut être optimisée dans les domaines suivants:
test des combinaisons de paramètres de différentes variétés et périodes pour trouver le paramètre optimal.
Adopter une stratégie de stop loss pour réduire le risque de pertes.
Les prix des variétés concernées sont combinés pour vérifier les signaux de transaction.
Paramètres d’optimisation dynamique à l’aide d’une méthode d’apprentissage automatique
Augmentation des conditions de filtrage pour réduire les faux signaux, tels que les tendances à grande échelle, la volatilité, etc.
Cette stratégie utilise les variations de prix par rapport au rapport de volume des transactions pour déterminer l’humeur du marché et générer des signaux de négociation sous forme de MACD. Comparé à la simple information sur les prix, le volume des transactions permet de déterminer avec plus de précision le rapport de force entre les forces et la chaleur du marché. Il est possible d’optimiser les paramètres en fonction des différentes variétés et périodes, et il y a de la place pour une optimisation supplémentaire.
/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dannylimardi
//@version=4
strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08)
//Inputs
msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length")
emaLen1 = input(40, type=input.integer, title="Fast EMA Length")
emaLen2 = input(204, type=input.integer, title="Slow EMA Length")
signalLen = input(20, type=input.integer, title="Signal Length")
showMs = input(false, type=input.bool, title="Show Market Sentiment?")
showHist = input(true, type=input.bool, title="Show Momentum?")
showMacd = input(false, type=input.bool, title="Show MACD Line?")
showSignal = input(false, type=input.bool, title="Show Signal Line?")
showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)")
showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)")
showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)")
//Calculations
priceChange = close - close[1]
changePerVolume = (priceChange/volume) * 10000000 // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.)
priceChangeEma = ema(priceChange, msLen)
volumeEma = ema(volume, msLen)
marketSentiment = priceChangeEma/volumeEma * 100000000
msEma1 = ema(marketSentiment, emaLen1)
msEma2 = ema(marketSentiment, emaLen2)
macd = msEma1-msEma2
signal = ema(macd, signalLen)
hist = macd-signal
//Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
//Drawings
plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 )
plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0)
plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0)
plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red)
plot(0, color=color.white, transp=80)
plot(showEma1 ? msEma1 : na, color=color.aqua)
plot(showEma2 ? msEma2 : na, color=color.yellow)
plot(showMs ? marketSentiment : na, color=color.lime)
//Strategy
strategy.entry("Buy", strategy.long, when=crossover(hist, 0))
strategy.close("Buy", when=crossunder(hist, 0))