直前のROCと現在のROC

少し紛らわしいが、1本前の足のROC現在の足のROCにどのような影響を与えるかを調べてみる。

足は5分足を使っている。現在の足のROCの計算期間は1本(5分)である。また、1本前の足のROCの計算期間は12本(60分)である。

直前のROCと現在のROCは負の比例

x軸、y軸ともにROCは標準化している。

1本前の足のROCと現在の足のROCは負の比例という関係にあるように見える。ただ若干、イレギュラーな部分もある。

サンプルプログラム

○以下のプログラムをSpyderの「IPythonコンソール」にコピー&ペーストして「Enter」キーを2回押す。

import forex_system as fs
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime

fs.remove_temp_folder()

timeframe = 5
minute = 60
n = 6

x = np.empty(n)
y = np.empty(n)
plt.figure(figsize=(6, 20))
cnt = 0
for symbol in ['AUDUSD', 'EURUSD', 'GBPUSD', 'USDJPY', 'RANDOM']:
    cnt += 1
    plt.subplot(5, 1, cnt)
    for year in [2012, 2013, 2014, 2015, 2016]:
        start = datetime.strptime(str(year) + '.01.01 00:00',
                                  '%Y.%m.%d %H:%M')
        end = datetime.strptime(str(year) + '.12.31 23:59',
                                '%Y.%m.%d %H:%M')
        roc0 = fs.i_roc(symbol, timeframe, 1, 0)[start:end]
        mean0 = np.mean(roc0)
        std0 = np.std(roc0)
        roc0 = (roc0 - mean0) / std0
        for i in range(n):
            x[i] = i - 2.5
            period = fs.convert_minute2period(minute, timeframe)
            roc1  = fs.i_roc(symbol, timeframe, period, 1)[start:end]
            mean1 = np.mean(roc1)
            std1 = np.std(roc1)
            roc1 = (roc1 - mean1) / std1
            y[i] = np.mean(roc0[(roc1>=x[i]-0.5) & (roc1<x[i]+0.5)])
        plt.plot(x, y, label=str(year))
    plt.title('ROC1 and ROC0 (' + symbol + ')')
    plt.xlabel('ROC1')
    plt.ylabel('ROC0')
    plt.xlim(-2.5, 2.5)
    plt.ylim(-0.15, 0.15)
    plt.legend(loc='upper right')
    plt.axhline(y=0.0, color='black', linestyle=':')
    plt.tight_layout()
plt.savefig('roc1_and_roc0.png', dpi=150)
plt.show()

fs.remove_temp_folder()
(2017/02/22更新)