AIによるFXの予想にチャレンジしています!!本日はAIでFXの予想をするための学習データとしてFXチャートをPythonで作る方法を紹介します。
1.FXチャートの作成に用いるPythonのライブラリ
Pandas
PandasはPythonでデータ分析を効率的に行うためのライブラリです。主要なコードはC言語で書かれており、非常に高速に処理を行うことができます。
https://techacademy.jp/magazine/17697#sec1
Matplotlib
MatplotlibはPythonのためのグラフ描画ライブラリです。オブジェクト指向のAPIを提供しており様々な種類のグラフを描画する能力を持ちます。
https://ja.wikipedia.org/wiki/Matplotlib
2.PythonによるFXチャート作成のソースコード
ソースを見た方が早いと思うのでソースコードを載せます。
ソースコード
import pandas as pd
import matplotlib.pyplot as plt
import mpl_finance as mpf
import sys
import os
import gc
import shutil
import numpy as np
from PIL import Image
class FXAI:
__outputGraphDir = "./dataset/graph"
__tmpDir = "./tmp"
# メイン処理
def makeGraph(self, targetDate):
print("[loaddata] targetDate=" + targetDate)
# CSVデータ読込
datas = self.__loadCSV(targetDate)
# グラフ作成
self.__createGraph(targetDate, range(0, len(datas)), datas)
# グラフのリサイズ
self.__resizeImage(targetDate)
del datas
# CSVデータ読込
def __loadCSV(self, targetDate):
target_csv = "./dataset/csv/USDJPY_" + targetDate + ".csv"
return pd.read_csv(target_csv, encoding="MS932")
# グラフ生成
def __createGraph(self, targetDate, x, datas):
self.__candlechart(x, datas, 5) # ロウソク足
self.__closePriceBorder(x, datas) # 終値の境界線
self.__meansLine(x, datas) # 移動平均線
self.__BollingerBand(x, datas) # ポリンジャーバンド
plt.savefig(self.__tmpDir + "/tmp" + targetDate + ".png", pad_inches = 0)
# ロウソク足
def __candlechart(self, x, datas, width=1.0):
fig = plt.figure(figsize=(18, 9))
ax = fig.add_subplot(1,1,1)
ax.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
mpf.candlestick2_ohlc(ax, opens=datas.始値.values, closes=datas.終値.values,
lows=datas.安値.values, highs=datas.高値.values,
width=width, colorup='r', colordown='b')
# 終値の境界線(機械学習しやすいように終値の上下の色を変更)
def __closePriceBorder(self, x, datas):
plt.fill_between(x, datas["終値"], max(datas["終値"]), color="Yellow", alpha=0.3)
plt.fill_between(x, datas["終値"], min(datas["終値"]), color="Lightblue", alpha=0.3)
# 移動平均線
def __meansLine(self, x, datas):
closePrice = pd.Series(datas["終値"])
means30 = closePrice.rolling(window=30).mean()
means60 = closePrice.rolling(window=60).mean()
plt.plot(x, means30, color="Yellow", lw = 5)
plt.plot(x, means60, color="Green", lw = 5)
# ポリンジャーバンド
def __BollingerBand(self, x, datas):
closePrice = pd.Series(datas["終値"])
means30 = closePrice.rolling(window=30).mean() # 移動平均
stds30 = closePrice.rolling(window=30).std() # 分散(シグマ)
uppers30 = means30 + (stds30 * 2) # +2シグマ
lowers30 = means30 - (stds30 * 2) # -2シグマ
plt.plot(x, uppers30, color="Cyan", lw=1)
plt.plot(x, lowers30, color="Cyan", lw=1)
plt.fill_between(x, lowers30, uppers30, color="Cyan", alpha=0.5)
# グラフのリサイズ
def __resizeImage(self, targetDate):
img = Image.open(self.__tmpDir + "/tmp" + targetDate + ".png")
img = img.convert('RGB')
img = img.resize((256, 128))
img.save(self.__outputGraphDir + "/" + targetDate + ".png")
del img
# メイン処理
baseDate = args[1]
ai.makeGraph(baseDate)
準備データ
画像の元となるドル円の時系列データ(CSV)です。
実行コマンド
# 20070103のCSVデータを読み込みチャート画像を生成する
python FXAI 20070103
実行結果
画像リサイズ前
画像リサイズ後
あまり大きと機械学習の時間がかかるので画像を縮小。
3.Pythonで作成したFXグラフ
Pythonで作成したグラフの一例を紹介します。
今までVBAでグラフを作ってましたが・・・、
こんにちは。管理人のピヨ猫でーす。前回記事でFXの機械学習の教師データを作成する方法を紹介しました。
syuuai.hatenablog.c...
Pythonは楽ですね(^▽^)/
ソースに無駄なロジックが無い(^▽^)/
少しでもお役にたてたら幸いです。