
이 전략은 거래량에 기반한 장기 단기 이동 평균의 교차로 구현된다. 그것은 거래량에 대한 장기 단기 경향을 계산하기 위해 다른 주기의 EMA를 사용하며, 그 차치값을 통해 흔들림 지표를 구성한다. 이 흔들림 지표는 0축을 통과할 때 더하고, 0축을 통과할 때 비어있다. 또한, 특정 동작 방향을 판단하기 위해 이전 고점과 낮은 점을 결합한다.
이 전략의 핵심 지표는 거래량 진동 지표 (Volume Oscillator) 이다. 이는 장기 단기 거래량 지수의 이동 평균의 차수를 통해 거래량 변화의 경향을 나타낸다. 구체적인 계산 공식은 다음과 같다:
Volume Oscillator = (ShortEMA - LongEMA) / LongEMA * 100
그 중, ShortEMA와 LongEMA는 각각 단기 및 장기 지수 이동 평균을 나타낸다. ShortEMA 위를 가로질러 LongEMA를 통과하면, 지표는 긍정적으로, 거래량이 확대되고 있음을 의미한다. ShortEMA 아래를 가로질러 LongEMA를 통과하면, 지표는 부정적으로, 거래량이 축소되고 있음을 의미한다.
그 흔들림 지표를 계산한 후, 이 전략은 0축과 교차하는 것을 사용하여 거래 신호를 생성한다. 지표가 마이너스 교정, 즉 0축을 상회할 때, 더 많이 하고, 지표가 마이너스 교정, 즉 0축을 하차할 때, 공백을 한다. 이것은 거래량의 동력 전환을 나타낸다.
또한, 전략은 이전 하위/높이점과 결합하여 특정 동작 방향을 판단한다. 즉, 지표에 0축을 타면, 이전 하위/높이점이 이전 하위/낮이점의 절대값보다 크면, 더 많이 본다. 반대로 공평하다. 이 특성을 이용하여 거래량 확대의 강도를 판단할 수 있다.
이 전략에는 다음과 같은 장점이 있습니다.
거래량을 기본 지표로 사용하여 시장 참여자의 의지를 효과적으로 판단 할 수 있으며 매우 실용적입니다.
장기간 EMA와 결합하면 중장기 경향과 단기간의 동력을 동시에 포착할 수 있다.
지표와 0축이 교차하여 형성된 거래 신호는 간단하고 명확하며 판단하기 쉽다.
거래량을 효과적으로 활용할 수 있는 동력 크기를 결정하기 위해 이전 최고 낮은 지점을 추가한다.
전략이 명확하고, 매개 변수가 유연하며, 적응력이 강하다.
이 전략에는 몇 가지 위험도 있습니다.
거래량 지표는 시장의 가짜 돌파구에 쉽게 영향을 받아 잘못된 신호를 일으킬 수 있습니다. 위험을 제어하기 위해 스톱 손실을 설정할 수 있습니다.
위기 상황에서는 거래량이 교차하는 경우가 자주 발생할 수 있으며, 지표 전환을 합리적으로 확인해야 한다.
이전 하락은 최근의 확장을 반영하고 있으며, 그 강도의 지속성을 결정할 수 없습니다.
다양한 품종과 시간대의 파라미터는 개별적으로 최적화해야 하며, 충분히 보편적이지 않다.
거래량 지표는 높은 주파수 프로그램 거래에 느리게 반응하여 최적의 진입 시기를 놓칠 수 있습니다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
필터링 조건을 추가하여 가짜 신호를 방지합니다. 예를 들어, 가격 지표에 대한 확인을 추가합니다.
장기 단기 EMA의 주기적 변수를 최적화하여 다양한 품종의 특성에 더 적합하게 만듭니다.
이전 하위점과 하위점의 사이클 파라미터를 설정하여, 한 기간 동안의 최고 가격과 최저 가격을 사용한다.
지표 전환 영역을 간격으로 설정하여 자주 거래하는 것을 피하십시오.
단독 손실을 통제하기 위한 전략이 추가되었습니다.
VRP 수량지표와 같은 다른 수량기술지표와 결합.
기계 학습 방법을 사용하여 매개 변수를 자동으로 최적화하십시오.
전체적으로 거래량 흔들림 지표에 기반한 긴 짧은 선 교차 전략은 거래량 전환의 특성을 충분히 활용하고 판단력이 강하며, 트렌드 개발 초기에는 좋은 탐지성이 있다. 또한 이전 고기 낮은 점과 결합하여 구체적인 방향을 결정하여 거래 결정을 더 정확하게 한다. 그러나 가짜 신호를 초래하는 손실을 방지하기 위해 위험 관리에 주의를 기울여야 한다. 이 전략은 최적화 할 수있는 여지가 있으며, 수학적 변수 조정 및 조합 지표 측면에서 확장 할 수 있으므로 거래 지연이 짧아지고 시장이 변화에 더 빨리 반응한다.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-03-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("SB_Volume_oscillator_Prev_high_low", overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
shortlen = input(5, minval=1)
longlen = input(10, minval=1)
short = ema(volume, shortlen)
long = ema(volume, longlen)
osc = 100 * (short - long) / long
//hline(0, title="Zero")
//plot(osc)
zero=input(0.0)
low_val=input(0.0)
high_val=input(0.0)
prev_high_val=input(0.0)
prev_low_val=input(0.0)
where=input(0)
where:=nz(where[1])
low_val:=nz(low_val[1])
high_val:=nz(high_val[1])
prev_high_val:=nz(prev_high_val[1])
prev_low_val:=nz(prev_low_val[1])
if(crossover(osc,zero))
high_val:=osc
where:=1
prev_low_val:=low_val
low_val:=osc
if(crossunder(osc,zero))
low_val:=osc
where:=-1
prev_high_val:=high_val
high_val:=osc
if(where==1)
if(high_val<osc)
high_val:=osc
if(where==-1)
if(low_val>osc)
low_val:=osc
if (crossover(osc,zero))
if(prev_high_val<=abs(prev_low_val))
strategy.entry("My Long Entry Id", strategy.long)
if(prev_high_val>abs(prev_low_val))
strategy.entry("My Short Entry Id", strategy.short)
if (crossunder(osc,zero))
if(prev_high_val<=abs(prev_low_val))
strategy.entry("My Long Entry Id", strategy.long)
if(prev_high_val>abs(prev_low_val))
strategy.entry("My Short Entry Id", strategy.short)