Pythonを使ってzaifから自力で取引履歴をCSV出力してみました。
こんにちは、higoxです。
僕は仮想通貨への投資での利益を確認するために、毎月「取引履歴」をCSV出力し、Excelで集計しています。しかし、普段利用している取引所の1つである「zaif」で、昨年の12月中頃より取引履歴のCSV出力ができなくなってしまいました。
公式のお知らせはこちらです。
12月下旬の再開予定というアナウンスがありましたので待っていたのですが、1月7日現在、未だに再開されません。そこそこ不便ですので、今回はPythonを使って自力でのCSV出力に挑戦してみたいと思います。
1/28追記
コインチェックさんの件もあり、それどころではないかもしれませんが、zaifの取引履歴のCSV出力が再開されていました!
挑戦した結果とプログラム
まず、結果からなのですが、無事にCSV出力することに成功しました。
以下はCSV出力するために作成したpythonプログラムです。見にくくてすみません。
import datetime from zaifapi import ZaifTradeApi #zaifapiのインストールが必要です。 def zaif_trade_history(zaif_access_key,zaif_secret_key): #zaifの取引履歴を取得する関数です。 zaif = ZaifTradeApi(zaif_access_key, zaif_secret_key) trade_history_dict = zaif.trade_history(currency_pair='btc_jpy') return trade_history_dict def csv_output(output_path,data): #csv出力するための関数です。 f = open(output_path,"a",encoding = "UTF-8") f.write(data) f.close() #初期設定:ここを設定してください。 zaif_access_key = 'ここにアクセスキーをいれてください。' zaif_secret_key = 'ここにシークレットキーをいれてください。' output_csv = r'ここにログファイルのアドレス 例:C:\trade_log.csv' #ここまで初期設定です。 #csvの1行目です。 csv_output(output_csv,'マーケット,取引種別,価格,数量,取引手数料,ボーナス円,日時,コメント'+'\n') #取引履歴の取得します。 trade_history_dict = zaif_trade_history(zaif_access_key,zaif_secret_key) #取得した取引履歴辞書データから、必要な場所を抽出し、CSVに出力します。 for key in trade_history_dict: #データの抽出 currency_pair = (trade_history_dict[key]['currency_pair']) your_action = (trade_history_dict[key]['your_action']) if your_action == 'bid': trade_type = '買い' else: trade_type = '売り' price = (trade_history_dict[key]['price']) amount = (trade_history_dict[key]['amount']) fee_amount = (trade_history_dict[key]['fee_amount']) bonus = (trade_history_dict[key]['bonus']) timestamp = datetime.datetime.fromtimestamp(int(trade_history_dict[key]['timestamp'])) comment = (trade_history_dict[key]['comment']) #CSV出力 export_data = currency_pair+','+trade_type+','+str(price)+','+str(amount)+','+str(fee_amount)+','+str(bonus)+','+str(timestamp)+','+comment+'\n' csv_output(output_csv,export_data)
プログラム解説
本業の方やパイソニスタの方々から見たら、稚拙で、直したいところもいっぱいあるようなプログラムだとは思うのですが、一応僕のやりたいことはできましたので、公開して、プログラムを少しだけ解説したいと思います。
動作環境
・python3で作成しています。
・ライブラリzaifapiを利用しています。
zaifapiはターミナルから「pip install zaifapi」コマンドを実行することでインストールすることができます。非公式のライブラリですが、公式ページで紹介されていることもあり、少し安心して使っています。
また、API自体の詳細は公式ドキュメントをご確認ください。
ZaifAPI ドキュメント — Zaif api document v1.1.1 ドキュメント
設定値
・ アクセスキー、シークレットキーを取得して入力してください。
これらAPI Keyはzaifのアカウント情報のページより取得することができます。
・ログファイル出力先を指定してください。
このプログラムの一番ダメなところです。出力するために空のCSVファイルを作成し、そのアドレスを明示してください。
・関数 zaif_trade_history で通貨ペア'btc_jpy'を指定しています。
私は通貨ペア'btc_jpy'の過去取引履歴のみが欲しかったので、関数内でオプションを与えています。全ての取引履歴が必要な場合は消す必要があります。
実際にプログラミングしてみて悩んだところ
・timestampが10桁の数字!
プログラム自体は比較的サクサクできたのですが、1ヶ所つまづいたところが、timestampとして10桁の数字が吐き出されるという部分でした。僕は知らなかったのですが、この10桁の数字、UNIX-Timeというものみたいですね。UNIX-Timeは1970年1月1日0時0分0秒からの経過秒数ということです。pythonでは
datetime.datetime.fromtimestamp('ここにUNIX-TIME!')で変換することができました。
また、これは余談ですが、ちょくちょく聞く「2038年問題」の原因が「UNIX-Timeの始まりの時刻である、1970年1月1日0時0分0秒から、符号付き32bitの最大値である2147483647秒が経過するとオーバーフローしてしまうから」というものだそうです。面白いですねっ。初めてプログラムした人はきっと2147483647秒も使われると思わなかったのでしょうね。
実現できなかったこと
・過去取引履歴を最大1000件までしか取り出せませんでした。
どうやら1度に最大で1000件までしか取り出せない仕様のようです。ただ、取り出し開始位置を指定できるようなので、その部分をうまくやることでもっと多くの取引履歴を取り出せると思います。今回は1000件出せれば十分でしたので、そこまでやりませんでしたが…
まとめ
今回はzaifから自力で過去取引履歴をCSV出力してみました。無事に成功してやりたいことができたので万々歳です。改良するとしたら最大1000件以上の過去取引履歴を取得できるようにしてみるって所と、空CSVファイルを自動で生成するようにするっていう所の2点でしょうか。
ただ、本ブログでは初めてソースコードを公開しましたが、稚拙なコードって自認している分、やっぱり恥ずかしいですね。その分、ほんとのPython初心者の方にも読みやすいんじゃないかと少しポジティブに考えてみます…
…あー、でもやっぱり恥ずかしいな… もっとちゃんと勉強しよっと。「動けばいいや」的プログラミングから卒業するんだ!!
すごいねー。さすがだ!pythonもっと勉強せねば。
僕なんてzaifのアービトラージの利益計算、ほぼ諦めてますからね!もう全部の収支でしか見なくなってる自分が怖いっす。
Pythonのススメ
こんな風に自分でプログラミングできると、色々と困っていることを自己解決できたりしちゃいます。とても便利なので、プログラミング未経験の方はプログラミング学習にチャレンジしてみてはいかがでしょうか。
プログラミング言語も色々とありますが、僕はPythonをおすすめします。Pythonはプログラミング言語の中でも習得が簡単な部類の言語だと言われている上に、最近話題にあがることが多い「人工知能分野」でも多く使われる、非常に将来性のある言語です。また、使用者も多く、Webで多くのプログラム例を見つけることができます。仮想通貨の自動売買プログラムなんかも調べるといっぱい見つかりますよっ
ちょっとはじめてみたいと感じた方におすすめなのが「みんなのPython」です。僕はこの一冊でだいぶPythonプログラミングができるようになりました。