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