Stratégie de l'indicateur de sentiment du marché

Auteur:ChaoZhang est là., Date: 2023-11-13 17:51:20 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie révèle le sentiment du marché en comparant les variations de prix au volume, et le présente dans un format MACD pour générer des signaux de trading.

La logique de la stratégie

La stratégie utilise principalement les méthodes suivantes pour révéler le sentiment du marché:

  1. La variation des prix par volume de chaque barre montre directement la force des forces d'achat et de vente.

  2. Appliquer des moyennes mobiles exponentielles à la variation des prix et au volume séparément, puis diviser l'EMA de la variation des prix par l'EMA du volume.

  3. Appliquez des EMA rapides et lents sur le sentiment du marché pour obtenir des lignes similaires au MACD. La ligne MACD montre la direction et la force du momentum, la ligne de signal est sa moyenne mobile et l'histogramme montre leur différence, représentant le changement de momentum.

L'histogramme passant au-dessus de 0 signale une augmentation du sentiment haussier, tandis que le passage en dessous de 0 signale une augmentation du sentiment baissier.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Utilise l'information sur le volume pour juger du sentiment du marché, plus convaincant.

  2. Le formulaire MACD est intuitif et facile à utiliser.

  3. Paramètres personnalisables pour différents produits et délais.

  4. Peut détecter les divergences sur l'histogramme pour trouver des inversions de tendance potentielles.

  5. Structure de code claire, facile à comprendre et à optimiser.

Analyse des risques

La stratégie comporte également les risques suivants:

  1. Le volume reflète le sentiment mais ne garantit pas les bons signaux.

  2. Les paramètres doivent être optimisés pour des produits et des délais spécifiques.

  3. Les divergences peuvent être de faux signaux, incapables de confirmer des renversements de tendance, et doivent donc être interprétées avec soin.

  4. Risque d'entrée tardive et d'être pris au piège. Peut attendre un arrêt de perte ou valider avec les tendances et les produits connexes.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Testez des combinaisons de paramètres sur différents produits et périodes pour trouver les paramètres optimaux.

  2. Ajouter un stop loss pour réduire le risque de perte.

  3. Combinez avec les tendances des prix des produits connexes pour valider les signaux.

  4. Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.

  5. Ajouter des filtres pour réduire les faux signaux, par exemple les tendances à plus long terme, la volatilité, etc.

Conclusion

La stratégie juge le sentiment du marché en comparant les changements de prix et le volume, et génère des signaux dans un format MACD. Considérant le volume en plus du prix peut déterminer plus précisément la force des acheteurs et des vendeurs. Les paramètres peuvent être optimisés pour différents produits et délais, avec un potentiel d'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))

Plus de