コンテンツにスキップ

【移植#19】オシレーター通知 — Slow StochasticクロスとWilliams %R到達を確定足で知らせる

Slow StochasticのクロスとWilliams %Rのしきい値到達を表示したEURUSD 1時間足

この記事の3行まとめ

  • Slow Stochasticは%Kと%Dのクロス、Williams %Rは-20/-80の外側へ入った瞬間を検出します
  • 形成中の足では通知せず、確定した足を新しく認識したときに一度だけポップアップと音を出します
  • EURUSD・1時間足の直近1000本で、4種類のシグナルと値域を実MT5で検査し、2本とも0 errors / 0 warningsを確認しました

今回の原典は「オシレーターへアラートを付ける」

投稿日順で次に当たる2010年1月6日の記事には、二つの依頼と、それぞれに対応したMQL4コードが掲載されていました。

元記事を読む

原典の依頼 通知条件
Slow Stochastic %Kと%Dがクロスしたとき
Williams %R -20または-80へ到達したとき

原典では、形成中の0番足で音を鳴らし、確定した1番足と2番足の比較でポップアップを出していました。この構成は反応が速い一方、形成中の足ではクロスが発生してから消えることがあります。

今回のMQL5版は、視覚マーカーも通知も確定足の判定へ統一しました。音だけ先に鳴ったのに、足が確定したらクロスが残っていない、という食い違いを避けるためです。


2本に分けた理由

Slow StochasticとWilliams %Rは、同じ「オシレーター通知」でも計算式、値域、しきい値が異なります。そこで、原典と同様に独立したインジケーターとして実装しました。

インジケーター 値域 検出内容 初期設定
Slow Stochastic Alert 0〜100 Slow %KとSlow %Dのクロス 14, 5, 5
Williams %R Alert -100〜0 -20を上抜け、-80を下抜け 期間14

必要な方だけチャートへ適用でき、時間足や通知音も別々に設定できます。両方を使う場合も、それぞれが自分の確定足時刻を記録するため、同じバーで通知処理を繰り返しません。


Slow Stochasticの計算を原典に合わせる

MQL5のiStochastic()は、バッファ0にメインライン、バッファ1にシグナルラインを返します。今回の初期値は次のとおりです。

Text Only
%K期間 = 14
%D期間 = 5
Slowing = 5
平滑化 = SMA
価格方式 = Close/Close

原典のコードは、標準Stochasticから得た2本をさらに現在・1本前・2本前の3点で平均していました。MQL5版もこの一段を残しています。

Text Only
SlowK[i] = (Main[i] + Main[i-1] + Main[i-2]) / 3
SlowD[i] = (Signal[i] + Signal[i-1] + Signal[i-2]) / 3

確定足iで、前の足までSlowD >= SlowKだった状態からSlowD < SlowKになれば上向きクロスです。反対に、SlowD <= SlowKからSlowD > SlowKになれば下向きクロスとします。

チャートでは、上向きを黄色の上矢印、下向きを赤色の下矢印で表示します。20と80の水平線は相場の位置を読む補助線であり、Slow Stochastic側の通知条件そのものには使っていません。


Williams %Rは「触れた」ではなく「外側へ入った」を検出

MQL5のiWPR()から期間14のWilliams %Rを取得します。通知条件は境界をまたいだ瞬間です。

シグナル 前の確定足 新しい確定足
上向き -20未満 -20以上
下向き -80より上 -80以下

たとえば、-20以上に5本連続で滞在しても上向き通知は最初の1回だけです。領域内にいるすべての足を「到達」として扱わず、境界をまたいだ足だけにマーカーを置きます。

上向きは黄色、下向きは赤色で表示します。上下の条件を別バッファに分けているので、あとからEAや別インジケーターがiCustom()でシグナルを読む場合にも方向を区別できます。


通知を確定足ごとに一度へ制限する

インジケーターの計算処理は、同じ形成中バーでもティックのたびに何度も呼ばれます。単に「クロスしていれば通知」と書くと、同じ条件でポップアップや音が連続する恐れがあります。

今回の2本は、次の順で通知します。

  1. 最新の形成中バーではなく、その一つ前の確定足を選ぶ
  2. その確定時刻が前回確認した時刻と異なるか調べる
  3. 新しい確定足だけクロス条件を判定する
  4. 条件成立時にマーカー、ポップアップ、音、ログを出す
  5. 初回読み込みでは過去シグナルを一斉通知しない

これにより、チャートを開いた直後に過去分の通知が鳴ることも、同じ確定足で連打されることもありません。

Alert()PlaySound()はストラテジーテスターでは動作しません。通知の実確認は通常チャートで行ってください。音声ファイルはMT5のSoundsにあるWAV形式を指定します。


MQL5実装で確認した安全ポイント

CopyBuffer()の件数を必ず検査した

ハンドルの計算本数が不足している間は更新を待ち、CopyBuffer()の戻り値が要求本数と一致した場合だけ計算します。値が一部しか届いていない状態を正常なクロスとして扱いません。

配列の向きを通常順へ統一した

今回の計算配列は、古いバーから新しいバーへ進む通常順に統一しています。i-1が必ず一つ前の時刻を指すため、クロス条件を数式どおりに読み取れます。

使用後のハンドルを解放した

Slow Stochastic用とWilliams %R用の内部ハンドルは、インジケーターを外したときにIndicatorRelease()で解放します。時間足変更や付け外しを繰り返しても、不要な計算資源を残さない構成です。

注文処理を含めていない

2本とも通知と表示に限定したインジケーターです。注文送信、ロット計算、ポジション操作は行いません。矢印は売買成績を保証するものではなく、裁量判断や検証を助ける観測点です。


専用MT5での動作確認

売買を行わない専用テストMT5へ2本を同時適用し、表示とは別に各バッファを読み取って検査しました。

項目 設定・結果
通貨ペア・時間足 EURUSD・1時間足
検査本数 直近1000本
Slow Stochastic 14, 5, 5・Close/Close
Slow上向きクロス 62回
Slow下向きクロス 61回
Williams %R 期間14・上側-20・下側-80
Williams上側到達 68回
Williams下側到達 74回
Slow値域検査 %K・%Dとも0〜100内
Williams値域検査 -100〜0内
Slow本体コンパイル 0 errors / 0 warnings
Williams本体コンパイル 0 errors / 0 warnings
検証用コンパイル 0 errors / 0 warnings
キャプチャ 成功、エラー0

画像上段がSlow Stochastic、下段がWilliams %Rです。黄色と赤色の矢印がそれぞれの確定足シグナルを示し、4種類すべてが実データ上で発生することを確認できました。


パラメータ

Slow Stochastic Alert

パラメータ 初期値 説明
InpKPeriod 14 %K期間
InpDPeriod 5 %D期間
InpSlowing 5 標準StochasticのSlowing期間
InpPriceField Close/Close 高安値または終値を使う価格方式
InpEnablePopup true 確定足クロス時のポップアップ
InpEnableSound true 確定足クロス時の音
InpSoundFile alert.wav Soundsに置くWAVファイル名

Williams %R Alert

パラメータ 初期値 説明
InpWPRPeriod 14 Williams %Rの期間
InpUpperLevel -20 上向き通知の境界
InpLowerLevel -80 下向き通知の境界
InpEnablePopup true 確定足到達時のポップアップ
InpEnableSound true 確定足到達時の音
InpSoundFile alert.wav Soundsに置くWAVファイル名

しきい値を変える場合は、下側が上側より小さく、両方が-100〜0の範囲に入るよう設定してください。不正な期間やしきい値では初期化を中止します。


ダウンロード

19_Slow_Stochastic_Alert_v1_00.mq5 をダウンロード

19_WilliamsPR_Alert_v1_00.mq5 をダウンロード

MT5のIndicatorsへ保存してコンパイルし、確認したい通貨・時間足のチャートへ適用してください。初期設定では通常チャートでポップアップとalert.wavを使用します。


ロジック評価の結論

原典の「オシレーターの条件成立を音と画面で知らせる」という発想は、チャートを監視し続ける負担を減らす実用的な補助機能です。今回のMQL5版でも、Slow Stochasticの上下クロスとWilliams %Rの上下しきい値到達を、実データ上でそれぞれ確認できました。

移植時の最も大きな変更は、形成中バーの即時音を残さず、すべて確定足へ統一した点です。反応は足の確定まで遅くなりますが、途中で消えるクロスによる通知を避けられます。

早さを優先するなら形成中バー監視、再現性を優先するなら確定足監視です。この2本は後者を選び、同じ足で一度だけ鳴ること、過去分を初回に鳴らさないこと、表示と通知が同じ条件になることを重視しました。


前後の記事

前: 【移植#18】FirstとPrevious — インジケータの参照順をMQL5で可視化

— SPONSORED —