この戦略は,ボリンジャーバンドス指標と相対強度指数 (RSI) 指標に基づいた定量的な取引戦略です.この戦略は,機械学習方法を用いて,ピトン言語を使用してほぼ1年間の歴史的データでパラメータをバックテストし,最適化し,最適なパラメータの組み合わせを見つけます.
この戦略の取引信号は,ダブルボリンジャーバンドと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)