Zスコアとリターン

1本前の足のZスコアが現在の足のリターンにどのような影響を与えるかを調べてみる。

足は5分足を使っている。現在の足のリターンは計算期間1本(5分)のROCとして計算する。ただし、標準化してある。また、1本前の足のZスコアの計算期間は12本(60分)で固定である。

直前のZスコアと現在のリターンは負の比例

In [1]:
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
size = 6

x = np.empty(size)
y = np.empty(size)
plt.figure(figsize=(6, 44))
cnt = 0
for symbol in ['AUDJPY', 'AUDUSD', 'EURAUD', 'EURGBP', 'EURJPY', 'EURUSD',
               'GBPAUD', 'GBPJPY', 'GBPUSD', 'USDJPY', 'RANDOM']:
    cnt += 1
    plt.subplot(11, 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]
        for i in range(size):
            x[i] = i - 2.5
            period = fs.convert_minute2period(minute, timeframe)
            zscore1  = fs.i_zscore(symbol, timeframe, period, 'MODE_SMA',
                                   1)[start:end]
            y[i] = np.mean(roc0[(zscore1>=x[i]-0.5) & (zscore1<x[i]+0.5)])
        mean = np.mean(y)
        std = np.std(y)
        y = (y - mean) / std
        plt.plot(x, y, label=str(year))
    plt.title('Z-Score and Return (' + symbol + ')')
    plt.xlabel('Z-Score')
    plt.ylabel('Standardized Return')
    plt.xlim(-2.5, 2.5)
    plt.ylim(-2.5, 2.5)
    plt.legend(loc='upper right')
    plt.axhline(y=0.0, color='black', linestyle=':')
    plt.tight_layout()
plt.savefig('zscore_and_return.png', dpi=150)
plt.show()

fs.remove_temp_folder()


1本前の足のZスコアと現在の足のリターンは負の比例という関係にあるように見える。

(2017/03/13更新)

コメント

非公開コメント