LoginSignup
0
2

More than 1 year has passed since last update.

AIシステムトレード 改良編

Posted at

前回に続いて、実装をしていく。
前半は前回と同じ。

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()

image.png

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()

なんか凄くないですか? 
とても特徴量があるようには見えない・・・

image.png

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2