Williams %Rと移動平均線を組み合わせる考え方 — 短期反転シグナルをトレンド方向で選別する設計

Williams %R(ウィリアムズ・パーセント・アール)は、直近の値動きの中で現在値がどの位置にあるかを測る、反応の速いオシレーター系インジケーターです。反応が速い分、単独で使うと細かい反転シグナルを連発しやすく、どのシグナルを採用すべきか迷いやすいという性格があります。一方、移動平均線はトレンド方向を判定する定番の指標ですが、反応が遅く、タイミングを測る道具としては不向きです。

本記事では、この「速すぎるオシレーター」と「遅いトレンド指標」を役割分担させる組み合わせを、cBotとして実装する視点から整理します。あくまで実装と設計の参考としての位置づけであり、特定の設定が成果を保証するという話ではありません。

移動平均線でトレンド方向を判定し、Williams %Rで押し目のタイミングを観察する二層構成の模式図

Williams %R の役割

Williams %Rは、一定期間(標準は14本)の最高値・最安値のレンジの中で、現在の終値がどの位置にあるかを 0〜-100 のスケールで示します。0に近いほどレンジ上限に、-100に近いほどレンジ下限に価格が寄っていることを意味し、一般に -20より上を買われすぎ圏、-80より下を売られすぎ圏 の目安として読みます。

計算の考え方はストキャスティクスの%Kと近く、平滑化を挟まない分だけ反応が速いのが特徴です。ストキャスティクスの基礎は別記事のストキャスティクスとはにまとめています。

単独使用時の限界ははっきりしています。反応が速い=ノイズも拾いやすいということであり、強いトレンド相場ではWilliams %Rが-20より上(または-80より下)に張り付いたまま推移し、逆張りシグナルを連発します。「いま反転シグナルを採用してよい相場環境なのか」をWilliams %R自身は教えてくれません。

移動平均線の役割

移動平均線は、一定期間の終値を平均して価格の中心線を描く指標です。価格がその上にあるか下にあるか、線自体が上向きか下向きかで、トレンドの方向と勢いをおおまかに判定できます。基礎は別記事の移動平均線とはを参照してください。

単独使用時の弱点は2つあります。第一に 遅行性 です。過去の平均を取る以上、価格の転換からワンテンポ遅れて向きが変わります。細かいエントリータイミングを移動平均線だけで測ろうとすると、動き出しをかなり過ぎた位置になりがちです。第二に レンジ相場でのダマシ です。方向感のない相場では価格が移動平均線を何度も跨ぎ、位置関係による判定が機能しにくくなります。

つまり移動平均線は「方向の判定」には向くが「タイミングの判定」には向かない、Williams %Rとちょうど逆の性格を持っています。

なぜこの組み合わせか

両者の質問の粒度が違うことが、役割分担の根拠になります。移動平均線が答えるのは「いまの相場はどちら向きか」、Williams %Rが答えるのは「直近レンジの中で価格はどこまで振れたか」です。

考え方の例を挙げます。

ポイントは、Williams %Rの反転シグナルを全部拾うのではなく、移動平均線が示す方向と同じ側のシグナルだけを採用する ことです。トレンドに逆らう側のシグナル(上昇基調中の買われすぎサインなど)は最初から捨てる設計にすると、%Rが張り付く局面での逆張り連発という典型的な失敗を避けやすくなります。一般論として、移動平均線がノイズフィルターとして機能する関係になります。

一方で、レンジ相場では移動平均線側の判定力が落ちるため、フィルターの信頼性も下がります。線の傾きが一定以上のときだけシグナルを採用する、といった追加の条件設計が検討対象になります。組み合わせれば万能になるわけではない点は、最初から織り込んでおくのが現実的です。

パラメータをどう考えるか

唯一の正解はなく、検証を前提に方向性だけ整理します。

Williams %Rの期間 は標準が14です。短くすると反応がさらに速くなる代わりにノイズが増え、長くすると滑らかになる代わりに検知が遅れる傾向があります。閾値も-20/-80が定番ですが、より厳選したい場合は-10/-90のように深い位置に置く調整が検討されます。

移動平均線の期間 は、短期目線で20、中期で50、長期で200が定番として参照されます。フィルター役として使う場合は、判定がころころ変わらないよう、Williams %Rの期間より十分長い期間を選ぶのが自然な設計です。

時間足をまたぐ構成も選択肢です。移動平均線は上位足(H1やH4)で方向を判定し、Williams %Rは下位足(M15など)でタイミングを観察する構成にすると、役割分担がより明確になります。いずれの場合も、過去データでのバックテストで自分の銘柄・時間帯での挙動を確認するプロセスは省略しないでください。

cBot化する際の考慮点

cTraderのcBotとして実装する場合の設計ポイントを挙げます。

スケールの向きに注意: Williams %Rは0〜-100のマイナススケールです。「売られすぎ = 値が小さい(-80より下)」なので、比較演算子の向きを間違えやすい箇所です。閾値を定数として名前付きで定義しておくと事故を減らせます。

データ取得タイミング: 確定足ベース(OnBar)での判定が基本です。Williams %Rは反応が速いため、OnTickで判定すると同一バー内でシグナルが何度も出入りし、挙動が不安定になりがちです。

NaNチェック: 起動直後や履歴不足時は指標値がNaNを返す場合があります。判定前に必ずチェックします。

状態管理: 「%Rが閾値圏に入った」と「閾値圏から戻り始めた」は別のイベントです。押し目候補として扱うなら、閾値圏への進入をフラグとして保持し、そこから抜けた瞬間に判定する、という2段階の状態管理が必要になります。

// 例: 計算とNaNチェック、スケールの向き
var ma  = Indicators.MovingAverage(Bars.ClosePrices, 50, MovingAverageType.Simple);
var wpr = Indicators.WilliamsPctR(14);

double maValue  = ma.Result.LastValue;
double wprValue = wpr.Result.LastValue;
double price    = Bars.ClosePrices.LastValue;

if (double.IsNaN(maValue) || double.IsNaN(wprValue)) return;

const double Oversold = -80.0;  // 0〜-100スケール。小さいほど売られすぎ側

bool uptrend  = price > maValue && ma.Result.IsRising();
bool dipZone  = wprValue < Oversold;
// uptrend && dipZone を「押し目候補ゾーン」として記録し、
// ゾーンから抜けた足で判定する、といった2段階設計にする

実装初期はシグナルのログ出力を仕込み、チャートと突き合わせて意図どおり動いているかを確認するのがおすすめです。

実装の流れ

全体像を入力→計算→判定→出力の流れで整理します。

  1. 入力: 監視する銘柄・時間足を決め、終値系列を取得する
  2. 計算: 移動平均線とWilliams %Rをそれぞれ計算する
  3. 環境判定: 価格と移動平均線の位置関係・傾きでトレンド方向を判定。不明確なら以降をスキップ
  4. タイミング判定: トレンド方向と同じ側のWilliams %R閾値圏への進入と復帰を検出
  5. 出力: シグナル(BUY候補 / SELL候補 / WAIT)をログや通知に送る

判定を発注まで直結させるか、シグナルの可視化・通知で止めるかは運用スタイル次第です。まずは通知までの構成で挙動を観察し、納得してから自動化範囲を広げる進め方が、検証としても安全です。

環境判定からタイミング判定、出力までの戦略フロー図

どう活用するか

この設計図は目的別に活用できます。

自作派の方は、Claude Codeを使ったcBot開発の設計ドキュメントとして、本記事の節構造をそのまま流用してみてください。委託派の方は、ai-programming.xyz への開発相談の際に「Williams %Rと移動平均線の組み合わせで、通知までを自動化したい」のように前提を共有すると要件定義がスムーズです。教育派の方は、スクールの演習テーマとして、マイナススケールの扱いと2段階の状態管理を自分の手で実装してみると理解が深まります。

反応の速いオシレーターを遅いトレンド指標で選別するという構図は、移動平均線とRSIの組み合わせとも共通する基本形です。この型を一つ身につけておくと、他の組み合わせへ展開するときの土台になります。

本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。