
양적 전략 “다중 지표 융합 POMDP 계몽형 거래 시스템”은 기술 분석과 부분적으로 관찰 가능한 마르코프 의사 결정 과정 (POMDP) 을 기반으로 한 거래 방법이다. 이 전략은 우수한 상대적으로 약한 지표 (Stochastic RSI), 자금 흐름 지표 (MFI), 브린 밴드 (Bollinger Bands) 및 이동 평균 라인 종결 분산 지표 (MACD) 를 우아하게 결합하여 구매 및 판매 신호를 생성한다. 전략 설계의 핵심은 시장 상태를 다차원적으로 관찰하여 금융 시장의 불확실성과 부분적인 관찰성에 대응하기 위해 POMDP 유형의 의사 결정 프레임워크를 구축하는 것이다.
이 전략의 핵심 원칙은 부분적으로 관찰 가능한 마르코프 의사 결정 과정 (POMDP) 의 아이디어에 기반하여, 시장을 상태 부분적으로 보이는 시스템으로 간주한다. 다음의 핵심 기술 지표를 통해 시장 상태를 관찰한다:
볼링거 밴드: 20주기의 간단한 이동 평균을 중간 궤도로 사용하며, 표준 차이는 2.0으로, 가격 변동 영역을 식별하기 위해 위아래 궤도를 형성한다.
무작위적으로 상대적으로 약한 지표 (Stochastic RSI): RSI와 무작위 지표의 장점을 결합하여 14주기 길이와 3주기 부드러운 매개 변수를 설정하여 과매매 과매매 상태를 식별합니다. K값이 30보다 낮으면 과매매로 간주되며, 70 이상이면 과매매로 간주됩니다.
자금 흐름 지표 (MFI)14주기 계산을 사용하여 전형적인 가격 ((TP) 과 거래량의 곱셈을 통해 자금 흐름을 측정한다. MFI 40 이하는 과매매 신호로 간주되며, 60 이상은 과매매 신호로 간주된다.
MACD 지표: 12/26/9 변수 설정을 사용하여, MACD 선과 신호 선의 관계는 트렌드 방향을 확인하기 위해 사용됩니다.
전략의 결정 규칙은 다음과 같습니다.
이 전략은 또한 시간 기반의 자동 퇴출 메커니즘을 구현하고 있으며, 5 회의 지주 후 자동으로 지분을 청산하는 메커니즘을 설정하여 지주 시간 위험을 효과적으로 제어합니다.
다차원 신호 확인여러 기술 지표 (Stochastic RSI, MFI, MACD) 를 결합하여 전략은 시장 상태를 다양한 관점에서 볼 수 있으며, 단일 지표로 인해 발생할 수있는 잘못된 신호의 위험을 줄입니다.
POMDP 프레임워크의 적응성POMDP 사고의 도입은 전략이 불확실성과 부분적으로 관찰 가능한 조건에서 상대적으로 최적화된 결정을 내릴 수 있게 해 주며 실제 시장 환경에 더 적합합니다.
명확한 위험 통제: 고정된 탈퇴 주기를 설정함으로써 (주기 5개) 전략은 시간 차원의 위험을 통제하고, 장기적으로 불리한 움직임으로 인한 손실 확산을 방지한다.
기술 지표의 상호 보완성스토카스틱 RSI는 주로 가격 움직임을 반영하고, MFI는 가격과 거래량 정보를 결합하고, MACD는 트렌드 변화를 포착하고, 브린 밴드는 변동 범위를 정의한다. 이러한 지표는 상호 보완하여 신호의 신뢰성을 높인다.
코드 구현의 안정성: 전략은 MFI를 계산할 때 ta.sum 대신 math.sum을 사용해서 가능한 계산 오류를 수정하고 전략의 안정성을 강화했다.
자동화 실행 능력트레이딩 뷰 기반의 파인 스크립트 구현은 전략이 트레이딩 신호를 자동으로 생성하고 실행할 수 있도록 해 인간의 개입과 감정적 영향을 줄여줍니다.
오버쇼핑의 한계전략: 고정된 오버 바이 오버 소드 마이너스를 사용한다 (스토카스틱 RSI의 30/70과 MFI의 40⁄60), 이 고정된 마이너스는 다른 시장 환경과 다른 상품에 따라 항상 최적이 아닐 수 있으며, 신호 품질이 떨어질 수 있다.
“시간은 탈퇴의 양날의 칼이다”.고정 5주기 탈퇴 메커니즘은 위험을 통제하지만 잠재적인 수익을 제한하는 유리한 추세에서 조기 탈퇴 할 수 있습니다.
다중 지표 과잉 위험: 다중 지표가 다차원 확정을 제공하지만, 지표 사이에 일정한 연관성과 과잉이 존재할 수 있으며, 특정 시장 조건에서 신호 강화 편차로 이어질 수 있다.
동향 시장의 적응력이 부족하다이 전략은 주로 과매매와 반전 신호에 기반하고 있으며, 강한 추세 시장에서 과도한 잘못된 신호가 발생할 수 있으며, 이는 빈번한 거래와 불필요한 비용으로 이어집니다.
변수 최적화 의존성전략의 효과는 각 지표의 매개 변수 설정에 크게 의존하며, 다른 시장 조건은 다른 매개 변수 조합을 필요로 할 수 있으며, 전략 유지 및 조정의 복잡성을 증가시킵니다.
변동성 적응 장치의 부재이 전략은 시장의 변동성에 대한 자조 장치가 없으며, 높은 변동성 환경에서 더 많은 잘못된 신호를 생성할 수 있습니다.
동적 변수 조정 메커니즘: 시장 상태에 기반한 변수 자조 메커니즘을 도입하여, 예를 들어, 불린 밴드의 표준 차이의 배수를 변동률에 따라 조정하거나, 시장 추세의 강도에 따라 오버 구매 오버 판매 경계를 조정하여, 다양한 시장 환경에서 전략의 적응성을 향상시킵니다.
완벽한 손절매 메커니즘시간 차원의 탈퇴 메커니즘 외에도 가격 변화에 기반한 스톱 스 메커니즘을 추가하여 ATR 기반의 스톱 포인트 지점을 설정하여 위험 관리의 포괄성을 향상시킵니다.
시장 환경 필터: 트렌드 강도 지표나 변동률 지표와 같은 시장 환경 식별 모듈을 추가하고, 전략에 부적절한 시장 환경에서 거래를 줄이거나 중지하고, 불리한 조건에서 과도한 거래를 피하십시오.
신호 품질 평가 시스템: 신호 품질 평가 메커니즘을 개발하여 여러 지표의 일관성 정도, 시장 환경, 역사 신호 성공률 등의 요인에 따라 신호를 평가하고, 높은 품질의 신호만 실행하여 전략의 효과를 높인다.
기계 학습 강화: POMDP 프레임워크와 기계 학습 방법을 결합하여 역사 데이터 훈련을 통해 의사 결정 전략을 최적화하여 시스템이 과거 거래에서 배우고 개선 할 수 있도록합니다.
자금 관리 전략의 최적화: 동적 포지션 관리 메커니즘을 도입하여 신호 강도, 시장 상태 및 계정 위험에 따라 거래 규모를 조정하여 더 과학적인 자금 관리를 실현하십시오.
“다중 지표 융합 POMDP 계몽형 거래 시스템”은 여러 가지 기술 지표와 POMDP 의사 결정 프레임 워크를 결합한 정량 거래 전략이다. 이 전략은 Stochastic RSI, MFI, MACD 및 브린 띠와 같은 지표의 연동 작용을 통해 시장 부분 관찰성의 문제를 어느 정도 해결하여 거래 의사 결정에 다차원 신호 확인을 제공합니다.
전략의 주요 장점은 다각적인 시장 관찰 능력과 명확한 위험 제어 장치에 있지만, 동시에 파라미터 최적화 의존성과 특정 시장 환경 적응성의 부족에 대한 도전에 직면합니다. 동적 파라미터 조정, 손해 막기 장치의 개선, 시장 환경 필터의 추가와 같은 최적화 방향을 도입함으로써 전략은 안정성과 적응성을 더욱 향상시킬 잠재력이 있습니다.
전체적으로, 이것은 합리적이고 논리적으로 설계된 양적 거래 시스템이며, 특히 시장에 대한 예측 능력이 있지만 위험을 통제하려는 거래자에게 적합합니다. 지속적인 최적화와 다양한 시장 환경에 적응함으로써이 전략은 거래자의 도구 상에 효과적인 도구가 될 수 있습니다.
/*backtest
start: 2024-07-22 00:00:00
end: 2025-07-20 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":2000000}]
*/
//@version=6
strategy("Debit Spread POMDP‑Inspired Strategy", overlay=true, margin_long=100, margin_short=100)
// ——— Constants
const int K_OVERSOLD = 30
const int K_OVERBOUGHT = 70
const int MFI_OVERSOLD = 40
const int MFI_OVERBOUGHT = 60
const int EXIT_BARS = 5
// ——— User inputs
stochLength = input.int(14, "Stochastic RSI length")
stochSmooth = input.int(3, "Stochastic smoothing")
mfiLength = input.int(14, "MFI length")
bbLength = input.int(20, "Bollinger length")
bbStdDev = input.float(2.0, "Bollinger std dev")
macdFast = input.int(12, "MACD fast length")
macdSlow = input.int(26, "MACD slow length")
macdSignal = input.int(9, "MACD signal length")
// ——— Bar index tracking for exits
var int callEntryBar = na
var int putEntryBar = na
// ——— Bollinger Bands
basis = ta.sma(close, bbLength)
upper = basis + bbStdDev * ta.stdev(close, bbLength)
lower = basis - bbStdDev * ta.stdev(close, bbLength)
// ——— Stochastic RSI
rsi = ta.rsi(close, stochLength)
k = ta.sma(ta.stoch(rsi, rsi, rsi, stochLength), stochSmooth)
d = ta.sma(k, stochSmooth)
// ——— Manual MFI calculation (FIXED: using math.sum)
tp = (high + low + close) / 3.0
rawMF = tp * volume
posFlow = (tp > tp[1] ? rawMF : 0.0)
negFlow = (tp < tp[1] ? rawMF : 0.0)
posMF = math.sum(posFlow, mfiLength) // FIXED: math.sum instead of ta.sum
negMF = math.sum(negFlow, mfiLength) // FIXED: math.sum instead of ta.sum
moneyRatio = negMF != 0 ? posMF / negMF : 0.0
mfi = negMF != 0 ? 100 - 100 / (1 + moneyRatio) : 0.0
// ——— Manual MACD calculation
fastMA = ta.ema(close, macdFast)
slowMA = ta.ema(close, macdSlow)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, macdSignal)
// ——— POMDP‑inspired decision rules
bullCondition = ((k < K_OVERSOLD) or (mfi < MFI_OVERSOLD)) and (macdLine > signalLine)
bearCondition = ((k > K_OVERBOUGHT) or (mfi > MFI_OVERBOUGHT)) and (macdLine < signalLine)
if bullCondition
strategy.entry("CallDebit", strategy.long)
callEntryBar := bar_index // Track entry bar
if bearCondition
strategy.entry("PutDebit", strategy.short)
putEntryBar := bar_index // Track entry bar
// FIXED: Manual time-based exits using bar_index
if not na(callEntryBar) and bar_index >= callEntryBar + EXIT_BARS
strategy.close("CallDebit")
callEntryBar := na
if not na(putEntryBar) and bar_index >= putEntryBar + EXIT_BARS
strategy.close("PutDebit")
putEntryBar := na
// ——— Plots
plot(basis, color=color.gray, linewidth=1, title="BB Basis")
plot(upper, color=color.orange, linewidth=1, title="BB Upper")
plot(lower, color=color.orange, linewidth=1, title="BB Lower")
plot(k, title="%K", color=color.blue)
plot(d, title="%D", color=color.purple)
plot(mfi, title="MFI", color=color.green)
plot(macdLine - signalLine, title="MACD Histogram", color=color.red, style=plot.style_columns)