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

저자:차오장, 날짜: 2024-01-29 10:11:14
태그:

img

전반적인 설명

이 전략은 스토카스틱 RSI와 MFI 지표를 결합하여 과잉 구매 및 과잉 판매 조건을 식별하고 구매 및 판매 결정을 내립니다. 기본 아이디어는 주식 가격이 과잉 구매 될 때 판매를 고려하고 주식 가격이 과잉 판매 될 때 구매를 고려하는 것입니다.

전략 원칙

스토카스틱 RSI 지표는 스토카스틱 오시레이터 (KDJ) 와 상대적 강도 지표 (RSI) 의 장점을 결합합니다. 먼저 RSI를 통해 일정 기간 동안 RSI 값을 계산하고, 그 다음 스토카스틱 방법을 적용하여 이 RSI 배열의 스토카스틱 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. 모멘텀 지표를 포함합니다. 통합 기간 동안 거래를 피하기 위해 스토카스틱 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)


더 많은