
이 전략은 RSI, MACD 및 이동 평균을 이용한 조합 전략이다. RSI의 과매매 신호, MACD의 민감성 및 이동 평균의 지표 효과를 통합하여 시점을 판단한다.
이 전략은 다음과 같은 네 가지 조건에 따라 결정됩니다.
이 전략은 다음 두 가지 조건이 충족될 때 청산된다:
이 전략은 수익이 철수될 때 적당히 손실을 막아 큰 손실을 방지하는 것이다.
이 전략의 가장 큰 장점은 각 지표의 장점을 발휘하는 지표의 조합에 있습니다.
이 전략에는 다음과 같은 두 가지 위험이 있습니다.
회수 위험이 크다. 이동 평균과 같은 트렌드형 전략의 가장 큰 위험은 시장의 역동으로 인한 큰 회수이다. 포지션 규모를 줄임으로써 회수를 적극적으로 제어할 수 있다.
매개 변수 최적화 난이도가 크다. 다중 지표 조합 전략 매개 변수 설정과 최적화 난이도가 크다. 단계적 방법, 유전적 알고리즘 등의 매개 변수 최적화 방법을 사용하여 최적의 매개 변수를 결정할 수 있다.
이 전략은 다음의 몇 가지 측면에서 개선될 수 있습니다.
추가 조건이 추가되어 가짜 신호를 더욱 필터링합니다. 예를 들어 거래량 지표, 변동률 지표 등과 결합합니다.
다양한 품종의 파라미터 설정 차이를 테스트한다. 파라미터를 더 많은 품종에 맞게 조정한다.
이동 평균 변수 설정을 최적화한다. 다양한 길이 변수의 차이를 테스트한다.
연구에서는 적응형 이동 평균을 사용한다. 시장 환경에 따라 다른 파라미터 조합을 스위치한다.
이 전략은 전반적으로 전형적인 최적화 버전 이동 평균 및 트렌드 추적 전략이다. 그것은 MACD, RSI와 같은 여러 주류 지표의 장점을 흡수하고, 시장 진입 시기와 손실을 판단하는 데 독자적이다. 다음으로, 매개 변수 최적화, 위험 제어 등 여러 측면에서 개선 할 수 있으며, 전략 매개 변수가 더 거칠고, 더 많은 품종에 적합하도록하여 더 높은 안정성을 얻을 수 있습니다.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)
// Inputs
src = input(close, title="RSI Source")
// RSI Settings
lengthRSI = input.int(14, minval=1)
// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")
// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)
// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")
// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")
atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")
// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)
// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Variables
var bool canEnterLong = na
// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr
// Entries and Exits
if hist < exitLevel and emaShort < emaLong
canEnterLong := true
strategy.close("Long")
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
strategy.entry("Long", strategy.long)
canEnterLong := false
lastEntryPrice := close
if lastEntryPrice < close
lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)
// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
last_buy = strategy.opentrades[0]
if (close < stopLossLevel)
strategy.close("Long", comment="Stop Loss Triggered")
if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
strategy.close("Long", comment="Take Profit Triggered")