볼륨 에너지 기반 전략은 거래량 변화를 분석하여 시장 참여자의 감정 변화를 판단합니다. 거래량을 상승량과 하락량으로 나누고, 가중 이동 평균을 계산하고, 상승량이 지배할 때 상승 신호를 생성하고, 하락량이 지배할 때 하락 신호를 생성합니다.
이 전략은 먼저 매개시장의 거래량을 폐쇄 가격과 개척 가격의 관계에 따라 상승량과 하락량으로 나눈다. 종료 가격이 개척 가격보다 크다면 매개시장의 전체 거래량은 상승량이다. 종료 가격이 개척 가격보다 작으면 상승량 (최고 가격 - 개척 가격) / (최고 가격 - 최저 가격) 의 비율에 따라 계산되고 나머지는 하락량이다.
다음으로 마지막 n 개의 촛불의 상승 및 하락 부피의 가중화 이동 평균을 계산합니다. 상승 부피의 이동 평균이 하락 부피보다 크며 상승 부피로 나눈 차이는 미리 설정된 임계보다 크면 상승 신호가 생성됩니다. 하락 신호를 생성하는 규칙은 비슷합니다.
또한 통합 구역을 식별하기 위해 평균 거래량과 기본 라인을 설정합니다. 상승 및 하락량 사이에 상당한 차이가 없다면 시장이 현재 통합 중이라는 것을 나타냅니다.
매개 변수 최적화와 다른 지표와 결합하는 방법 같은 방법은 위험을 줄이는 데 도움이 될 수 있습니다.
볼륨 에너지 구동 전략은 시장 정서와 트렌드 변화를 결정하기 위해 상승 및 하락 거래량 분포를 지능적으로 판단합니다. 단독으로 또는 다른 전략과 결합하여 사용할 수 있습니다. 매개 변수 최적화 및 지표 조합을 통해 안정성과 수익성에 대한 추가 개선이 가능합니다.
/*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)