AnyTrading - FXトレードを強化学習で実行⑥ オリジナルデータを使う

自分で用意した為替データをAnyTradingで使う場合、本来であればgym.makeする際にdfオプションとしてデータフレームを渡せばいいらしいんですが、うまくいかなかったので別の方法で対処しました。

具体的には、デフォルトで参照しているCSVデータにフォーマットを合わせてオリジナルデータを上書きしました。

AnyTradingでオリジナルデータを使う

AnyTradingではデフォルトで下記のcsvデータを参照しています。

(AnyTradingインストール先)/datasets/data/FOREX_EURUSD_1H_ASK.csv

このCSVデータは下記のようなフォーマットです。

[FOREX_EURUSD_1H_ASK.csv]

1
2
3
4
5
6
7
8
9
10
Time,Open,High,Low,Close,Volume
01.01.2017 22:00:00.000,1.05236,1.05253,1.05221,1.05227,143539993.3
01.01.2017 23:00:00.000,1.05227,1.05426,1.05226,1.05282,253139999.4
02.01.2017 00:00:00.000,1.05283,1.05283,1.05268,1.05281,131399993.9
02.01.2017 01:00:00.000,1.05282,1.05286,1.05225,1.0524,273940002.4
02.01.2017 02:00:00.000,1.05239,1.0524,1.05164,1.0522,258140014.6
02.01.2017 03:00:00.000,1.05219,1.05244,1.05184,1.05226,2288179932
02.01.2017 04:00:00.000,1.05226,1.05232,1.05181,1.05193,711799987.8
02.01.2017 05:00:00.000,1.05195,1.05197,1.05136,1.05161,288209991.5
02.01.2017 06:00:00.000,1.05163,1.05176,1.05113,1.05172,390880004.9

例えば下記のようなデータを自分で用意したとします。

[USDJPY.txt]

1
2
3
4
5
6
7
8
9
10
<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,Close,<VOL>
USDJPY,20010102,230300,114.43,114.43,114.43,114.43,4
USDJPY,20010102,230400,114.44,114.44,114.44,114.44,4
USDJPY,20010102,230500,114.44,114.44,114.44,114.44,4
USDJPY,20010102,230700,114.44,114.44,114.44,114.44,4
USDJPY,20010102,230800,114.44,114.44,114.44,114.44,4
USDJPY,20010102,230900,114.44,114.44,114.44,114.44,4
USDJPY,20010102,231100,114.44,114.45,114.44,114.45,4
USDJPY,20010102,231200,114.45,114.45,114.45,114.45,4
USDJPY,20010102,231300,114.45,114.45,114.43,114.43,4

このデータを変換する処理を簡単に書いてみました。

[AnyTrading用にデータを変換する処理]

1
2
3
4
5
6
7
8
9
10
11
12
13
def fmt(line):
ss = line.strip().split(',')
return '{}.{}.{} {}:{}:{}.000,{},{},{},{},{}'.format(ss[1][6:8], ss[1][4:6], ss[1][:4],
ss[2][:2], ss[2][2:4], ss[2][4:6],
ss[3], ss[4], ss[5], ss[6], ss[7])

with open('USDJPY.txt', 'r') as f:
lines = f.readlines()

with open('(AnyTradingインストール先)/datasets/data/FOREX_EURUSD_1H_ASK.csv', 'w') as f:
f.write('Time,Open,High,Low,Close,Volume\n')
for line in lines[1:]:
f.write(fmt(line) + '\n')

確認のために変換したデータを使って、AnyTradingの処理を実行してみました。

実行結果


問題なく自分で用意したデータでAnyTradingが実行できることを確認できました。
本来のやり方とは違うと思いますが、この方法を使っていろいろなデータでAnyTradingを実行することができるようになりました。