부피 에너지 기반 전략

저자:차오장, 날짜: 2024-01-04 15:38:54
태그:

img

전반적인 설명

볼륨 에너지 기반 전략은 거래량 변화를 분석하여 시장 참여자의 감정 변화를 판단합니다. 거래량을 상승량과 하락량으로 나누고, 가중 이동 평균을 계산하고, 상승량이 지배할 때 상승 신호를 생성하고, 하락량이 지배할 때 하락 신호를 생성합니다.

전략 논리

이 전략은 먼저 매개시장의 거래량을 폐쇄 가격과 개척 가격의 관계에 따라 상승량과 하락량으로 나눈다. 종료 가격이 개척 가격보다 크다면 매개시장의 전체 거래량은 상승량이다. 종료 가격이 개척 가격보다 작으면 상승량 (최고 가격 - 개척 가격) / (최고 가격 - 최저 가격) 의 비율에 따라 계산되고 나머지는 하락량이다.

다음으로 마지막 n 개의 촛불의 상승 및 하락 부피의 가중화 이동 평균을 계산합니다. 상승 부피의 이동 평균이 하락 부피보다 크며 상승 부피로 나눈 차이는 미리 설정된 임계보다 크면 상승 신호가 생성됩니다. 하락 신호를 생성하는 규칙은 비슷합니다.

또한 통합 구역을 식별하기 위해 평균 거래량과 기본 라인을 설정합니다. 상승 및 하락량 사이에 상당한 차이가 없다면 시장이 현재 통합 중이라는 것을 나타냅니다.

이점 분석

  • 시장 참여자의 감정에 대한 이론적 근거를 판단하기 위해 부피 정보를 사용
  • 중요한 신호를 놓치지 않도록 통합 구역을 자동으로 식별합니다
  • 사용자 정의 가능한 매개 변수
  • 상승 및 하락 신호를 개별적으로 식별하거나 한 쪽만을 따라갈 수 있습니다.

위험 분석

  • 거래량 데이터는 조작될 수 있습니다.
  • 기본 매개 변수는 모든 제품에 적합하지 않을 수 있습니다. 최적화가 필요합니다.
  • 부적절한 통합 식별 매개 변수는 신호를 놓칠 수 있습니다.
  • 잘못된 신호가 짧은 기간 동안 나타날 수 있습니다.

매개 변수 최적화와 다른 지표와 결합하는 방법 같은 방법은 위험을 줄이는 데 도움이 될 수 있습니다.

최적화 방향

  • 거래량을 계산하는 다른 방법을 테스트합니다
  • EMA, SMMA 등과 같은 다른 종류의 이동 평균을 시도
  • 평균 부피를 계산하는 기간을 최적화합니다.
  • 통합을 식별하기 위한 매개 변수를 최적화
  • 신호를 필터링하기 위해 다른 기술 지표와 결합

요약

볼륨 에너지 구동 전략은 시장 정서와 트렌드 변화를 결정하기 위해 상승 및 하락 거래량 분포를 지능적으로 판단합니다. 단독으로 또는 다른 전략과 결합하여 사용할 수 있습니다. 매개 변수 최적화 및 지표 조합을 통해 안정성과 수익성에 대한 추가 개선이 가능합니다.


/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © Shuttle_Club
//@version=5

strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)

direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')

/////   CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low)  //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low)  //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma)  //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma)  //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2  //determine average value for calculation flat-filter

/////   SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100  //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100  //determine dn zones

if bull
    up += 1, dn := 0
    dn
if bear
    dn += 1, up := 0
    up
if not bull and not bear and all_signal_show
    up := 0, dn := 0
    dn

/////   PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))

strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)

if bull and up==1
    alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
    alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)
    

더 많은