Stratégies d'achat et de vente basées sur des cartes thermiques de volume et des prix en temps réel

EMA VWAP SMA
Date de création: 2024-05-24 17:16:58 Dernière modification: 2024-05-24 17:16:58
Copier: 2 Nombre de clics: 570
1
Suivre
1617
Abonnés

Stratégies d’achat et de vente basées sur des cartes thermiques de volume et des prix en temps réel

Aperçu

La stratégie combine un graphique de volume et des prix en temps réel pour générer des signaux d’achat et de vente en analysant les prix et la distribution du volume d’achat sur une période donnée. La stratégie calcule d’abord plusieurs niveaux de prix en fonction du prix actuel et du pourcentage de la fourchette de prix définie.

Principe de stratégie

  1. Plusieurs niveaux de prix sont calculés en fonction du prix actuel et du pourcentage de la fourchette de prix définie.
  2. Calculer le volume d’achats et de ventes pour chaque niveau de prix sur une période donnée et calculer le volume d’achats et de ventes cumulé.
  3. Déterminez la couleur des étiquettes en fonction du volume cumulé d’achats et de ventes et affichez les étiquettes ou dessinez des graphiques.
  4. La courbe des prix en temps réel.
  5. Calculer les indicateurs tels que l’EMA, le VWAP.
  6. Le rapport entre le prix et des indicateurs tels que l’EMA, le VWAP et les conditions de quantité de transaction permettent de déterminer si les conditions d’achat sont remplies. Si elles sont remplies et que le signal n’a pas été généré auparavant, un signal d’achat est généré.
  7. Si les conditions de vente sont remplies et qu’aucun signal n’a été généré auparavant, un signal de vente est généré. Si deux lignes négatives consécutives et aucun signal n’ont été générés auparavant, un signal de vente est également généré.
  8. Enregistre l’état actuel des conditions d’achat et de vente et met à jour l’état de la génération du signal.

Analyse des avantages

  1. La combinaison de graphiques thermiques de volumes de transactions et de prix en temps réel permet de visualiser la répartition des prix et des volumes de transactions et de fournir une référence pour les décisions de transaction.
  2. L’introduction d’indicateurs tels que l’EMA et le VWAP a enrichi le jugement conditionnel de la stratégie et amélioré la fiabilité de la stratégie.
  3. Les signaux d’achat et de vente sont plus complets et plus solides en tenant compte de facteurs tels que les prix, les indicateurs et le volume de transactions.
  4. Les conditions de restriction de la production de signaux sont définies pour éviter la production de signaux répétitifs en continu et réduire les signaux trompeurs.

Analyse des risques

  1. La performance de la stratégie peut être influencée par des paramètres tels que le pourcentage de la fourchette de prix, la période de rétrocession, etc. et doit être ajustée et optimisée en fonction des circonstances.
  2. Les indicateurs EMA, VWAP et autres ont eux-mêmes une certaine retardation et des limites qui peuvent être invalides dans certaines conditions de marché.
  3. Cette stratégie s’applique principalement aux marchés à forte tendance, où les faux signaux sont plus susceptibles de se produire en cas de choc.
  4. Les mesures de contrôle des risques de la stratégie sont relativement simples et il n’y a pas de moyens de gestion des risques tels que le stop-loss et la gestion des positions.

Direction d’optimisation

  1. L’introduction de plus d’indicateurs techniques et d’indicateurs de sentiment du marché, tels que le RSI, le MACD, les bandes de Brent, etc., pour enrichir le jugement stratégique.
  2. Optimiser les conditions de génération des signaux d’achat et de vente, améliorer l’exactitude et la fiabilité des signaux. L’analyse de plusieurs périodes peut être envisagée pour confirmer la direction de la tendance.
  3. Ajouter des mesures de contrôle des risques telles que la gestion des arrêts et des positions, définir des arrêts et des positions raisonnables, contrôler les seuils de risque pour les transactions individuelles.
  4. Optimiser et retester les paramètres de la stratégie pour trouver la combinaison optimale de paramètres et la portée du marché.
  5. Envisager de combiner cette stratégie avec d’autres stratégies pour tirer parti des avantages des différentes stratégies et améliorer la stabilité et la rentabilité globales.

Résumer

Cette stratégie a pour avantage de pouvoir visualiser la distribution des prix et des volumes de transactions et de prendre en compte de multiples facteurs pour générer des signaux. Cependant, la stratégie présente également des limites et des risques, tels que l’impact des paramètres, le retard des indicateurs, la dépendance à la tendance du marché. Par conséquent, dans la pratique, il est nécessaire d’optimiser et de perfectionner davantage la stratégie, comme l’introduction de plus d’indicateurs, l’optimisation des conditions de signal, le renforcement des contrôles de risque, etc.

Code source de la stratégie
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Buy and Sell Volume Heatmap with Real-Time Price Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Settings for Volume Heatmap
lookbackPeriod = input.int(100, title="Lookback Period")
baseGreenColor = input.color(color.green, title="Buy Volume Color")
baseRedColor = input.color(color.red, title="Sell Volume Color")
priceLevels = input.int(10, title="Number of Price Levels")
priceRangePct = input.float(0.01, title="Price Range Percentage")
labelSize = input.string("small", title="Label Size", options=["tiny", "small", "normal", "large"])
showLabels = input.bool(true, title="Show Volume Labels")

// Initialize arrays to store price levels, buy volumes, and sell volumes
var float[] priceLevelsArr = array.new_float(priceLevels)
var float[] buyVolumes = array.new_float(priceLevels)
var float[] sellVolumes = array.new_float(priceLevels)

// Calculate price levels around the current price
for i = 0 to priceLevels - 1
    priceLevel = close * (1 + (i - priceLevels / 2) * priceRangePct)  // Adjust multiplier for desired spacing
    array.set(priceLevelsArr, i, priceLevel)

// Calculate buy and sell volumes for each price level
for i = 0 to priceLevels - 1
    level = array.get(priceLevelsArr, i)
    buyVol = 0.0
    sellVol = 0.0
    for j = 1 to lookbackPeriod
        if close[j] > open[j]
            if close[j] >= level and low[j] <= level
                buyVol := buyVol + volume[j]
        else
            if close[j] <= level and high[j] >= level
                sellVol := sellVol + volume[j]
    array.set(buyVolumes, i, buyVol)
    array.set(sellVolumes, i, sellVol)

// Determine the maximum volumes for normalization
maxBuyVolume = array.max(buyVolumes)
maxSellVolume = array.max(sellVolumes)

// Initialize cumulative buy and sell volumes for the current bar
cumulativeBuyVol = 0.0
cumulativeSellVol = 0.0

// Calculate colors based on the volumes and accumulate volumes for the current bar
for i = 0 to priceLevels - 1
    buyVol = array.get(buyVolumes, i)
    sellVol = array.get(sellVolumes, i)
    cumulativeBuyVol := cumulativeBuyVol + buyVol
    cumulativeSellVol := cumulativeSellVol + sellVol

// Determine the label color based on which volume is higher
labelColor = cumulativeBuyVol > cumulativeSellVol ? baseGreenColor : baseRedColor

// Initialize variables for plotshape
var float shapePosition = na
var color shapeColor = na

if cumulativeBuyVol > 0 or cumulativeSellVol > 0
    if showLabels
        labelText = "Buy: " + str.tostring(cumulativeBuyVol) + "\nSell: " + str.tostring(cumulativeSellVol)
        label.new(x=bar_index, y=high + (high - low) * 0.02, text=labelText, color=color.new(labelColor, 0), textcolor=color.white, style=label.style_label_down, size=labelSize)
    else
        shapePosition := high + (high - low) * 0.02
        shapeColor := labelColor

// Plot the shape outside the local scope
plotshape(series=showLabels ? na : shapePosition, location=location.absolute, style=shape.circle, size=size.tiny, color=shapeColor)

// Plot the real-time price on the chart
plot(close, title="Real-Time Price", color=color.blue, linewidth=2, style=plot.style_line)

// Mpullback Indicator Settings
a = ta.ema(close, 9)
b = ta.ema(close, 20)
e = ta.vwap(close)
volume_ma = ta.sma(volume, 20)

// Calculate conditions for buy and sell signals
buy_condition = close > a and close > e and volume > volume_ma and close > open and low > a and low > e // Ensure close, low are higher than open, EMA, and VWAP
sell_condition = close < a and close < b and close < e and volume > volume_ma

// Store the previous buy and sell conditions
var bool prev_buy_condition = na
var bool prev_sell_condition = na

// Track if a buy or sell signal has occurred
var bool signal_occurred = false

// Generate buy and sell signals based on conditions
buy_signal = buy_condition and not prev_buy_condition and not signal_occurred
sell_signal = sell_condition and not prev_sell_condition and not signal_occurred

// Determine bearish condition (close lower than the bottom 30% of the candle's range)
bearish = close < low + (high - low) * 0.3

// Add sell signal when there are two consecutive red candles and no signal has occurred
two_consecutive_red_candles = close[1] < open[1] and close < open
sell_signal := sell_signal or (two_consecutive_red_candles and not signal_occurred)

// Remember the current conditions for the next bar
prev_buy_condition := buy_condition
prev_sell_condition := sell_condition

// Update signal occurred status
signal_occurred := buy_signal or sell_signal

// Plot buy and sell signals
plotshape(buy_signal, title="Buy", style=shape.labelup, location=location.belowbar, color=color.green, text="Buy", textcolor=color.white)
plotshape(sell_signal, title="Sell", style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell", textcolor=color.white)

// Strategy entry and exit
if buy_signal
    strategy.entry("Buy", strategy.long)

if sell_signal
    strategy.entry("Sell", strategy.short)