이중 BB 지표와 RSI를 기반으로 한 무결한 승리의 양적 거래 전략

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

img

전반적인 설명

이 전략은 볼링거 밴드 지표와 상대적 강도 지표 (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)


더 많은