目次
概要

過去のレートの値動きを現在のレートに当てはめて、現在のレートと過去のレートの間の比を取り予想を行います。モメンタムを比率化したもので相場の勢いを判断するためのテクニカル指標です。
計算方法(日足の場合)
当日の終値とn日前の終値の比を取ります。nは任意ですが、日足であれば、10日や25日が良く使われます。
$$ \rm{} ROC = 当日の終値 / n日前の終値 \times 100 $$実際に計算してみましょう。簡単のためnを5日に設定します。
日数 | 価格 | 5日前の終値 | ROC | index |
1日目 | 1.00 | |||
2日目 | 5.00 | |||
3日目 | 9.00 | |||
4日目 | 3.00 | |||
5日目 | 7.00 | 1.00 | 700% | 買い |
6日目 | 10.00 | 5.00 | 200% | 買い |
7日目 | 2.00 | 9.00 | 22% | 売り |
8日目 | 8.00 | 3.00 | 266% | 買い |
9日目 | 4.00 | 7.00 | 57% | 売り |
10日目(最新) | 6.00 | 10.00 | 60% | 売り |
Pythonによる実装
必要なライブラリを読み込みます
!pip install mpl_finance #Collaboratoryに入っていないライブラリを読み込みます
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import mpl_finance
import sys
import numpy as np
from datetime import datetime
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import requests
import io
データを読み込みます
#ファイルの読み込み
URL = "https://neulab.co.jp/wp-content/uploads/pseudo_data.csv" #csvファイルのURL
datafile = requests.get(URL)#ファイルの読み込み
#データフレームの作成
df_temp = pd.read_csv(io.BytesIO(datafile.content), header=0, index_col=0, parse_dates=True, encoding="UTF-8")
df = df_temp.loc[:,['Open','High','Low','Close']]
df.head()
ROCを計算します
df_chart = df['Close']
df_chart_old = df['Close'].shift(10)
df_roc = df_chart/df_chart_old * 100
matplotを使用した描画例です
canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'
n_data = -100
data = df[n_data:]
ohlc = np.vstack((range(len(data)), data.T)).T
fig, (ax1, ax2) = plt.subplots(2, 1, gridspec_kw={'height_ratios': [10, 6]}, sharex=True, figsize=(12,9))
fig.patch.set_facecolor(canvas_color)
ax1.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax1, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax2.patch.set_facecolor(canvas_color)
ax2.plot(range(len(data)), df_roc.values[n_data:], color='red', ls='-', label='ROC')
ax1.grid()
ax2.grid()
#ロゴ読み込み
logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #logoファイルのURL
img_c = plt.imread(logoURL)
imagebox = OffsetImage(img_c, zoom=0.020) #画像をimageboxにいれる。
imagebox.image.axes = ax1
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9950), xycoords="data", boxcoords="data", pad=0.3, frameon=False)
l1,l2 = ax2.get_legend_handles_labels()
ax2.legend(l1,l2, fontsize=14, edgecolor='none', facecolor=canvas_color)
ax1.add_artist(im_sabo)
ax1.set_ylabel("Price of Something", fontsize=22)
ax1.set_ylim(9000., 10000.)
ax1.yaxis.tick_right()
ax1.yaxis.set_label_coords(0, 0.5)
ax1.tick_params(labelsize=24, labelcolor=font_color, color=line_color)
ax1.spines['left'].set_linewidth(0)
ax1.spines['right'].set_linewidth(0)
ax1.spines['top'].set_linewidth(0)
ax1.spines['bottom'].set_linewidth(0)
ax2.yaxis.tick_right()
ax2.set_ylim([90,110])
ax2.tick_params(labelsize=22, labelcolor=font_color, color=line_color)
ax2.spines['left'].set_color(line_color)
ax2.spines['right'].set_color(line_color)
ax2.spines['top'].set_color(line_color)
ax2.spines['bottom'].set_color(line_color)
xtick0 = 2
plt.xticks(range(xtick0,len(data),12), [x.strftime('%m/%d') for x in df_roc.index][xtick0::12])
plt.subplots_adjust(left=0.05, right=0.89, bottom=0.1, top=0.99)
plt.grid(which='major',color=line_color,linestyle='-')
plt.grid(which='minor',color=line_color,linestyle='-')
ax2.grid(linestyle='--', lw=1)
ax1.set_axisbelow(True)
fig.savefig('ROC.png', facecolor=fig.get_facecolor(), edgecolor='none')
以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。
リンク先はこちら。
ROCを使った予想
ROCを使った予想は比較的単純で比率が100%を上回ったか下回ったかで判断します。
- 買い
- ROCが100%を上回っている場合
- 売り
- ROCが100%を下回っている場合
図2がROCを使った予想例となります。

注意点
期間の設定によって振れ幅が変わってくるので注意が必要です。また、銘柄によって天井や底も変わってくるので、過去のデータなどを使って適切な設定を行う必要があります。
※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。
現在、ニューラボでは人工知能を活用した取引アルゴリズムを販売中です。
自動取引にご興味を持たれましたらこちらのHPまで。