동적 RSI와 CCI 결합된 다중 요인 양적 거래 전략

저자:차오장, 날짜: 2023-11-27 18:54:34
태그:

img

전반적인 설명

이 전략은 동적 RSI, CCI 및 여러 MA 이동 평균을 결합하여 다중 요인 중심의 양적 거래 전략을 구현합니다. 전략은 추세, 과소매 및 과소매와 같은 여러 차원을 고려하여 판단하고 거래 신호를 생성합니다.

전략 원칙

기술 지표

  • MA: 가격 동향을 결정하기 위해 기간 중 평균 종료 가격을 계산합니다.
  • RSI: 판사들의 과잉 구매 및 과잉 판매 수준
  • CCI: 재판관들의 과잉 구매 및 과잉 판매 상태
  • 스톡 KDJ: 주류 추세에서 스톡 스틱의 오차를 판단합니다.

거래 신호

구매 신호: MA12가 MA26를 넘고 CCI는 100 이하 (가장 팔린), KDJ는 80 이하 (가장 팔린)

판매 신호: RSI가 동적 임계치 아래로 넘어갑니다.

장점

  1. 다중 요인, 포괄적인 판단, 낮은 잘못된 신호
  2. 판매 가능, 실시간 과잉 구매 및 과잉 판매 탐지 동적 기준
  3. 트렌드, 스토카스틱, 주류 기술 지표를 결합합니다
  4. 여러 매개 변수 조정, 높은 유연성을 채택

위험성

  1. 너무 복잡한 여러 요소 조합, 어려운 매개 변수 조정
  2. 성능은 매개 변수 선택과 밀접한 관련이 있습니다.
  3. 매개 변수 최적화를 위한 엄격한 정량적 과정이 필요합니다.
  4. 높은 곡선 부착 위험

최적화

  1. 전략 안정성을 위한 더 많은 데이터 세트 테스트
  2. 최적을 찾기 위해 여러 매개 변수 조합 테스트
  3. 최대 마감을 줄이기 위해 스톱 로스를 추가합니다.
  4. 추격과 살해를 피하기 위해 위치 크기를 추가
  5. 다양한 제품에서 적응성을 테스트합니다.

결론

이 전략은 여러 기술적 지표와 다중 요소에 의한 판단을 매개 변수 조정 및 통계 검증으로 결합하여 좋은 결과를 달성합니다. 그러나 더 높은 복잡성, 과장 조정 방지 필요, 최대 마감량을 줄이기 위해 위치 사이징 및 스톱 손실을 제어 할 수 있습니다. 제품 및 시간 프레임에 걸쳐 전략을 더욱 확장 할 수 있습니다.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)

더 많은