マルチタイムフレームRSIとストキャスティクス戦略


作成日: 2024-02-21 15:56:37 最終変更日: 2024-02-21 15:56:37
コピー: 1 クリック数: 924
1
フォロー
1617
フォロワー

マルチタイムフレームRSIとストキャスティクス戦略

概要

マルチタイムフレームRSIとランダム指数戦略は,RSIとランダム指数の組み合わせを用い,複数のタイムフレームで市場の超買超売を判断する戦略である.この戦略は,4つのタイムフレームのRSIとランダム指数を同時に組み合わせ,その平均値を用い,全体的な市場の動きと超買超売を判断し,各タイムフレームの指数の優位性を発揮する.

戦略原則

1. RSI指標について

RSI指数は,強力な超買い超売り指数であり,一定の期間における株式の上昇・下落を基に計算する.RSI値は0から100の間で波動し,一般に,RSIが70以上は超買い,30未満は超売りを表す.

この戦略は,長さ14のRSI指標を使用し,1ヶ月,1日,4時間,1時間の4時間枠のRSI値を取得します.

2. ランダムな指標%K

ランダムな指標%Kは,市場が超買か超売りかを示す指標で,値は0から100の間で波動する.一般的に,ランダムな指標は80以上は超買,20未満は超売りを表す.

この策略では,ランダムな指標%Kの長さは14,平滑度は3で,同様に上記の4時間枠の値を取得します.

3. 平均値の組み合わせ

戦略の鍵は,上記の2つの指標の4時間枠の平均値を計算して,各時間枠の優位性を発揮し,全体的な市場動向を判断することです.具体的計算式は以下のとおりです.

RSI平均値 = (RSI月線 + RSI日線 + RSI4時間 + RSI1時間) / 4

ランダムな指標の平均値 = (ランダムな指標の月線 + ランダムな指標の日線 + ランダムな指標の4時間 + ランダムな指標の1時間) / 4

4. 取引信号

RSI平均値が30未満で,ランダムな指標平均値が20未満の場合は,多めに; RSI平均値が70以上の場合,ランダムな指標平均値が80以上の場合は,空白に.

追加後,ランダムな指標平均値が70以上でRSI平均値が50以上で平仓;空白後,ランダムな指標平均値が30未満でRSI平均値が50未満で平仓.

優位分析

この戦略の最大の利点は,2つの指標と複数のタイムフレームを同時に組み合わせることで,取引信号の信頼性を大幅に高め,偽信号を最大限に避けるというものです.具体的利点は以下の通りです.

  1. RSI指数とランダム指数は相互検証する.単一の指数だけで偽の信号を生成することが容易であり,この戦略は2つの指標を組み合わせて,信号の正確性を向上させることができる.

  2. 多時間枠分析は判断の正確性を向上させることができる.例えば,月線と日線はオーバーバイを表示するが,4時間と1時間は完全にオーバーバイしていないので,トレンドが続く可能性があることを示している.すべての時間枠が一致すれば,信号はより信頼性がある.

  3. 構造的な転換点をより明確に判断する.複数のタイムフレームで同時に重要なサポート/レジスタンス突破が見られ,現在のトレンドの転換を判断することができます.

  4. 自動計算指標平均値 操作を簡素化する.手作業の計算を必要とせず,コードが自動的にデータ抽出,指標計算および平均を求め,作業量を減らす.

リスク分析

この戦略の主なリスクは,すべての技術分析戦略と同様に,偽信号を発生させる可能性を完全に回避できないことです. 主なリスクは以下の通りです.

  1. トレンドの短期逆転は,被套の原因となる.例えば,多頭ポジションの間,価格ショートラインは,下方突破のサポートレベルの後,再び反発する.このとき,戦略の平仓ロジックは,すぐにストップ損失を必要とするが,短期損失を引き起こす可能性がある.

  2. キーサポート/レジスタンス位の破損は,追跡ストップの破損につながる. キーサポートまたはレジスタンス位の破損が発生した場合,元のストップ価格は直接突破され,より大きな損失を引き起こす可能性があります.

  3. タイムフレームの設定が不適切である場合,判断エラーが発生する.タイムフレームが長すぎるとか短すぎると,指標の判断に偏差が生じることがあります.

  4. 指数の分散は,より高い時間枠の指標が過剰買いを示し,より低い時間枠の指標が過剰売りを示し,平均指数は現実を反映できないというダンケルク効果を引き起こす.

リスクに対応するソリューションには,ストップ・ローズ戦略の最適化,動的なサポート/レジスタンス位の追跡,タイムフレームのパラメータの調整,フィルタリングメカニズムの追加などがあります.

最適化の方向

この戦略は,上記のリスクを考慮して,以下の方向で最適化できます.

  1. ストップ・メカニズムを最適化し,ストップ・トラッキングとストップ・スロットを実現する.これは,収益を保証しながら単一損失のリスクを制御する.

  2. 四半期線などのより高い時間枠を追加する.これは,より大きなレベルのトレンドフィルタリングを利用して誤導信号を与える.指標が相違する場合,より高い時間枠を優先する.

  3. 交差量の多空検証を増加させる.交差量の変化を組み合わせて底背離と頂背離を判断し,ゾンビの動きに誤導されないようにする.

  4. 入場時間を最適化します. 重要な歴史的サポート/レジスタンス近くで突破入場を待つか,最適なリコール入場点を待つことができます.

  5. 適応ストップを増やす. 最近の波動率とATRに基づいてダイナミックストップを計算し調整することができます.

要約する

多時間枠RSIとランダム指標戦略は,RSI指標とランダム指標を組み合わせて,複数の時間枠で市場の超買超売り区間を判断することによって,明確な信頼性の高い取引戦略である.その最大の利点は,指標と時間枠の組み合わせが相互に検証し,偽信号のリスクを最大限に回避することです.もちろん,この戦略には,類似の技術分析戦略が普遍的に存在するリスクもあります.

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

////////////////////////////////////////// MTF Stochastic & RSI Strategy 🚥 ©️ bykzis /////////////////////////////////////////
//

// *** Inspired by "Binance CHOP Dashboard" from @Cazimiro and "RSI MTF Table" from @mobester16 *** and LOT OF COPY of Indicator-Jones MTF Scanner
// 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//@version=5
strategy('MTF RSI & STOCH Strategy🚥 by kzi', overlay=false,initial_capital=100, currency=currency.USD, commission_value=0.01, commission_type=strategy.commission.percent)


// Pair list
var string GRP1       = '══════════    General    ══════════'
overbought = input.int(80, 'Overbought Level', minval=1, group=GRP1)
oversold = input.int(20, 'Oversold Level', minval=1, group=GRP1)


/// Timeframes
var string GRP2       = '══════════   Timeframes   ══════════'
timeframe1 = input.timeframe(title="Timeframe 1", defval="W", group=GRP2)
timeframe2 = input.timeframe(title="Timeframe 2", defval="D", group=GRP2)
timeframe3 = input.timeframe(title="Timeframe 3", defval="240", group=GRP2)
timeframe4 = input.timeframe(title="Timeframe 4", defval="60", group=GRP2)

// RSI settings
var string GRP3       = '══════════   RSI settings   ══════════'
rsiLength = input.int(14, minval=1, title='RSI length', group=GRP3)
rsiSource = input(close, 'RSI Source', group=GRP3)
rsioverbought = input.int(70, 'RSI Overbought Level', minval=1, group=GRP3)
rsioversold = input.int(30, 'RSI Oversold Level', minval=1, group=GRP3)


/// Get RSI values of each timeframe /////////////////////////////////////////////////////
rsi = ta.rsi(rsiSource, rsiLength)
callRSI(id,timeframe) =>
    rsiValue = request.security(id, str.tostring(timeframe), rsi, gaps=barmerge.gaps_off)
    rsiValue

RSI_TF1 = callRSI(syminfo.tickerid, timeframe1)
RSI_TF2 = callRSI(syminfo.tickerid, timeframe2)
RSI_TF3 = callRSI(syminfo.tickerid, timeframe3)
RSI_TF4 = callRSI(syminfo.tickerid, timeframe4)




/////// Calculate Averages /////////////////////////////////////////////////////////////////
calcAVG(valueTF1, valueTF2, valueTF3, valueTF4) =>
    math.round((valueTF1 + valueTF2 + valueTF3 + valueTF4) / 4, 2)

AVG=calcAVG(RSI_TF1, RSI_TF2, RSI_TF3, RSI_TF4)



// Stochastic settings
var string GRP4       = '══════════   Stochastic settings   ══════════'
periodK = input.int(14, '%K length', minval=1, group=GRP4)
smoothK = input.int(3, 'Smooth K', minval=1, group=GRP4)
stochSource = input(close, 'Stochastic Source', group=GRP4)
stochoverbought = input.int(70, 'Stochastic Overbought Level', minval=1, group=GRP4)
stochoversold = input.int(30, 'Stochastic Oversold Level', minval=1, group=GRP4)


/// Get Stochastic values of each timeframe ////////////////////////////////////////////////
stoch = ta.sma(ta.stoch(stochSource, high, low, periodK), smoothK)
getStochastic(id,timeframe) =>
    stochValue = request.security(id, str.tostring(timeframe), stoch, gaps=barmerge.gaps_off)
    stochValue

Stoch_TF1 = getStochastic(syminfo.tickerid, timeframe1)
Stoch_TF2 = getStochastic(syminfo.tickerid, timeframe2)
Stoch_TF3 = getStochastic(syminfo.tickerid, timeframe3)
Stoch_TF4 = getStochastic(syminfo.tickerid, timeframe4)


AVG_STOCH=calcAVG(Stoch_TF1, Stoch_TF2, Stoch_TF3, Stoch_TF4)


plot(AVG, color = color.blue, title='RSI')
plot(AVG_STOCH, color = color.yellow,title='STOCH')
hline(rsioverbought,color=color.red)
hline(rsioversold, color=color.lime)
hline(50, color=color.white)

//============ signal Generator ==================================//

if AVG <= rsioversold and AVG_STOCH <=stochoversold 
    strategy.entry('Buy_Long', strategy.long)

    
strategy.close("Buy_Long",when=(AVG_STOCH >=70 and AVG >=50 and close >=strategy.position_avg_price),comment="Long_OK")

if AVG >=rsioverbought and AVG_STOCH >=stochoverbought
    strategy.entry('Buy_Short', strategy.short)


strategy.close("Buy_Short",when=(AVG_STOCH <=30 and AVG <=50 and close <=strategy.position_avg_price),comment="Short_OK")


///////////////////////////////////////////////////////////////////////////////////////////