ボリンジャーバンドとRSIに基づくFNGU定量取引戦略


作成日: 2024-01-29 14:53:47 最終変更日: 2024-01-29 14:53:47
コピー: 0 クリック数: 671
1
フォロー
1617
フォロワー

ボリンジャーバンドとRSIに基づくFNGU定量取引戦略

概要

この策略は,ブリンラインとRSIのFNGU量化取引策略である.これは,FNGUの株式に特化した長所策策である.この策略は,ブリンライン指標とRSI指標を主に使用して,株式の超買い超売状況を識別し,購入と売却のシグナルを生成する.

戦略原則

この戦略の核心的な論理は,ブリンライン指標とRSI指標の組み合わせに基づいています.

まず,ブリン線は3つの線で構成される. 中線,上線,下線. 中線はn日間のSMAであり,上線と下線はそれぞれ中線の正負k倍分の標準差である. 上線または下線に近づいたり触れたりすると,株式が超買いまたは超売り状態に入ることを表す.

この策略では,ブリンラインの中間期間の長さは235日であり,パラメータk値は2である.価格がブリンライン下線より低いとき,または価格がブリンライン中線を上下から突破したときに買取シグナルが生成され,価格がブリンライン上線より高いとき,売り込みシグナルが生成される.

第二に,RSIは,株の超買超売の程度を反映する.RSIが70を超えると超買,30を下ると超売を表す.この戦略では,RSIパラメータの期間長さは2である.

この戦略では,ブリンライン指標とRSI指標を組み合わせて使用します. RSI指標が超売区から突破し,同時に価格がブリンラインの下線を下回り,または触れたときに買取シグナルを生成します. RSI指標が超売区から下破し,価格がブリンライン上線より高くなったときに売りシグナルを生成します.

戦略的優位性

この戦略の利点は以下の通りです.

  1. ブルインラインとRSIの2つの指標を組み合わせることで,買入シグナルがより正確で信頼性が高くなります.

  2. ブリンラインを使って株の超買超売り領域を識別し,RSIは偽の信号をフィルターし,両者は互いを補完する.

  3. 長期取引は空頭取引のリスクを考慮しない.

  4. FNGUは,FNGUの株価が非常に変動しているため,戦略のパラメータを最適化しました.

  5. 自動ストップが実現し,損失のリスクを低減した.

  6. プログラミングはシンプルで明快で,理解し,修正しやすい.

リスクと解決策

この戦略にはいくつかのリスクがあります.

  1. ブリンラインとRSIは,偽信号を生じさせやすく,利されやすく,慎重に取引する必要があります.適切なパラメータを調整したり,他の指標を追加してフィルタリングすることができます.

  2. FNGU株自体は波動性があり,不適切な止損設定により損失が増加する可能性があります.適切な止損幅を緩和する必要があります.

  3. FNGUのような高変動株のみに適した戦略で,他の株には適さない.異なる株に応じてパラメータを調整する必要がある.

  4. 戦略のパラメータは最適化されていますが,市場の変化によりパラメータが適用されなくなる可能性があり,継続的に最適化に注目する必要があります.

戦略最適化の方向性

この戦略は以下の方向で最適化できます.

  1. KDJ,MACDなどの他の指標の組み合わせを加え,信号をより正確にする.

  2. ブリンラインとRSIのパラメータを最適化して,より多くの種類の株に対応する.

  3. 機械学習モデルによる意思決定の強化により,より多くのデータを活用して取引シグナルを生成する.

  4. 超周期的な取引を実現し,より高い時間寸法のデータを利用して信号を生成する.

  5. 感情面分析とソーシャルデータの組み合わせで 取引のシグナルが作られます.

  6. 様々なパラメータ設定を素早くテストする量化反射システムの開発.

要約する

この戦略は,波動性の高い株式,例えばFNGUなどに特に適した長期ポジション戦略である.この戦略は,ブリンライン指標とRSI指標を組み合わせて,オーバーバイオーバーセールが発生したときに取引シグナルを生成し,株価の逆転の機会を捉えることを目的としている.この戦略の最適化スペースは大きく,さらなる研究を重ね,適用面が広く,効果がより良くなるように改善する価値があります.

ストラテジーソースコード
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger + RSI + EMA, Double Strategy Long-Only (by EMKM)", shorttitle="1Min Killer", overlay=true)

///////////// RSI
RSIlength = input(2, title="RSI Period Length") // Adjusted RSI period length
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = rsi(price, RSIlength)

///////////// Bollinger Bands
BBlength = input(235, minval=1, title="Bollinger Period Length") // Adjusted Bollinger period length
BBmult = 2
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
BBtarget38 = BBbasis + 0.38 * BBdev  // Line at 38% of Bollinger Band width
BBtarget50 = BBbasis + 0.50 * BBdev  // Line at 50% of Bollinger Band width

///////////// EMA
emaLength = input(20, title="EMA Period Length")
ema = ema(close, emaLength)

source = close
buyEntry = crossover(source, BBlower) or (close < BBlower and close > BBbasis) or (low < BBlower and close > BBbasis) // Add condition for low touching Bollinger Band
sellEntry = crossunder(source, BBupper)

///////////// Plotting
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
plot(BBtarget38, color=color.blue, linewidth=2, title="SMA at 38% of BB width")  // Line at 38%
plot(BBtarget50, color=color.green, linewidth=2, title="SMA at 50% of BB width")  // Line at 50%
plot(ema, color=color.orange, title="EMA")  // Plot EMA

///////////// RSI + Bollinger Bands Strategy
longCondition = crossover(vrsi, RSIoverSold) and buyEntry
sellCondition = crossunder(vrsi, RSIoverBought) and close > BBupper

close_long = close > BBbasis
close_short = close < BBbasis

if (not na(vrsi))
    if longCondition
        strategy.entry("Buy", strategy.long, qty=10, stop=BBlower, comment="Buy")
    else
        strategy.cancel(id="Buy")
        
    if close_long
        strategy.close("Buy")

if (sellCondition)
    strategy.entry("Sell", strategy.short, qty=10, stop=BBupper, comment="Sell")
else
    strategy.cancel(id="Sell")

if close_short
    strategy.close("Sell")