Stoch RSI와 MFI를 기반으로 한 양적 거래 전략


생성 날짜: 2024-01-29 10:11:14 마지막으로 수정됨: 2024-01-29 10:11:14
복사: 1 클릭수: 1272
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Stoch RSI와 MFI를 기반으로 한 양적 거래 전략

개요

이 전략 종합은 Stochastic RSI와 MFI 두 가지 지표를 사용하여 과매매 현상을 식별하고 구매 및 판매 결정을 내립니다. 기본 아이디어는 주식 가격이 과매매 될 때 판매를 고려하고 주식 가격이 과매매 될 때 구매를 고려합니다.

전략 원칙

스토카스틱 RSI 지표는 무작위 지표 ((KDJ) 와 상대적으로 강한 지표 ((RSI) 의 장점을 결합한다. 그것은 먼저 RSI를 통해 일정 기간 동안의 RSI 값을 계산하고, 그 다음 무작위 지표의 방법을 사용하여 RSI 배열의 stochastics K와 D 값을 계산하여 RSI가 과매매되는지 판단한다.

돈 흐름 지수 (MFI) 는 거래량과 가격의 변화를 바탕으로 시장 수요 공급 관계와 과매매 상황을 판단한다. 이 지표는 가격 상승이 여러 가지 힘이 공허 힘보다 강하다는 것을 나타냅니다. 변동이 커지면 여러 가지 힘이 공허 힘보다 강하므로 거래량이 증가하면 여러 가지 힘이 가격 상승을 유도한다.

이 전략은 스토카스틱 RSI의 오버 바이 라인과 오버 세일 라인을, 그리고 MFI의 오버 바이 라인과 오버 세일 라인을 설정한다. 스토카스틱 RSI 지표의 K 라인이 오버 세일 라인을 아래에서 위로 또는 MFI 지표가 오버 세일 라인을 아래에서 위로 건너면 구매 신호가 발생한다. 스토카스틱 RSI 지표의 K 라인이 오버 바이 라인을 위에서 아래로 또는 MFI 지표가 오버 세일 라인을 위에서 아래로 건너면 판매 신호가 발생한다.

전략적 이점

이 전략은 스토카스틱 RSI와 MFI 지표를 결합하여 시장의 과매매 현상을 더 안정적으로 식별하고 잘못된 신호를 방지 할 수 있습니다.

첫째, 스토카스틱 RSI 지표는 자체적으로 더 높은 신뢰성과 민감성을 가지고 있으며, 일반 무작위 지표에 비해 과매매 상황을 더 정확하게 판단할 수 있다. 둘째, MFI 지표는 거래량과 가격 변화의 관점에서 과매매를 판단하여 다른 차원의 참고를 제공하여 단 하나의 관점에서 판단하는 오류를 피한다.

마지막으로, 스토카스틱 RSI와 MFI 지표는 상호 보완적입니다. 스토카스틱 RSI는 가격 자체의 변화에 더 초점을 맞추고, MFI는 거래량과 거래량의 변화에 더 초점을 맞추고 있습니다. 둘을 결합하여 더 포괄적인 관점에서 시장 상태를 판단하여 더 정확한 신뢰할 수있는 거래 결정을 내릴 수 있습니다.

전략적 위험

이 전략에는 다음과 같은 몇 가지 위험들이 있습니다.

  1. 지표가 잘못된 신호를 보내는 위험. 스토카스틱 RSI와 MFI 지표는 높은 신뢰성을 가지고 있지만 특정 시장 환경에서 잘못된 구매 판매 신호를 발송하여 거래 손실을 초래할 수 있습니다.

  2. 과매매 과매매 지표 파라미터가 잘못 설정되는 위험. 스토카스틱 RSI와 MFI 지표의 파라미터 설정은 거래 신호에 큰 영향을 미칩니다. 만약 파라미터가 잘못 설정되면 지표의 효용성을 약화시킬 수 있습니다.

  3. 지표 지연 신호의 위험. 스토카스틱 RSI와 MFI 지표는 어느 정도 지연이 있을 수 있으며, 최적의 구매/판매 시기를 놓칠 수 있다.

  4. 빈 포지 기간 동안의 정리 위험. 지표가 신호를 내리지 않은 빈 포지 기간 동안, 가로 포지 정리 상황이 발생하면 일정 기회 비용 손실을 초래할 수 있다.

위험을 대응하는 해결책은: 지표 변수를 조정, 스톱로스를 설정, 포지션을 축소, 다른 지표와 결합하는 등이다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 동적량형 지표와 결합하여, Stochastic RSI와 MFI 지표 신호에 기초하여 판단 조건을 추가하여, 정리 기간 동안 거래를 피하십시오. 예를 들어, 종결 상장 가격 / 거래량 돌파 판단을 추가하십시오.

  2. 스톱스 메커니즘을 추가한다. 긴 라인 포지션에 대해 이동 스톱스를 증가시키거나, 짧은 라인 거래시 특정 점 스톱스를 설정하여 단편 손실을 제어한다.

  3. 최적화 매개 변수 설정. 스토카스틱 RSI와 MFI의 매개 변수 길이를 조정하고, 오버 바이 오버 셀 라인의 위치를 조정하여 매개 변수 설정을 시장 상황에 더 적합하게합니다.

  4. 시장상황에 따라 동적으로 조정하는 전략. 트렌드상황을 식별하고 트렌드상황을 정리하고, 트렌드상황에서 트렌드운전 전략을 추적하고, 트렌드상황에서 트렌드운전을 피하는 전략을 종료한다.

  5. 기계 학습 알고리즘과 결합하여 자동 최적화. 강화 학습과 같은 알고리즘을 적용하여 피드백 결과에 따라 동적으로 매개 변수와 규칙을 조정하여 전략을 자동으로 최적화합니다.

전략 소스 코드
/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 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/
// © carterac

//@version=5
strategy("MFI and Stoch RSI Bot", overlay=true)

// Stochastic RSI settings
length = input(14, title="Stochastic RSI Length")
smoothK = input(3, title="Stochastic RSI K")
smoothD = input(3, title="Stochastic RSI D")

// Stochastic RSI overbought and oversold levels
stochRSIOverbought = input(70, title="Stochastic RSI Overbought Level")
stochRSIOversold = input(20, title="Stochastic RSI Oversold Level")

// Money Flow Index (MFI) settings
mfiLength = input(14, title="MFI Length")
mfiOverbought = input(70, title="MFI Overbought Level")
mfiOversold = input(20, title="MFI Oversold Level")

// Calculate RSI
rsiValue = ta.rsi(close, 11)

// Calculate Stochastic RSI
rsiHigh = ta.highest(rsiValue, 11)
rsiLow = ta.lowest(rsiValue, 7)
k = ta.sma(100 * (rsiValue - rsiLow) / (rsiHigh - rsiLow), 3)
d = ta.sma(k, 3)

// Calculate MFI
mfiValue = ta.mfi(volume, mfiLength)

// Determine buy and sell signals
buyCondition = ta.crossover(k, stochRSIOversold) or ta.crossover(mfiValue, mfiOversold)
sellCondition = ta.crossunder(k, stochRSIOverbought) or ta.crossunder(mfiValue, mfiOverbought)

// Plotting signals
plotshape(buyCondition, location.belowbar, color=color.green, style=shape.triangleup, title="Buy Signal")
plotshape(sellCondition, location.abovebar, color=color.red, style=shape.triangledown, title="Sell Signal")

strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.entry("Sell", strategy.short, when = sellCondition)