RSI指標に基づくトレンドフォロー戦略


作成日: 2023-10-26 15:44:15 最終変更日: 2023-10-26 15:44:15
コピー: 0 クリック数: 689
1
フォロー
1617
フォロワー

RSI指標に基づくトレンドフォロー戦略

概要

この戦略は,RSI指標に基づいてシンプルなトレンドフォロー取引システムを設計し,特定の日付の範囲で,RSI指標によって市場のトレンド方向を判断し,自動で多空を行うことができます.

戦略原則

この戦略は,市場動向を判断するためにRSIの指標を使用し,ブリン帯通路を判断するために超買い超売り領域を使用する.

まず,RSI値を計算し,RSIの移動平均と標準差を計算してブリン帯の上下軌を計算する.RSI指標は0-1の間で波動し,ブリン帯は標準差によって超買超売区間を決定し,RSIが上軌を上回るときは超買区間,下軌を低くすると超売区間である.

RSIは,下線から上線への突破時に買い信号を生じ,上線から下線への突破時に売り信号を生じ,トレンドフォローを実現します. 戦略の入場後に,ストップ・ロストを設定せず,指定された日付の終了まで平仓します.

この戦略は,単純に,効率的に,トレンドの方向を判断するためにRSI指標を使用し,ブリン帯で特定の取引時間を決定します.取引日数を制限することで,不必要なリスクを回避できます.

優位分析

  • RSIでトレンドの方向を判断するのは簡単で効果的です
  • ブリン帯の取引確認信号と結合して,偽の突破を避ける
  • 市場リスクの回避に役立つ日程の制限
  • ストップ・ストップを設定せず,トレンドを最大限に追跡します.
  • 柔軟なパラメータを調整し,多種多様な市場環境に適用

リスクと最適化

  • 市場が激しく波動し,損失を招く可能性
  • ストップ・ストップが設定されず,リスクが効果的にコントロールできない
  • パラメータを正しく設定しない場合,取引が頻繁になり,機会が逃れることがあります.

改善する方向:

  • リスクの管理に Stop Loss 戦略を導入する
  • パラメータ設定を最適化し,勝利率を上げます.
  • 偽突破を防ぐために,他の指標と組み合わせたフィルター信号
  • ポジション規模を動的に調整する

要約する

この戦略は,全体的に非常にシンプルで直接的なトレンドフォロー戦略である. RSIの判断トレンドを使用し,ブリンがフィルター信号を持って,取引日付の範囲を制限し,トレンドを効果的に追跡し,リスクを制御することができます. しかし,戦略は,シンプルで効果的な基盤を維持して,さらに最適化することができます. 止損ストップ,パラメータ最適化,信号フィルターなどの方法によって,戦略をさらに完善し,実体取引に適したものにします.

ストラテジーソースコード
/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Gidra
//2018

//@version=2
strategy(title = "Gidra's RSI or MFI Strategy v0.1", shorttitle = "Gidra's RSI or MFI v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, title="source")
lengthRSI = input(14, title="RSI or MFI length")
// RSI %B
useRSI = input(true, title="use RSI or MFI")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//MFI
upper = sum(volume * (change(src) <= 0 ? 0 : src), lengthRSI)
lower = sum(volume * (change(src) >= 0 ? 0 : src), lengthRSI)
mf = rsi(upper, lower)

//RSI
rsi = useRSI?rsi(src, lengthRSI): mf

// %B
length = input(50, minval=1, title="BB length")
mult = input(1.618, minval=0.001, maxval=50)
basis = sma(rsi, length)
dev = mult * stdev(rsi, length)
upperr = basis + dev
lowerr = basis - dev
bbr = (rsi - lowerr)/(upperr - lowerr)

plot(bbr, color=black, transp=0, linewidth=2)
// band1 = hline(1, color=white, linestyle=dashed)
// band0 = hline(0, color=white, linestyle=dashed)
// fill(band1, band0, color=teal)
hline(0.5, color=white)

//Signals
up = bbr >= 0 and bbr[1] < 0
dn = bbr <= 1 and bbr[1] > 1
//exit = ((bbr[1] < 0.5 and bbr >= 0.5) or (bbr[1] > 0.5 and bbr <= 0.5))

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59)// or exit
    strategy.close_all()