ダブルBB指標とRSIをベースにした無欠の勝利量的な取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 10:33:43
タグ:

img

概要

この戦略は,ボリンジャーバンドス指標と相対強度指数 (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)


もっと