資源の読み込みに... 荷物...

リアルタイムの価格戦略で購入・販売量ヒートマップ

作者: リン・ハーンチャオチャン開催日:2024年5月24日 17:16:58
タグ:エイマVWAPSMA

img

概要

この戦略は,一定期間の価格とボリュームの分布を分析することで,ボリュームヒートマップとリアルタイム価格を組み合わせて買い売りシグナルを生成する.戦略は,まず現在の価格と設定された価格範囲のパーセントに基づいていくつかの価格レベルを計算する.その後,過去期間の各価格レベルでの買い売りボリュームを数え,累積的な買い売りボリュームを計算する.ラベルの色は累積的な買い売りボリュームに基づいて決定される.さらに,戦略はリアルタイム価格曲線をプロットする.さらに,戦略はEMAやVWAPなどの指標を組み込み,価格とボリュームとの関係に基づいて買い売りシグナルを生成する.買い条件が満たされ,以前のシグナルが発生していないとき,買い買いシグナルが生成される.販売条件が満たされたとき,または連続した2つの赤いキャンドルが存在し,以前のシグナルが発生していないとき,販売シグナルが生成される.

戦略原則

  1. 現在の価格と設定された価格範囲のパーセントに基づいていくつかの価格レベルを計算します.
  2. 過去期間の各価格レベルでの購入・販売量を計算し,累積的な購入・販売量を計算する.
  3. 累積的な買取・販売量に基づいてラベルの色を決定し,ラベルやグラフの形を表示する.
  4. リアルタイムの価格曲線をグラフ化します
  5. EMA や VWAP などの指標を計算する.
  6. 価格とEMAやVWAPなどの指標,およびボリューム条件の関係に基づいて購入条件が満たされているかどうかを決定します.満たされ,以前の信号が発生していない場合は,購入信号を生成します.
  7. 販売条件が価格とEMAなどの指標,およびボリューム条件の関係に基づいて満たされているかどうかを決定する.満たされ,以前の信号が発生していない場合は,販売信号を生成する.連続して2つの赤いキャンドルがあり,以前の信号が発生していない場合は,販売信号も生成する.
  8. 現在の買取・売却状態を記録し,信号発生状態を更新する.

利点分析

  1. ボリューム・ヒートマップとリアルタイム価格の組み合わせにより,価格とボリュームの分布が直感的に表示され,取引決定の基準となる.
  2. EMAやVWAPなどの指標が組み込まれることで,戦略の状況判断が豊かになり,信頼性が向上します.
  3. 戦略は価格,指標,ボリュームを含む複数の要因を考慮し,買い売り信号をより包括的で堅牢にします.
  4. この戦略では,信号生成に制限を設け, 繰り返し信号を生成することを避け, 誤解を招く信号を減らす.

リスク分析

  1. 戦略のパフォーマンスは,価格範囲の割合や見直し期間などのパラメータ設定によって影響され,特定の状況に基づいて調整と最適化が必要になります.
  2. EMAやVWAPのような指標は,固有の遅れや限界があり,特定の市場環境では効果がなくなる可能性があります.
  3. この戦略は主にトレンド市場に適しており,不安定な市場ではより多くの誤った信号を生む可能性があります.
  4. 戦略のリスク管理対策は比較的シンプルで,ストップ・ロストやポジションサイズなどのリスク管理ツールがない.

最適化方向

  1. 戦略の判断基盤を豊かにするために,RSI,MACD,ボリンジャー帯など,より多くの技術指標と市場情勢指標を導入します.
  2. 信号の正確性と信頼性を向上させるために,購入・販売信号を生成するための条件を最適化する.トレンド方向性を確認するために,マルチタイムフレーム分析を組み込むことを検討する.
  3. ストップ・ロースやポジションサイズなどのリスク管理措置を導入し,個々の取引のリスクリスクを制御するために合理的なストップ・ロースレベルとポジションサイズを設定する.
  4. パラメータの最適化とバックテストを行い,最適なパラメータの組み合わせと市場適用性を探す.
  5. この戦略を他の戦略と組み合わせることで,異なる戦略の強みを活用し,全体的な安定性と収益性を向上させることを検討する.

概要

この戦略は,ボリュームヒートマップ,リアルタイム価格,および複数の技術指標を組み合わせて,特定の基準値を提供することで,購入・売却シグナルを生成する.この戦略の利点は,価格とボリューム分布を直感的に表示し,シグナルを生成するために複数の要因を包括的に考慮する能力にあります.しかし,この戦略にはパラメータ設定の影響,指標の遅延性,トレンド市場への依存などのいくつかの制限とリスクもあります.したがって,実践的な応用では,より多くの指標を導入し,信号条件を最適化し,リスク管理を強化し,戦略の強度と収益性を向上させるなど,戦略のさらなる最適化と改善が必要です.


/*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)


関連性

もっと