이중 지표 필터 구매 신호 전략

저자:차오장, 날짜: 2023-12-07 10:43:01
태그:

img

전반적인 설명

이중 지표 필터드 바이 신호 전략은 잠재적 인 구매 기회를 식별하기 위해 스토카스틱 RSI와 볼링거 밴드의 조합을 사용합니다. 가장 유리한 구매 지점을 구별하기 위해 여러 필터 조건을 사용합니다. 이것은 변동하는 시장 환경에서 높은 확률의 구매 입시 시기를 식별 할 수 있습니다.

전략 논리

이 전략은 두 가지 지표를 활용하여 구매 기회를 파악합니다.

첫째, 시장이 과판되었는지 여부를 결정하기 위해 스토카스틱 RSI를 사용합니다. 지표는 스토카스틱과 이동 평균 라인을 결합하여 아래에서 %D 라인의 위쪽의 %K 라인 크로스오버를 과판 신호로 취급합니다. 20% 이상의 %K 값이 과판된 것으로 간주되도록 임계값이 설정됩니다.

두 번째로, 전략은 가격 변화를 식별하기 위해 볼링거 밴드를 사용합니다. 볼링거 밴드는 가격의 표준 편차에서 계산되는 밴드입니다. 가격이 하위 범위에 접근하면 과판 상태를 신호합니다. 여기서 전략은 파라미터를 더 넓은 볼링거 밴드에서 표준 편차의 2 배로 설정하여 더 많은 잘못된 신호를 필터링합니다.

양쪽 지표에서 얻은 과잉 판매 신호를 통해 전략은 구매 입시 시기를 더 자세히 파악하기 위해 여러 필터 조건을 추가합니다.

  1. 가격은 방금 볼링거 하부 밴드에서 올라갔습니다.
  2. 현재 폐쇄는 N 바 전에 폐쇄보다 높습니다. 구매력을 보여줍니다.
  3. 현재 폐쇄는 장기 또는 중장기 뷰백 기간보다 낮습니다

전체적인 기준이 충족되면 구매 신호가 발사됩니다.

강도 분석

이중 지표 필터 전략은 몇 가지 주요 강점을 가지고 있습니다.

  1. 이중 지표 디자인은 잘못된 신호를 피함으로써 구매 신호를 더 신뢰할 수 있습니다.
  2. 다중 필터 조건은 범위에 한정된 시장에서 과도한 구매를 방지합니다.
  3. 스토카스틱 RSI 가이드와 볼링거 밴드의 조합으로 과잉 판매 수준은 가격 이상 현상을 감지합니다.
  4. 구매력 필터는 구매를 위한 충분한 추진력을 보장합니다.
  5. 풀백 필터는 구매 영역의 신뢰성을 더욱 확인합니다.

요약하자면, 전략은 다양한 기술 지표와 필터링 기술을 결합하여 구매 입시 시기를 더 정확하게 파악하여 더 나은 거래 성과로 이어집니다.

위험 분석

이 전략의 장점에도 불구하고 관리해야 할 위험성도 있습니다.

  1. 부적절한 매개 변수 조정은 너무 빈번하거나 보수적인 신호로 이어질 수 있습니다. 신중한 최적화가 필요합니다.
  2. 엄격한 필터링 논리는 빠르게 변화하는 시장에서 몇 가지 기회를 놓칠 수 있습니다.
  3. 서로 다른 지표는 잘못된 신호를 일으킬 수 있습니다. 교차 조사는 필요합니다.
  4. 추세 결정의 부족은 하위 시장에서 전략을 노출시킵니다.

위험을 완화하기 위해 제안된 개선 사항은 다음과 같습니다.

  1. 필터 감수성을 균형을 맞추기 위해 지표 매개 변수를 조정합니다.
  2. 트렌드를 결정하는 필터를 도입하여 황소 함정을 피하십시오.
  3. 스톱 로스 메커니즘을 적용해야 합니다.

더 나은 기회

이 전략은 아래와 같은 측면에서 더 개선될 수 있습니다.

  1. 더 나은 구매 시점 모델을 위해 더 많은 지표 조합을 테스트하십시오. 예를 들어 VRSI, DMI 등.
  2. 매개 변수를 자동으로 최적화하는 기계 학습 알고리즘을 도입합니다.
  3. 수익의 한계점에 있는 스톱 로스를 추적하기 위한 적응적인 스톱 로스 메커니즘을 구축합니다.
  4. 부피 지표가 있어야 충분한 추진력을 확보할 수 있습니다.
  5. 손실을 제한하기 위해 동적 포지션 사이징과 같은 돈 관리 모델을 최적화하십시오.

보다 발전된 기술을 도입하면 더 정확한 신호 생성 능력과 더 강력한 위험 통제를 달성하여 라이브 거래에서 더 신뢰할 수있는 이익을 얻을 수 있습니다.

결론

요약하자면, 이중 지표 필터드 바이 신호 전략은 가격 강도 및 풀백 검증과 같은 스토카스틱 RSI, 볼링거 밴드 및 여러 필터 조건을 활용하여 높은 확률의 바이 엔트리 포인트를 식별합니다. 적절한 매개 변수 조정, 위험 통제 등으로 안정적인 자동화 거래 전략이 될 가능성이 있습니다.

그 핵심 강점은 정확한 타이밍을 위한 효율적인 지표와 필터 조합에 있다. 위험과 개선 경로는 또한 식별되고 관리될 수 있다. 전반적으로 이것은 실행 가능하고 효과적인 수치 전략이다.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SORAN Buy and Close Buy", pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, overlay=false)

////Buy and Close-Buy messages
Long_message = input("")
Close_message = input("")

///////////// Stochastic Slow
Stochlength = input(14, minval=1, title="lookback length of Stochastic")
StochOverBought = input(80, title="Stochastic overbought condition")
StochOverSold = input(20, title="Stochastic oversold condition")
smoothK = input(3, title="smoothing of Stochastic %K ")
smoothD = input(3, title="moving average of Stochastic %K")
k = sma(stoch(close, high, low, Stochlength), smoothK)
d = sma(k, smoothD)

 
///////////// RSI 
RSIlength = input( 14, minval=1 , title="lookback length of RSI")
RSIOverBought = input( 70  , title="RSI overbought condition")
RSIOverSold = input( 30  , title="RSI oversold condition")
RSIprice = close
vrsi = rsi(RSIprice, RSIlength)

///////////// Double strategy: RSI strategy + Stochastic strategy

pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0    , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")
lb = input(50  , title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
new = input(false, title="-------Text Plots Below Use Original Criteria-------" )
sbc = input(false, title="Show Text Plot if WVF WAS True and IS Now False")
sbcc = input(false, title="Show Text Plot if WVF IS True")
new2 = input(false, title="-------Text Plots Below Use FILTERED Criteria-------" )
sbcFilt = input(true, title="Show Text Plot For Filtered Entry")
sbcAggr = input(true, title="Show Text Plot For AGGRESSIVE Filtered Entry")
ltLB = input(40, minval=20, maxval=99, title="Long-Term Look Back Current Bar Has To Close Below This Value OR Medium Term--Default=40")
mtLB = input(14, minval=1, maxval=40, title="Medium-Term Look Back Current Bar Has To Close Below This Value OR Long Term--Default=14")
str = input(3, minval=1, maxval=9, title="Entry Price Action Strength--Close > X Bars Back---Default=3")
//Alerts Instructions and Options Below...Inputs Tab
new4 = input(false, title="-------------------------Turn On/Off ALERTS Below---------------------" )
new5 = input(false, title="----To Activate Alerts You HAVE To Check The Boxes Below For Any Alert Criteria You Want----")
sa1 = input(false, title="Show Alert WVF = True?")
sa2 = input(false, title="Show Alert WVF Was True Now False?")
sa3 = input(false, title="Show Alert WVF Filtered?")
sa4 = input(false, title="Show Alert WVF AGGRESSIVE Filter?")

//Williams Vix Fix Formula
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph

//Filtered Bar Criteria
upRange = low > low[1] and close > high[1]
upRange_Aggr = close > close[1] and close > open[1]
//Filtered Criteria
filtered = ((wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh))
filtered_Aggr = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and not (wvf < upperBand and wvf < rangeHigh)

//Alerts Criteria
alert1 = wvf >= upperBand or wvf >= rangeHigh ? 1 : 0
alert2 = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh) ? 1 : 0
alert3 = upRange and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered ? 1 : 0
alert4 = upRange_Aggr and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered_Aggr ? 1 : 0

//Coloring Criteria of Williams Vix Fix
col = wvf >= upperBand or wvf >= rangeHigh ? #00E676 : #787B86

isOverBought = (crossover(k,d) and k > StochOverBought) ? 1 : 0
isOverBoughtv2 = k > StochOverBought ? 1 : 0
filteredAlert = alert3 ? 1 : 0
aggressiveAlert = alert4 ? 1 : 0

plot(isOverBought, "Overbought / Crossover", style=plot.style_line, color=#FF5252) 
plot(filteredAlert, "Filtered Alert", style=plot.style_line, color=#E040FB) 
plot(aggressiveAlert, "Aggressive Alert", style=plot.style_line, color=#FF9800)

if (filteredAlert or aggressiveAlert)
    strategy.entry("Buy", strategy.long, alert_message = Long_message)

if (filteredAlert or aggressiveAlert)
    alert("Buy Signal", alert.freq_once_per_bar)


if (isOverBought)
    strategy.close("Buy", alert_message = Close_message)


더 많은