マルチタイムフレームRSIとストーキャスティックス戦略 (Multi Timeframe RSI and Stochastics Strategy) は,複数のタイムフレームでRSIとストーキャスティック指標を組み合わせて,市場のオーバーバイトとオーバーセール条件を決定する戦略である.これは,市場全体のモメンテムとオーバーエクステンションを測定するために4つの異なるタイムフレームからのRSIとストーキャスティックの平均値を利用する.これは,異なるタイムフレームの指標の強みを活用することを可能にします.
RSI指標は,最近の価格変動の大きさに基づいて,過剰購入および過剰販売レベルを測定する強力な振動器である.RSI値は0から100の間変動し,70を超える値は過剰購入,30未満は過剰販売とみなされる.
この戦略は14期RSIを使用し,月間,日用,4時間および1時間のタイムフレームからRSI値を得ます.
ストキャスティックス %K は,市場における買い過ぎ/売り過ぎのレベルを0から100までのスケールで示す指標です.一般的に,80を超える値は買い過ぎの市場を示し,20以下の値は売り過ぎの市場を示します.
この戦略は 14,3 ストカスティック構成を使用し,上記のタイムフレームから% K の値も得ます.
戦略の核心は,複数のタイムフレームにおける2つの指標の平均を取ることにある.これは,全体的な市場状況を測定する際に各タイムフレームの強みを利用することを可能にします.正確な式は:
RSI平均 = (月間RSI + 日々のRSI + 4H RSI + 1H RSI) / 4
ストキャスティック平均 = (月間ストキャスティック + 日々のストキャスティック + 4Hストキャスティック + 1Hストキャスティック) / 4
この戦略は,RSI平均が30を下回り,ストキャスティックス平均が20を下回るとロングを起動し,RSI平均が70を超え,ストキャスティックス平均が80を超えるとショートを起動します.
ロングポジションはストキャスティックス平均が70を超え,RSI平均が50を超えると閉じる.ショートポジションはストキャスティックス平均が30を下回り,RSI平均が50を下回ると閉じる.
この戦略の主要な利点は,複数のタイムフレームにわたる2つの指標の組み合わせにあります.これは,取引信号の信頼性を大幅に向上させ,誤った信号を最小限に抑えます.具体的な利点は以下の通りです.
RSIとストーキャスティックは互いにシグナルとして検証する.単一の指標に依存すると,誤った信号がより頻繁に発生する傾向がある.二重指標アプローチは正確性を促進する.
複数のタイムフレームはより堅牢な分析につながります.例えば,月間および日々のタイムフレームは過買い市場を示していますが,より小さなタイムフレームはまだ過買いレベルに達していません.これは上昇傾向が続く可能性を示しています.すべてのタイムフレームが一致するとシグナルがより信頼性があります.
構造的転換点の明確な識別 複数のタイムフレームが同時に主要なS/Rレベルを突破し,トレンドの逆転を示している場合
平均値の自動計算はワークフローを簡素化します.コードがデータ取得,指標計算,平均値を自動的に処理するため,手動計算は必要ありません.
すべての技術分析戦略と同様に,主要なリスクは,ウィップソーや誤った信号にあります.主なリスクには以下が含まれます.
トレンドの逆転が止まる.例えば,価格は長期間にわたって反転する前にサポートを下回る短期間の破綻を起こす.そのようなケースは,出口論理のために短期間の損失が発生する可能性があります.
キー S/R の無効化により,遅延停止が失敗する.主要な S/R レベルが切断されれば,その下にある停止が直接発生し,平均以上の損失が生じる.
適正でないタイムフレームの構成から誤った判断.過度に平らまたは過度に平らなタイムフレームは誤った振動値を提供することがあります.
タイムフレーム間の差異はダンケルク効果を引き起こす.より高いタイムフレームが過剰購入市場を示しますが,より短いタイムフレームは過剰販売状況を示し,平均値は非効率になります.
ストップ・ロスの戦略を最適化し,S/Rレベルを追跡し,タイムフレームのパラメータを調整し,追加のフィルターを追加します.
議論されたリスクを考えると,強化の機会は以下のとおりです.
ストップ・ロスのメカニズムを最適化して,トライリング・ストップと部分的な出口を組み込む.これは,単一の取引リスクを制御しながら利益をロックします.
季度チャートのようなより高い時間枠を追加します.これは,誤った信号をフィルターするためにより大きなトレンドガイドを可能にします.偏差が発生した場合,より高い時間枠からの読み取りを優先します.
ゾンビ傾向を避けるため,牛/熊差による傾向の検証のための追加的なボリュームを組み込む.
入力シグナルを精細調整し,重要な歴史的S/Rの周りのブレイクを待つか,最適なプルバックエントリを許可する.
ダイナミックストップポジショニングのための最近の波動性と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") ///////////////////////////////////////////////////////////////////////////////////////////