
다인자 균형 흔들기 거래 전략은 여러 기술 지표 신호를 종합적으로 활용하는 정량 거래 전략이다. 이 전략은 변화율 지표 ((ROC), 상대적으로 강한 지표 ((RSI), 상품 통로 지표 ((CCI), 윌리엄 지표 ((%R) 및 평균 방향 지표 ((ADX) 의 에너지를 巧妙地 결합하여 종합적인 변동 지표를 계산하여 시장의 다공동적 움직임을 판단하고 거래 신호를 생성한다.
이 전략의 가장 큰 장점은 객관적이고 체계적으로 시장을 판단하고 가장 좋은 입구와 퇴출 시간을 찾는 데 있습니다. 변동 지표선이 0.75의 오버 바이 라인을 통과하면 구매 신호가 발생하고 변동 지표선이 0.25의 오버 세일 라인을 통과하면 매매 신호가 발생합니다.
다인자 균형 흔들기 거래 전략의 핵심은 통합 변동 지표의 계산이다. 지표의 계산 단계는 다음과 같다:
각각의 단일 기술 지표의 값을 계산: 변화 비율 지표 ((ROC), 상대 강도 지표 ((RSI), 상품 통로 지표 ((CCI), 윌리엄 지표 ((%R) 및 평균 방향 지표 ((ADX) 포함
각 기술 지표의 값을 0-1 범위의 값으로 표준화하여 비교할 수 있습니다.
가중치 평균의 사고를 이용하여, 종합 변동 지표의 값을 계산한다. 각 기술 지표에는 조정 가능한 무게가 있으며, ROC 2 , RSI 0.5 , CCI 2 , % R 0.5 , ADX 0.5 을 기본으로 한다. 각 표준 지표의 값을 해당 무게에 곱하고, 더하여, 무게 합으로 나누어, 0-1 범위 내의 종합 변동 값을 얻는다.
합성 변동 값이 적절하게 설정된 오버 바이 라인과 오버 세이 라인을 통과하면 그에 따른 거래 신호가 생성됩니다.
볼 수 있듯이, 이 전략은 여러 기술 지표의 에너지를 유연하게 활용하여 시장의 빈도를 판단하고 거래 결정을 내리는 체계적인 방법을 사용합니다. 이것은 단일 기술 지표가 가져오는 시장 소음을 피하고 여러 상황에서 거래 결정의 안정성을 유지할 수 있습니다.
다인자 균형 진동기 거래 전략은 다음과 같은 장점이 있다:
객관적이고 체계적인 시장 분석 방법을 제공합니다. 여러 가지 기술 지표를 사용하여 단일 도구의 결함을 피하고 양적 방법으로 실용적인 거래 신호를 생성합니다.
진입과 출구를 최적화하는 전략. 변동 지표의 정확한 가치 및 표준화된 처리는 시장을 판단하는 양적 근거를 제공합니다.
높이는 조정할 수 있다. 개인의 거래 스타일에 따라 각 지표의 무게와 매개 변수를 조정할 수 있으며, 다른 시장 상황에 적응할 수 있다.
실시간 신호 알림. 구매 신호, 출구 신호에 대한 알림을 설정할 수 있으며, 최신 시장 상황을 알 수 있습니다.
엄격한 재검토 및 최적화. 실전전보다 먼저, 역사적인 데이터에 대한 충분한 재검토를 통해 전략적 매개 변수를 판단하고 최적화하여 실전전력의 효과를 높일 수 있다.
다인자 균형 진동기 거래 전략에는 장점이 많지만, 실제 적용에서는 다음과 같은 위험도 존재한다.
매개 변수 최적화 위험. 지표 가중치와 매개 변수 설정이 부적절하면 실디 효과에 영향을 줄 수 있다. 이 시점에는 많은 재검토를 통해 최적의 매개 변수를 찾는 것이 필요하다.
오버 바이 오버 세일 영역 설정 위험. 오버 바이 오버 세일 영역 설정은 큰 시장을 고려해야 한다.
지표 분산 위험. 일부 지표가 분산되면, 종합 지표 판단에 영향을 미칩니다. 이 시점에서는 지표를 삭제하거나 무게를 낮추는 것을 고려할 수 있습니다.
양자 모델의 한계. 어떤 양자 모델도 특정 상황에서 실패할 수 있다. 운영자는 여전히 충분한 위험 인식을 유지해야 한다.
리스크를 피하기 위해, 실전 이전에는 충분한 피드백과 매개 변수 최적화가 이루어져야 하며, 전략의 한계를 이해하고 실전 효과를 추적하고, 실정에 따라 매개 변수 또는 무게를 유연하게 조정해야 한다. 필요한 경우 인적 개입도 매우 중요하다.
다인자 균형 진동기 거래 전략은 다음과 같은 몇 가지 측면에서 더욱 최적화 될 수 있습니다.
계속 다인자 모델을 풍부하게하십시오. 더 많은 다양한 유형의 기술 지표를 추가하여 모델 판단력을 향상시킬 수 있습니다.
기계 학습 방법을 시도하십시오. 신경 네트워크와 같은 고급 모델은 개별 지표를 예측하고 더 많은 암시된 특성을 추출 할 수 있습니다.
기본과 거시적인 측면을 결합하여. 경제 데이터, 성과 보고서와 같은 기본 요소를 추가하여 시장 상황을 판단하십시오.
자기 적응 조정 을 사용한다. 시장 환경 변화에 따라 지표 무게와 매개 변수를 동적으로 조정한다.
손해 제도를 도입한다. 합리적인 손해 제도를 설정하고, 단독 손해를 적극적으로 통제한다.
통합 자금 관리. 보유 규모에 따라 포지션 크기를 조정하여 양적 자금 관리를 수행한다.
다인자 균형 흔들기 거래 전략은 매우 훌륭한 양적 거래 전략이다. 그것은 여러 가지 기술 지표의 정수를 모아서 엄격한 양적 방법을 통해 시장을 판단한다. 동시에 개인 스타일에 맞게 조정할 수 있는 높은 사용자 정의 유연성을 가지고 있다. 물론, 모든 양적 전략은 제한이 있으며, 지속적으로 재검토, 최적화 및 업데이트를 통해 더 복잡한 시장 환경에 적응 할 수 있도록하는 것이 모든 전략의 목표이다.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © Julien_Eche
//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)
// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")
// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")
// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")
// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")
// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")
// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")
// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])
price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)
get_source(source_option) =>
price = price_close
if source_option == "open"
price := price_open
else if source_option == "high"
price := price_high
else if source_option == "low"
price := price_low
else if source_option == "close"
price := price_close
else if source_option == "hl2"
price := price_hl2
else if source_option == "hlc3"
price := price_hlc3
else
price := price_ohlc4
price
src = get_source(source_options)
// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")
// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
adxValue = adx(adxDiLength, adxLength)
// Normalizing the values
normalize(value, min, max) =>
(value - min) / (max - min)
normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)
// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)
// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)
// Strategy orders
if (enterLong)
strategy.entry("Buy", strategy.long)
if (exitLong)
strategy.close("Buy")
// Alert conditions
if (enterLong)
alert("Buy signal")
if (exitLong)
alert("Exit signal")