1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rで学ぶ金融トレーディング

Connected

演習

自作インジケーターをコーディングする - II

RSIは悪くありませんが、インジケーターとしてはやや古典的です。この演習では、別のインジケーターの簡易版を一から実装します。このインジケーターは定量リサーチディレクターのDavid Varadiが考案した David Varadi Oscillator (DVO) と呼ばれます。

このオシレーターの目的はRSIと似ており、一時的な下げでの買い機会や、一時的な上げでの売り機会を見つけることを狙います。必須のマーケットデータに加えて、オシレーター関数は2つのルックバック期間を受け取ります。

まず、終値と高値・安値の平均との比率を計算します。次に、その量にSMAを適用してノイズを平滑化します。通常は2日など非常に短い期間で行います。最後に、runPercentRank() 関数を使ってこの平均比率のパーセンタイル順位を時系列で計算し、0〜100の値にするために100を掛けます。

共通テストの後に学生がパーセンタイルのスコアを受け取るイメージを思い浮かべてください(例えば、数学で800点を取ったら全国で第95パーセンタイル、のように)。runPercentRank() はこれを時間方向に対して行います。このインジケーターは、ユーザーが指定した過去期間の文脈で、最新の観測値がどの順位にあるかを返します。例えば、ルックバック126で runPercentRank の値が0.90なら、直近126観測(過去125と現在)に対する第90パーセンタイルに位置するという意味です。

このインジケーターを実装し、DVO として保存してください。必要なコードの一部は用意されており、quantstrat、TTR、quantmod パッケージは作業環境に読み込まれています。

指示

100 XP
  • 上記のインジケーター用に DVO という関数を作成して名前を付けてください。引数は HLC、navg(デフォルト2)、percentlookback(デフォルト126)です。
  • HLC の終値(Cl())を高値(Hi())と安値(Lo())の平均で割った比率は、すでに計算済みです。
  • SMA() を使って、この比率の移動平均を navg 引数でパラメータ化して実装し、avgratio として保存してください。
  • runPercentRank() を使って、avgratio のパーセンタイル順位を計算してください。