이중 BB 지표 RSI 양적 거래 전략

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

双BB指标RSI量化交易策略

개요

이 전략은 볼링거 밴드 지표와 상대적 약률 지표 (RSI) 를 기반으로 한 양적 거래 전략이다. 이 전략은 기계 학습 방법을 사용하여 파이썬 언어로 거의 1 년의 역사적 데이터를 리테스트하여 최적의 매개 변수 조합을 찾았습니다.

전략적 원칙

이 전략의 거래 신호는 이중 볼링거 밴드와 RSI의 합성 판단에서 유래한다. 이 중 볼링거 밴드 지표는 가격의 표준 오차에 따라 계산되는 변동 통로이다. 가격이 변동 통로를 가까이하거나 접촉할 때 거래 신호가 생성된다. RSI는 가격의 오버바임 오버팔이를 결정한다.

구체적으로, 마감값이 1.0 스탠다드 지점보다 낮을 때, RSI가 42보다 높을 때 구매 신호를 생성한다. 마감값이 1.0 스탠다드 지점보다 높을 때, RSI가 70보다 높을 때 판매 신호를 생성한다. 또한, 이 전략은 입상 및 중지 손실 평형에 사용되는 BB와 RSI의 두 개의 파라미터 그룹을 설정한다. 이 파라미터들은 많은 리트임과 기계 학습을 통해 얻을 수 있는 우수값이다.

장점 분석

이 전략의 가장 큰 장점은 매개 변수들의 정확성이다. 기계 학습의 방법을 통해 매개 변수들은 전체적으로 재검토되어 최적의 샤르페 비율을 얻는다. 이것은 전략의 수익률을 보장하고 위험을 통제한다. 또한 이중 지표 조합은 신호의 정확성과 승률을 향상시킨다.

위험 분석

이 전략의 위험은 주로 스톱 손실 포인트 설정에서 비롯된다. 스톱 손실 포인트 설정이 너무 커지면 손실을 효과적으로 제어할 수 없다. 또한 스톱 손실점이 절차 수수료, 거래 스리프 포인트 등 다른 거래 비용 계산과 함께 잘못 계산되면 위험도 증가한다. 위험을 줄이기 위해 스톱 손실 규모 파라미터를 조정하고 거래 주파수를 줄이고 합리적인 스톱 손실 위치를 계산하는 것이 좋습니다.

최적화 방향

이 전략에는 더 많은 최적화 여지가 있습니다. 예를 들어, 볼링거 밴드의 길이 매개 변수를 변경하거나 RSI의 초고가 초판 기준을 조정하는 것을 시도할 수 있습니다. 또한, 다른 지표를 도입하여 여러 지표 포메이션을 구축하는 것을 시도할 수 있습니다. 이것은 전략의 수익 공간과 안정성을 향상시킬 수 있습니다.

요약

이 전략은 이중 BB 지표와 RSI 지표를 결합하여 기계 학습 방법을 통해 최적의 매개 변수를 획득하여 높은 수익률과 제어 가능한 위험 수준을 달성합니다. 이 전략은 지표 포맷 판단과 매개 변수 최적화 두 가지 측면의 장점을 가지고 있습니다. 지속적인 개선으로 이 전략은 훌륭한 양적 거래 전략이 될 것으로 기대됩니다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2020
strategy(overlay=true, shorttitle="Flawless Victory Strategy" )

// Stoploss and Profits Inputs
v1 = input(true, title="Version 1 - Doesn't Use SL/TP")
v2 = input(false, title="Version 2 - Uses SL/TP")
stoploss_input = input(6.604, title='Stop Loss %', type=input.float, minval=0.01)/100
takeprofit_input = input(2.328, title='Take Profit %', type=input.float, minval=0.01)/100
stoploss_level = strategy.position_avg_price * (1 - stoploss_input)
takeprofit_level = strategy.position_avg_price * (1 + takeprofit_input)

//SL & TP Chart Plots
plot(v2 and stoploss_input and stoploss_level ? stoploss_level: na, color=color.red, style=plot.style_linebr, linewidth=2, title="Stoploss")
plot(v2 and takeprofit_input ? takeprofit_level: na, color=color.green, style=plot.style_linebr, linewidth=2, title="Profit")

// Bollinger Bands 1
length = 20
src1 = close
mult = 1.0
basis = sma(src1, length)
dev = mult * stdev(src1, length)
upper = basis + dev
lower = basis - dev

// Bollinger Bands 2
length2 = 17
src2 = close
mult2 = 1.0
basis2 = sma(src1, length2)
dev2 = mult2 * stdev(src2, length2)
upper2 = basis2 + dev2
lower2 = basis2 - dev2

// RSI
len = 14
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)

// Strategy Parameters
RSILL= 42
RSIUL= 70
RSILL2= 42
RSIUL2= 76

rsiBuySignal = rsi > RSILL
rsiSellSignal = rsi > RSIUL
rsiBuySignal2 = rsi > RSILL2
rsiSellSignal2 = rsi > RSIUL2

BBBuySignal = src < lower
BBSellSignal = src > upper
BBBuySignal2 = src2 < lower2
BBSellSignal2 = src2 > upper2

// Strategy Long Signals
Buy = rsiBuySignal and BBBuySignal
Sell = rsiSellSignal and BBSellSignal
Buy2 = rsiBuySignal2 and BBBuySignal2
Sell2 = rsiSellSignal2 and BBSellSignal2

if v1 == true
    strategy.entry("Long", strategy.long, when = Buy, alert_message = "v1 - Buy Signal!")
    strategy.close("Long", when = Sell, alert_message = "v1 - Sell Signal!")

if v2 == true
    strategy.entry("Long", strategy.long, when = Buy2, alert_message = "v2 - Buy Signal!")
    strategy.close("Long", when = Sell2, alert_message = "v2 - Sell Signal!")
    strategy.exit("Stoploss/TP", "Long", stop = stoploss_level, limit = takeprofit_level)


더 많은 내용