前回に続いて、実装をしていく。
前半は前回と同じ。
main.py
!pip install pandas_datareader
!pip install --upgrade pandas
!pip install mplfinancme
main.py
import pandas as pd
import datetime as dt
from pandas_datareader import data
import mplfinance as mpf
import torch
from torchvision.datasets import ImageFolder
from torchvision import models, transforms
import torch.nn as nn
import numpy as np
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
apikey = '取得したAPIキー'
symbol = 'EURUSD'
start = dt.date(2021,1,1)
end = dt.date(2022,2,3)
df = data.DataReader(symbol,'av-daily',start,end, api_key=apikey)
main.py
wsize=80 #サンプル期間
after=10 #最終レコード+α
change_large = 4 #変化大 4%
df.index = pd.DatetimeIndex(df.index)
alldata =[]
for time in range(len(df)-wsize-1):
try:
dfspan = df[time:time+wsize]
alldata.append({"df":dfspan,"date":dfspan.tail(1)})
except:
pass
open high low close volume
2021-10-13 1.1530 1.1599 1.1527 1.1597 0
2021-10-14 1.1597 1.1624 1.1582 1.1598 0
2021-10-15 1.1597 1.1619 1.1586 1.1600 0
2021-10-18 1.1599 1.1622 1.1570 1.1609 0
2021-10-19 1.1609 1.1669 1.1607 1.1629 0
... ... ... ... ... ...
2022-01-26 1.1299 1.1311 1.1234 1.1241 0
2022-01-27 1.1241 1.1243 1.1130 1.1142 0
2022-01-28 1.1143 1.1174 1.1120 1.1146 0
2022-01-31 1.1141 1.1248 1.1137 1.1233 0
2022-02-01 1.1235 1.1279 1.1219 1.1270 0
メイン
一応考えたことは、こういう感じでイメージできる。
main.py
a = np.array([x for x in dfspan['close']])
m = np.outer(a, a).astype(np.float32)
plt.imshow(m, vmin=np.min(m), vmax=np.max(m), interpolation='none')
plt.show()
Close , High , Lowをテンソルに突っ込む
High,Lowは、それぞれcloseに対する差分として扱っている
main.py
from PIL import Image
def min_max(x, axis=None):
min = x.min(axis=axis, keepdims=True)
max = x.max(axis=axis, keepdims=True)
result = (x-min)/(max-min)
return result
a = np.array([x for x in dfspan['close']])
b = np.array([x for x in dfspan['high']])
c = np.array([x for x in dfspan['low']])
m = min_max(np.outer(a,a).astype(np.float32))
n = min_max(np.outer(a-b,a-b).astype(np.float32))
o = min_max(np.outer(a-c,a-c).astype(np.float32))
te = np.stack([m,n,o])
tmp = torch.from_numpy(te).clone()
img_pil = transforms.ToPILImage(mode='RGB')(tmp)
plt.imshow(img_pil)
plt.show()
なんか凄くないですか?
とても特徴量があるようには見えない・・・