自作インジケーターをコーディングする - 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 パッケージは作業環境に読み込まれています。
この演習はコースの一部です
Rで学ぶ金融トレーディング
演習の手順
- 上記のインジケーター用に
DVOという関数を作成して名前を付けてください。引数はHLC、navg(デフォルト2)、percentlookback(デフォルト126)です。 HLCの終値(Cl())を高値(Hi())と安値(Lo())の平均で割った比率は、すでに計算済みです。SMA()を使って、この比率の移動平均をnavg引数でパラメータ化して実装し、avgratioとして保存してください。runPercentRank()を使って、avgratioのパーセンタイル順位を計算してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Declare the DVO function
DVO <- function(___, navg = ___, percentlookback = ___) {
# Compute the ratio between closing prices to the average of high and low
ratio <- Cl(HLC)/((Hi(HLC) + Lo(HLC))/2)
# Smooth out the ratio outputs using a moving average
avgratio <- SMA(ratio, n = ___)
# Convert ratio into a 0-100 value using runPercentRank()
out <- runPercentRank(___, n = percentlookback, exact.multiplier = 1) * 100
colnames(out) <- "DVO"
return(out)
}