PythonでFXチャートを作成する方法を分かり易く解説します

AIによるFXの予想にチャレンジしています!!本日はAIでFXの予想をするための学習データとしてFXチャートをPythonで作る方法を紹介します。
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)です。
FXチャートのCSVデータ

実行コマンド

# 20070103のCSVデータを読み込みチャート画像を生成する
python FXAI 20070103

実行結果

画像リサイズ前

pythonで作成したFXチャートのグラフ

画像リサイズ後

あまり大きと機械学習の時間がかかるので画像を縮小。
pythonで作成したFXチャートのグラフ

3.Pythonで作成したFXグラフ

Pythonで作成したグラフの一例を紹介します。
pythonで作成したFXチャートのグラフ

今までVBAでグラフを作ってましたが・・・、

こんにちは。管理人のピヨ猫でーす。前回記事でFXの機械学習の教師データを作成する方法を紹介しました。 syuuai.hatenablog.c...

Pythonは楽ですね(^▽^)/
ソースに無駄なロジックが無い(^▽^)/

少しでもお役にたてたら幸いです。
宜しくお願いします

広告




スポンサーリンク
広告




広告




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
広告