
この戦略は,Bollinger Bands指数と相対的に強い指数 (RSI) の指数に基づいた量化取引戦略である.この戦略は,機械学習の方法を用いて,近1年の歴史データをPython言語で復元して最適化し,最適なパラメータの組み合わせを見つけました.
この戦略の取引シグナルは,二重のボリンジャーバンドとRSI指数の総合判断に由来する. その中で,ボリンジャーバンド指数は,価格の標準差帯から計算された波動チャネルである. 価格が波動チャネルに近づいたり触れたときに取引シグナルが生じる. 一方,RSI指数は,価格の超買超売を判断する.
具体的には,閉盘価格が1.0標準差を下回ったとき,そしてRSIが42より大きいときに買取シグナルが生成される.閉盘価格が1.0標準差上回り,そしてRSIが70より大きいときに売り出しシグナルが生成される.さらに,この戦略は,2つのセットの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)