【移植#25】RSIの平均方法を選べるようにする — SMA・EMA・SMMA・LWMAと確定MTF¶

この記事の3行まとめ
- RSI内部の値上がり幅・値下がり幅を、SMA・EMA・SMMA・LWMAの4方式から選べます
- シグナル線を追加し、MTFでは確定済みの上位足だけを下位足へ表示します
- 4方式を各1000本検査した最大誤差は0で、同じ時点のRSI差は最大25.98まで広がりました
今回の原典は「RSIの平均方法を変えたらどうなるか」¶
投稿日順で次に当たる2010年1月12日の記事では、RSIの値上がり幅と値下がり幅を平均する方法を変えられるインジケーターが紹介されていました。SMA、EMA、SMMA、LWMAを選べるだけでなく、RSIのシグナル線とMTF表示も備えたものです。
原典には、「それをRSIと呼んでよいのか分からない」という率直な但し書きもあります。RSIの骨格は保っていますが、平均方法を変えれば標準的なRSIとは別の値になります。そこで今回も、売買シグナルの優劣を決めるのではなく、計算方法の違いを選択・比較できるMQL5インジケーターとして移植します。
RSIのどこを変えるのか¶
RSIの基本式は次のとおりです。
価格が上がったバーでは値上がり幅へ差分を入れ、値下がり幅は0にします。下がったバーではその逆です。この2系列を同じ方法で平均してから比率を求めます。
今回切り替えられるのは、この「平均」の部分です。MQL5のENUM_MA_METHODに合わせて4方式を実装しました。
| 方法 | 平均の特徴 | 反応の傾向 |
|---|---|---|
| SMA | 期間内を同じ重みで平均 | 窓から古い値が外れると段差が出ることがある |
| EMA | 直近値へ指数的に大きな重み | SMMAより反応が速くなりやすい |
| SMMA | 前回平均を長く残す平滑化 | 値動きを比較的なめらかに追う |
| LWMA | 最新から古い順にN〜1の線形重み | 直近の変化を強く反映しやすい |
期間14のLWMAなら、最新の値幅に14、最も古い値幅に1の重みを付けます。値上がり側と値下がり側の双方に同じ方式を使います。
値上がり幅も値下がり幅も0の区間はRSを作れないため、中立値50とします。値下がり幅だけが0なら100、値上がり幅だけが0なら0です。
RSIとは別にシグナル線を計算する¶
緑のRSI本線に加え、その値をもう一度移動平均したシグナル線を表示します。配布版の初期値は5期間EMAで、こちらも4方式から選択できます。
画像では緑が14期間LWMA版RSI、オレンジが5期間EMAシグナルです。シグナル線とのクロスは変化の確認には使えますが、クロスしただけで売買注文を出す機能は持たせていません。
検証した1000本では上抜け30回、下抜け31回でした。回数が多いことからも、クロスだけでは横ばい相場の往復に巻き込まれやすいと分かります。
MTFは確定済み上位足だけを表示する¶
画像はEURUSDの1時間足へ、4時間足で計算したRSIを表示しています。緑とオレンジの線が階段状なのは、同じ4時間足の値を複数の1時間足へ対応させているためです。
形成中の4時間足をそのまま表示すると、4時間足が閉じるまでRSI値が変わり続けます。過去チャートでは最後の値しか見えないため、リアルタイムで見えていた変化を再現できません。
今回の実装では、各1時間足の終了時刻までに確定していた4時間足を探します。たとえば4時間足が12時に確定するなら、その値を使えるのは12時以降です。まだ形成中の上位足は使いません。
参照時間足はチャート時間足以上に限定しています。1時間足チャートなら1時間足、2時間足、4時間足、日足などを選べます。下位足を上位足へ集約する用途にはしていません。
MQL5実装で確認した安全ポイント¶
履歴取得本数を毎回確認する¶
参照時間足の終値はCopyClose、開始時刻はCopyTimeで取得します。どちらか一方でも要求本数に満たない場合は、その回の計算を進めません。履歴のダウンロード途中に、異なる長さの配列を対応させないためです。
配列を古い順へ統一する¶
終値、時刻、値上がり幅、値下がり幅、RSI、シグナルをすべて古いバーから新しいバーへ進む方向で計算します。LWMAの重み1〜Nも、この順序なら新しい値ほど大きくなります。
再帰型と固定窓型を分ける¶
SMAとLWMAは期間内の値から各バーを直接計算します。EMAとSMMAは最初の期間を単純平均で初期化し、その後は前回値から再帰計算します。4方式を一つの曖昧な近似式へまとめず、それぞれの重み付けを分けています。
計算範囲を制限する¶
初期値では直近3000本と、RSI・シグナルの初期化に必要な余白を取得します。チャート履歴全体を毎ティック計算し続けないため、長期間表示しても処理量が際限なく増えません。
専用MT5での動作確認¶
売買を行わない専用テストMT5で、本体と検証EAをコンパイルしました。検証側で値上がり幅・値下がり幅から4方式のRSIとシグナルを再計算し、H4の確定時刻からH1への対応も1本ずつ照合しています。
| 項目 | 設定・結果 |
|---|---|
| チャート | EURUSD・1時間足 |
| 参照時間足 | 4時間足・確定済みのみ |
| RSI期間 | 14 |
| 検査した平均方法 | SMA / EMA / SMMA / LWMA |
| シグナル | EMA・5期間 |
| 検査本数 | 各方式1000本 |
| RSIの最大誤差 | 0.000000000000 |
| シグナルの最大誤差 | 0.000000000000 |
| LWMA版RSIの範囲 | 2.86〜80.31 |
| 4方式間の最大差 | 25.98 |
| LWMA版の上抜け/下抜け | 30回/31回 |
| MTFの確定値対応 | 一致 |
| 本体コンパイル | 0 errors / 0 warnings |
| 検証用コンパイル | 0 errors / 0 warnings |
| キャプチャ | 成功、エラー0 |
原典では4方式に大差がないように見えると書かれていました。今回も普段は近い動きをする場面が多い一方、同じ時点における最高値と最低値の差は最大25.98まで広がりました。急な値動きでは平均方法の選択が70・30への到達やシグナルクロスの時刻を変え得ます。
パラメータ¶
| パラメータ | 初期値 | 説明 |
|---|---|---|
InpRsiPeriod | 14 | 値上がり幅・値下がり幅を平均する期間 |
InpRsiMethod | SMMA | RSI内部の平均方法 |
InpSignalPeriod | 5 | RSIシグナルの期間 |
InpSignalMethod | EMA | シグナルの平均方法 |
InpTimeframe | Current | 参照する時間足 |
InpBarsToCalculate | 3000 | 表示する直近バー数 |
標準に近い穏やかな動きを起点にするならSMMA、直近変化を強調して比較したいならLWMAが候補になります。ただし、反応が速いことは予測精度が高いことを意味しません。
ダウンロード¶
25_Custom_Smoothed_RSI_MTF_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、確認したいチャートへ適用してください。注文送信や通知機能はありません。
ロジック評価の結論¶
RSIの式だけを見ると一つの指標に思えますが、「平均値上がり幅」と「平均値下がり幅」をどう作るかで結果は変わります。この移植の価値は、4方式を同じ入力条件で切り替え、違いを観察できることです。
今回の検証では、4方式すべてが実装した数式どおりに動き、MTFも確定済み値だけを表示できました。しかし、どの方式が相場を最もよく予測するかは、この検査では測っていません。
売買へ使う場合は、平均方法を過去データへ合わせ込むだけで終わらせず、方式を決めた後の未使用期間で確認してください。RSIの70・30やシグナルクロスは状態を整理する目安であり、単独の収益保証ではありません。
前後の記事¶
前: 【移植#24】LWMA版MACDのクロスをチャートへ表示する — 確定足だけに矢印を出す
次: 【移植#26】バッドティック候補を異常ヒゲから探す — 中央値TRで要確認バーを絞る