SQLiteを使用して、過去取引データを
今日も一日お疲れ様です。
皆様はどのような一日だったでしょうか?
私は充実した一日を過ごすことが出来ました。
1か月前ぐらいからpythonとG検定を勉強を始めました。
そこから人工知能の作成に興味を持つことになったのですが、
どのような人工知能を作成しようかなと思ったときに思い浮かんだのが
・業務サービスの判断を出来る知能
・社内SE用のRPA専用の知能
・FXの自動取引
上記3つでした。
「業務サービスの判断を出来る知能、社内SE用のRPA専用の知能」は資格等がないと案件参入が厳しいと思いました。
それに比べると 「FXの自動取引」はあくまで自分に帰属するものなので問題ないと思いました。
開発を始めると、課題が多くびっくりしました。
一つ一つこなしていこうと思います。
本題ですが、本日はSQLiteに過去取引データに格納する方法を簡単にまとめました!
【目的】
・過去トレードの分析に使用するため
・複数の証券会社に使用しているデータを一元管理するため
【概要】
1 各証券会社からcsvファイルを取得
2 pythonでsqliteに格納
【詳細】
1 各証券会社からcsvファイルを取得
特に大したことをしていないので、簡単に記載します。
海外FX ・・・ MT4、MT5から取得、専用のスクリプトがあるのでそれを使用
国内 ・・・ 問い合わせ、各ツールから取得
2 pythonでsqliteに格納
2-1 sqlite操作モジュールを作成
2-2 csvファイルを読み取り用モジュールを作成
2-3 mainにて実行
【各ソース】
2-1 sqlite操作モジュールを作成
・Create部分
import sqlite3
conn = sqlite3.connect('FX.sqlite3')
c = conn.cursor()
c.execute('create table position_details(securities_company TEXT,symbol TEXT,lots INTEGER,type INTEGER,profit REAL,profit_pips REAL,tax REAL,swapu REAL,open_price REAL,close_price REAL,open_time TEXT,close_time TEXT)')
conn.commit()
conn.close()
・Select Insert部分 ※ヒューマンエラーにてCreateとはモジュールを分けました。
import sqlite3
import pandas
# dict_factoryの定義
def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d
# クラスの定義
class table:
conn = sqlite3.connect('FX.sqlite3')
conn.row_factory = dict_factory
c = conn.cursor()
# インサートの定義
def insert(self, securities_company, symbol, lots, type, profit, profit_pips, tax, swapu, open_price, close_price, open_time, close_time):
self.c.execute("insert into position_details values "
"(:securities_company,"
":symbol,"
":lots,"
":type,"
":profit,"
":profit_pisp,"
":tax,"
":swapu,"
":open_price,"
":close_price,"
":open_time,"
":close_time)"
,
(securities_company,
symbol,
lots,
type,
profit,
profit_pips,
tax,
swapu,
open_price,
close_price,
open_time,
close_time))
# セレクトの定義
def select(self):
self.c.execute('select * from position_details')
data = self.c.fetchall()
return data
2-2 csvファイルを読み取り用モジュールを作成
# ヒロセ通商
def datainsert(sql, pandas, math):
for i in range(61):
list = pandas.read_csv(★読み取りたいcsvパスを設定してください)
for j in range(len(list)):
sql.insert("ヒロセ",
list.at[j,"通貨ペア"].replace("/", ""),
(list.at[j,"Lot数"].astype(float) * 1000),
list.at[j,"売買"],
math.floor(list.at[j,"決済損益"].astype(float)),
math.floor(list.at[j,"pip損益"].astype(float)),
math.floor(list.at[j,"手数料"].astype(float)),
math.floor(list.at[j,"スワップ損益"].astype(float)),
list.at[j,"新規約定値"],
list.at[j,"決済約定値"],
list.at[j,"新規約定日時"].replace('/', '-'),
list.at[j,"決済約定日時"].replace('/', '-'))
# XMインサート
def datainsert(pandas, math, sql, pipscalculation):
list = pandas.read_csv(★読み取りたいcsvパスを設定してください)
print(list.info())
for j in range(len(list)):
if list.at[j, "銘柄"] != "":
sql.insert("XM MT5",
(pipscalculation.currency_replace(list.at[j,"銘柄"])),
math.floor((pipscalculation.lotscalculation(list.at[j, "銘柄"], list.at[j, "数量"].astype(float)))),
list.at[j,"タイプ"].replace('buy', '買').replace('sell', '売'),
math.floor(list.at[j,"損益"].astype(float)),
(pipscalculation.pipscalculation(list.at[j, "銘柄"], list.at[j, "タイプ"], list.at[j, "価格"], list.at[j, "価格.1"])),
math.floor(list.at[j,"手数料"].astype(float)),
math.floor(list.at[j,"スワップ"].astype(float)),
list.at[j,"価格"],
list.at[j,"価格.1"],
list.at[j,"時間"].replace('.', '-'),
list.at[j,"時間.1"].replace('.', '-'))
※pipscalculationについては省きます。
そんな難しいことはしていないです。
2-3 mainにて実行
import SQLITE.position_details.SQL
import pandas
import math
from csvexeport import csv_exeport, csv_exeport_rate
from csvInsert import titan_insert, xm_insert, hirose_insert, rate_insert
import datetime
from dateFormat import dateformat
from pip import pipscalculation
sql = SQLITE.position_details.SQL.table('FX.sqlite3', 'position_details')
# ヒロセ通商 csvinsert
hirose_insert.datainsert(sql, pandas, math)
# XM csvinsert
xm_insert.datainsert(pandas, math, sql, pipscalculation)
実行後、データ一部貼り付け確認
ヒロセ,GBPJPY,1000,買,0.0,0.0,0.0,0.0,144.49,144.49,2018-11-16 00:40:35,2018-11-16 00:40:49
XM MT5,USDJPY,250000,買,8250.0,33.00000000001455,0.0,0.0,109.15799999999999,109.191,2018-04-25 10:13:21,2018-04-25 11:29:09
本日は以上です!
これからこのデータを使用して、
特徴量を分析してクラスタリング後に評価をしようと思っています。
随時、ソース上げるので参考にしていただければ幸いです。
ソース見にくいな 、対処法を考えなければ。。。
ちなみにpycharmでコーディングしています!
下記プロジェクト背景です。
記事を見てくれた人が大好きです!!
明日以降も頑張ります!
0コメント