0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AIシステムトレード PIX2PIX編

Last updated at Posted at 2022-02-08

自分で進んでいる方向が分からない

最近はボヤっと考えていたことが、寝起きになってハッとひらめくことが多い。
(まるで自分の脳が、夜中にディープラーニングしているようだ)

思い付き

前の記事で、チャートを色付き画像に変換するところを考えたが、pix2pixというものを使うと、GANが勝手にペアを覚えてくれるとのこと

データの与え方は、下記のようにするらしい(画像は上記サイトのものを引用)
image.png

今回は下記のように、一つの画像に過去と未来が混在している訳だし、
A過去→B未来をペアで学習させれば良いはずだ。
(下記画像の生成については、ソースを参照のこと)
image.png

main.py
dfspan

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


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

評価結果

 昨日は、簡単な処理を書いて、trains画像フォルダにっつこんで、コマンドを実施した。
ソースを読むと、カラフルな画像を描く部分もあり、膨大な割には、核の部分はシンプルのように思える。
(しかし、こんな何にも特徴を見いだせない画像でさえ、なんらか学習していくなんて。
すごい学習能力だなと思う反面、ものすごくかわいそうな気がしてくる。。。)

無題.png

2点ほど、躓いたことがあったが、結構簡単なので驚いた。
デフォルトが200回なのであるが、800回までチャレンジ中

pix2pix_data.py
# !/usr/bin/env python
# coding: utf-8

# In[1]:


get_ipython().system('pip install pandas_datareader')
get_ipython().system('pip install --upgrade pandas')
get_ipython().system('pip install mplfinance')


# In[82]:


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(2000,1,1)
end = dt.date(2022,2,3)

df = data.DataReader(symbol,'av-daily',start,end, api_key=apikey)


# In[83]:


wsize=128 #サンプル期間

df.index = pd.DatetimeIndex(df.index)

alldata =[]

for time in range(len(df)-wsize):
    try:
        dfspan = df[time:time+wsize]
        alldata.append({"df":dfspan,"date":dfspan.tail(1)})
    except:
        pass


# In[84]:


from PIL import Image
import matplotlib.pyplot as plt

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

def imagemake(dfspan):
    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(b-a,b-a).astype(np.float32))
    o = min_max(np.outer(a-c,a-c).astype(np.float32))
    te = np.stack([m,n,o])
    
    te1 = te[:,0:64,0:64]
    te2 = te[:,64:128,64:128]
    te3=np.concatenate([te1,te2], 2)
    te4=np.kron(te3, np.ones((2,2)))
    tmp = torch.from_numpy(te4).clone()
    return  transforms.ToPILImage(mode='RGB')(tmp)   


# In[85]:


for i,item in enumerate(alldata):
    img=imagemake(item['df'])
    fname = "train/" + str(i) + ".png"
    img.save(fname)

参考サイト

https://farml1.com/pix2pix_2/
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

結果の振り返り

 結局、800サイクルまで学習させて、どのような結果が得られたのかを検証する。
real_aを入力して、出てくるfake_bがreal_bに似ていれば、正解ということになる。

 とりあえず、なんか違うような気がしてきた・・・

無題.png

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?