自作インジケーターをコードする - I
これまで、add.indicator() 関数を使って、あらかじめ用意されたインジケーターのみを利用してきました。ここからは、自分でインジケーターを作成して適用していきます。
今回作るインジケーター関数は、2つの異なるインジケーターの平均を取り、RSI の「3.5」を作ります。手順は次のとおりです。
- 価格系列を受け取る。
- RSI 3 を計算する。
- RSI 4 を計算する。
- RSI 3 と RSI 4 の平均を返す。
この RSI は、RSI 3 より長く RSI 4 より短いという意味で、RSI 3.5 と考えられます。平均を取ることで、単純な RSI 4 よりも速く反応しつつ、4日前の影響も織り込み、RSI 3 と RSI 4 のノイズを緩和します。
この演習では、このインジケーター用の関数 calc_RSI_avg() を作成し、ストラテジー strategy.st に追加します。必要なパッケージはすべて読み込まれています。
この演習はコースの一部です
Rで学ぶ金融トレーディング
演習の手順
- 引数を
price、n1、n2の順で3つ取る関数calc_RSI_avgを作成します。 - 過去期間
n1の RSI を計算し、RSI_1という名前を付けます。 - 過去期間
n2の RSI を計算し、RSI_2という名前を付けます。 RSI_1とRSI_2の平均を計算し、RSI_avgと呼びます。- colnames() を使って、
RSI_avgの列名をRSI_avgに設定し、RSI_avgを返します。 - このインジケーターを、入力
n1 = 3、n2 = 4でストラテジーに追加します。インジケーターのラベルはRSI_3_4とします。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Write the calc_RSI_avg function
calc_RSI_avg <- function(price, n1, n2) {
# RSI 1 takes an input of the price and n1
RSI_1 <- RSI(price = price, n = ___)
# RSI 2 takes an input of the price and n2
RSI_2 <- RSI(price = price, n = ___)
# RSI_avg is the average of RSI_1 and RSI_2
RSI_avg <- (___ + ___)/2
# Your output of RSI_avg needs a column name of RSI_avg
colnames(RSI_avg) <- "___"
return(___)
}
# Add this function as RSI_3_4 to your strategy with n1 = 3 and n2 = 4
add.indicator(strategy.st, name = ___, arguments = list(price = quote(Cl(mktdata)), n1 = ___, n2 = ___), label = ___)