리소스 로딩... 로딩...

실시간 가격 전략으로 구매 및 판매 부피 열 지도

저자:차오장, 날짜: 2024-05-24 17:16:58
태그:EMAVWAPSMA

img

전반적인 설명

이 전략은 특정 기간 동안 가격과 부피의 분포를 분석하여 볼륨 히트맵과 실시간 가격을 결합하여 구매 및 판매 신호를 생성합니다. 전략은 먼저 현재 가격과 설정된 가격 범위 비율을 기반으로 여러 가격 수준을 계산합니다. 그 다음 지난 기간 동안 각 가격 수준에서 구매 및 판매 부피를 계산하고 누적 구매 및 판매 부피를 계산합니다. 레이블의 색상은 누적 구매 및 판매 부피에 따라 결정됩니다. 또한 전략은 실시간 가격 곡선을 그래프합니다. 또한 전략은 EMA 및 VWAP와 같은 지표를 통합하여 가격과 부피와의 관계에 따라 구매 및 판매 신호를 생성합니다. 구매 조건이 충족되면 구매 신호가 생성되며 이전 신호가 발생하지 않았습니다. 판매 신호는 판매 조건이 충족되거나 두 개의 연속 빨간 촛불이 발생하거나 이전 신호가 발생하지 않은 경우 생성됩니다.

전략 원칙

  1. 현재 가격과 정해진 가격 범위의 비율을 기준으로 여러 가격 수준을 계산합니다.
  2. 지난 기간 동안 각 가격 수준에서 구매 및 판매량을 계산하고 누적 구매 및 판매량을 계산합니다.
  3. 누적 구매 및 판매 부피를 기반으로 라벨의 색상을 결정하고 라벨 또는 그래프 모양을 표시합니다.
  4. 실시간 가격 곡선을 그려보세요.
  5. EMA와 VWAP 같은 지표를 계산합니다.
  6. 가격과 EMA와 VWAP와 같은 지표, 그리고 볼륨 조건 사이의 관계를 기반으로 구매 조건이 충족되었는지 여부를 결정합니다. 충족되고 이전 신호가 발생하지 않은 경우 구매 신호를 생성합니다.
  7. 판매 조건이 가격과 EMA와 같은 지표, 그리고 볼륨 조건 사이의 관계에 따라 충족되었는지 여부를 결정합니다. 충족되고 이전 신호가 발생하지 않은 경우 판매 신호를 생성합니다. 두 개의 연속적인 빨간 촛불이 있고 이전 신호가 발생하지 않은 경우 판매 신호를 생성합니다.
  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)


관련

더 많은