見出し画像

損益グラフ作成ツール「PLCreator v1.4」

【リリースノート】--------------------------------------------------------------
v1.4 (2019/12/09)

 ■ グラフ非表示機能追加(統計情報のみで画像作成「3」参照)
 ■ bitFlyer/Liquidにて実行中に建玉が変わると損益が正しく計算されない
  不具合を修正

画像38

v1.3.1 (2019/07/29)
 ■ setup.sh更新(pandasバージョンアップによるエラー対応)
 ※pandas 0.25.0で使用されているlzmaモジュールをプリインストール
  するように「setup.sh」を修正しました。
  「setup.sh」にて環境構築を行う方は最新版をダウンロードして
  使用してください。

画像1

v1.3 (2019/06/27)
 ■ Liquid API対応(日付指定 / 定期通知 / DiscordBotいずれも可)
 ■ 通貨ペア選択機能(MEXアルトやbF現物etc. 「4-2~4」参照)
 ■ APIキー選択機能(config複数設定⇒利用時に選択可「4-0」参照)
 ■ bitFlyer SFD対応(SFD損益を含むか選択可「4-2~4」参照)
 ■ グラフ内に取引所・通貨ペア表示
 ■ 分割約定が別々の取引として扱われていた不具合を修正
 ■ BitMEXでナンピン・部分決済が正しく計算されない不具合を修正
 ※ 本バージョンアップでは機能追加に伴い、必要なパッケージ
  「requirements.txt」、設定ファイル「config.json」項目の追加
  が行われています。 (「2. 初期設定」参照)
  バージョンアップする場合、設定にご注意ください。

v1.2.1 (2019/06/20 19:20)

 ■ デバッグモードがエラーとなってしまう不具合を修正
 ■ bitFlyer損益が開始時の建玉によって正しく計算されない不具合を修正
 ※ 過去バージョンから使用されているbitFlyer利用者キャッシュデータ
   が残っているため、お手数ですが「PLCreator」ディレクトリ全体
   入れ替えをお願い致します。

v1.2 (2019/06/20)
 ■ Discord Bot機能追加 (「4-4」参照)
 ■ 自動ツイート機能追加 (「3、4」(notify_twitter)参照)
 ■ 集計基準タイムゾーン設定追加 (「4-0」(date_offset)参照)
 ■ AWS Cloud9自動環境構築スクリプト追加 (「2. 初期設定」参照)
 ■ バグフィックス
 ※ 本バージョンアップでは機能追加に伴い、必要なパッケージ
  「requirements.txt」、設定ファイル「config.json」項目の追加
  が行われています。 (「2. 初期設定」参照)
  バージョンアップする場合、設定にご注意ください。

v1.1 (2019/06/14)
 ■ BitMEX Funding手数料によって損益が正しく計算されない不具合を修正
 ■ 約定履歴や損益データの明細情報をCSV出力するデバッグモードを追加

v1.0 (2019/06/13)
 ■ PLCreator初版リリース
----------------------------------------------------【リリースノート ここまで】


PLCreatorは損益データをグラフ化するツール(Pythonクラス)です。
BOT運用やバックテストなどで得られた時系列の損益データを任意のタイムフレーム(日次/週次/月次/年次)にて一括グラフ作成します。

グラフにはオプションで取引回数やPF、最大DD、勝率などの統計情報を付加することが可能で、視覚的にも数値的にも損益推移の状況を把握しやすくなっています。

画像2

また、詳細な分析向けオプションとしてインタラクティブチャートでの損益グラフ作成や統計情報一覧をCSV出力なども行うことができます。

画像3

画像4

BitMEX / bitFlyer / Liquidについては
■ 指定日以降の約定履歴等をAPIで取得し、損益データ&グラフを自動作成
■ 指定間隔で当日の日次損益グラフを作成し、LINEやDiscordに定期通知

といったサポートクラスも同梱しています。


【1. 機能概要】

[ PLCreator ]:損益データからグラフを作成するクラス
■ 2次元list/DataFrame形式の損益データ[UnixTime, PL]から損益グラフ作成
■ 多彩なオプションでグラフ内容や形式、デザインを容易にカスタマイズ
 ◆ 入出力通貨レート自動換算(BTC ⇔ 円)
 ◆ グラフテーマ切り替え
 ◆ 統計情報表示
 ◆ 日次/週次/月次/年次グラフ一括作成
■ 分析向けオプションでインタラクティブチャートや統計情報一覧CSV出力
■ 作成した損益グラフをLINE/Discord通知、自動ツイート
※各オプションの詳細は「3. PLCreatorオプション解説」を参照

[ CreateGraph ]:APIデータから損益グラフ作成や定期通知を行うクラス
■ 指定日以降の約定履歴や建玉情報を取得し、損益データを自動作成
■ 設定した時間間隔で当日の最新日次損益グラフをLINE/Discordに定期通知
 または自動ツイート

[ DiscordBot ]:Discordにて対話操作で損益グラフを作成するクラス
■ Bot設定したチャンネル内でコマンド形式にて損益グラフ作成
■ 接続先取引所や集計期間、全てのオプションを自由に設定可能

画像5


【2. 初期設定】

本ツールの動作環境はPython3.6以降となります。
もしない場合は、以下を参考にPython3.6以降の環境構築を行ってください。
(参考までに筆者の本ツール開発環境はPython3.7.3となります。)

python 開発環境構築手順(Windows)
python 開発環境構築手順(Mac)
python 開発環境構築手順(AWS)

なお、環境構築が苦手または手間という方向けにAWS Cloud9でのPLCreator動作環境を自動構築するシェルスクリプトを同梱しました。
使用する場合は有料パートより「setup.sh」をダウンロードし、以下の手順に従って環境構築を行ってください。
AWS Cloud9 Python環境構築スクリプト解説
このシェルスクリプトは以下①、②も含みます。
環境構築後は③を行ってください。

①「PLCreator」を解凍します。
圧縮ファイルを解凍すると以下のようなディレクトリ構成となります。

画像6

② 必要なパッケージをインストールします。
コンソールにてPLCreatorディレクトリに移動し、以下のコマンドで一括インストールします。
(必要なパッケージはrequirements.txtを参照してください。)

pip install -U -r requirements.txt

③ API Key、LINE Token/Discord Webhook URL/DiscordBot Token/Twitter認証キーなど必要情報を設定します。
「config.json」を開き、それぞれ必要な情報を記入してください。

APIを使用してデータ取得を行わない場合はAPI Key/Secretは不要です。
(後述のサンプルではAPIにて取得したデータから損益グラフを作成しますので、そちらを稼働させる場合は設定が必要です。)

同様にLINE/Discord/Twitter送信が不要な場合はToken、URL、認証キーなどは不要です。
(こちらも後述の日次損益グラフの定期通知サンプルで使用しますので、そちらを稼働させる場合は設定が必要です。)

Discord Botとの対話操作での損益グラフ作成を行わない場合はDiscord Bot Tokenは不要です。

各取引所のAPI Key/Secretには任意のAPI名を付けてください。
また、複数APIをお持ちの場合はそれぞれ登録可能です。
後述の取引所からデータ取得する際にここで設定したAPI名を使用します。

画像7

LINE アクセストークン / Discord Webhook URL / Discord Bot / Twitter appの発行がわからない方は以下の記事を参考にしてください。
LINE アクセストークンの発行
Discord Webhook URLの発行
Discord Botトークンの発行
Twitter appの発行


【3. PLCreatorオプション解説】

グラフ作成機能の解説の前にPLCreatorに用意されている様々なオプションの解説を行います。
PLCreatorクラスの主な機能は「create_pl_graph」関数です。
この関数に損益データとオプションを入力してグラフ作成を行います。

#---------------------------------------------------------------------
# PLデータ設定
# [重要] timestamp は UnixTime (秒) にすること
#---------------------------------------------------------------------
# [@param]
#  [項目名]         [説明]           [型(type)]
#  pl_data          入力PLデータ      二次元リスト or DataFrame([unixtime, pl])
#  input_type       入力データタイプ   DataType
#  input_currency   入力通貨         Currency
#  output_currency  出力通貨         Currency
#  output_btc_unit  出力BTC単位      str
#  file_id          ファイル識別ID    str
#  theme            デザインテーマ     Theme
#  trades_info      取引集計情報表示   bool
#  daily            日次グラフ作成     bool
#  weekly           週次グラフ作成     bool
#  monthly          月次グラフ作成     bool
#  annual           年次グラフ作成     bool
#  with_html        HTMLグラフ作成    bool
#  output_csv       一覧データCSV出力  bool
#  notify_line      LINE送信         bool
#  notify_discord   Discord送信      bool
#  notify_twitter   Twitter送信      bool
#  exchange         取引所名          str
#  symbol           通貨ペア名        str
#  hidden_graph     グラフ非表示       bool
# [return]
#---------------------------------------------------------------------
def create_pl_graph(pl_data,
                    input_type,
                    input_currency,
                    output_currency,
                    output_btc_unit = "BTC",
                    file_id         = "",
                    theme           = Theme.BF_Light,
                    trades_info     = True,
                    daily           = True,
                    weekly          = False,
                    monthly         = False,
                    annual          = False,
                    with_html       = False,
                    output_csv      = False,
                    notify_line     = False,
                    notify_discord  = False,
                    notify_twitter  = False,
                    exchange        = "",
                    symbol          = "",
                    hidden_graph    = False)

以下は各オプションの解説になります。

入力データタイプ「input_type」
入力データの損益値がその時点毎の個別損益なのか、積み上げられた累積損益なのかを指定します。
DataType.Each:個別損益データ(その都度発生した損益)
DataType.Stack:累積損益データ(それまでの積み上げ損益)

画像8


◆ 入力通貨 「input_currency」/ 出力通貨「output_currency」
入力通貨( 損益データ pl の通貨)出力通貨( グラフ表示する通貨 )を指定します。
入出力通貨が異なる場合は日足の終値レートにて出力通貨単位に換算してグラフ表示します。

[ 指定可能な通貨 ] ( input_currency / output_currency )
Currency.BTC / Currency.JPY / Currency.USD

[ 参照レート ]
BTC/JPY:cryptowatch の bitFlyer( 現物 ) 日足OHLCV 終値
BTC/USD:cryptowatch の Bitfinex 日足OHLCV 終値


◆ 出力BTC単位「output_btc_unit」
出力通貨が「Currency.BTC」の場合に「output_btc_unit」に設定した表示単位にてBTC価格を表示します。

[ 指定可能なBTC単位 ] ( output_btc_unit )
"satoshi" / "μBTC" / "mBTC" / "BTC"

画像9


◆ ファイル識別ID「file_id」
作成される損益グラフやインタラクティブチャート、CSVファイルのファイル名を指定します。
指定した文字列の後に該当日付( yyyymmdd / yyyymm / yyyy )を付加した文字列がファイル名になります。
(未指定の場合は「"取引所"_"通貨ペア"_"該当日付".jpg」というファイル名になります。)

file_id = "PL_Graph"と指定した場合、
[ 損益グラフ ]
PL_Graph_20190401.jpg (日次/週次)
PL_Graph_201904.jpg (月次)
PL_Graph_2019.jpg (年次)
インタラクティブチャートを作成する場合は拡張子「.html」になります。


デザインテーマ「theme」
損益グラフのデザインテーマを指定します。
人気のbitFlyer損益グラフをイメージした2種類から選択可能です。

画像10


◆ 取引集計情報表示「trades_info」
損益グラフ下部に取引データの統計情報を表示するか指定します。

画像11


◆ 日次 / 週次 / 月次 / 年次グラフ作成
「daily」「weekly」「monthly」「annual」

各タイムフレームの損益グラフを作成するかそれぞれ指定します。
グラフファイルは「images」ディレクトリ配下に分かれて作成されます。

画像12


◆ HTMLグラフ作成「with_html」
損益グラフの画像ファイル(.jpg)と合わせてインタラクティブチャート(.html)を作成するか指定します。

画像13

画像14


◆ 一覧データCSV出力「output_csv」
損益グラフに表示される統計情報の一覧データをCSV出力するか指定します。
一覧データは「file_id」+"_pl.csv"というファイル名で各タイムフレーム別に作成されます。

画像15

画像16


◆ LINE / Discord通知、自動ツイート
 「notify_line」「notify_discord」
「notify_twitter」
作成した損益グラフをLINE / Discord / Twitterにそれぞれ送信するか指定します。
送信するためには予め、「config.json」にTOKENやURLを設定しておく必要があります。(詳細は「2. 初期設定 ③」を参照ください。)


◆ 取引所 / 通貨ペア名「exchange」「symbol」
任意設定ですが、指定するとグラフタイトルに取引所および通貨ペアが表示されます。

画像17


◆ グラフ非表示「hidden_graph」
損益グラフを非表示にしてトータル損益と統計情報を表示します。
(損益グラフを公開したくない場合は「True」を指定して下さい。)

画像37


【4. グラフ作成の流れ】

損益グラフの作成には以下の4つ方法があります。

1.損益データ(UnixTimeと損益額)からグラフを作成
2次元listもしくはDataFrame形式の損益データを入力することでPLCreatorクラスがグラフ作成を行います。

画像18


2.開始日を指定するだけでAPIからデータ取得&加工、グラフを自動作成
BitMEX、bitFlyer、Liquidについて、REST APIで取得できる範囲内の任意の開始日を指定することでCreateGraph( for BitMEX / bitFlyer / Liquid )クラスが開始日から現在までの損益データ&グラフ作成を行います。

画像19


3.通知間隔を設定するだけで最新日次グラフを定期通知
  ( LINE / Discord / Twitter )

こちらもBitMEX、bitFlyer、Liquidについて、通知間隔( 最短1分~ )を設定することでCreateGraph( for BitMEX / bitFlyer / Liquid )クラスが定期的に最新データをREST APIより取得し、損益データ&グラフ( 日次 )作成、LINE / Discordに通知を行います。

画像20


4.Discord Botとの対話操作で自由に損益グラフ作成

Bot設定したDiscordチャンネルにてDiscordBotクラスがコマンドに応じて各種損益グラフを作成します。コマンド引数には接続先取引所や集計期間をはじめ、各種オプションを詳細に設定できます。

画像21


【4-0. グラフ作成前の基本設定】

PLCreator(およびCreateGraph)には損益グラフを作成するにあたり、3つのオプション設定があります。
■ デバッグモード (debug_mode)
■ 集計基準タイムゾーン (date_offset)
■ 接続するAPI名 (api_name)

■ デバッグモード (debug_mode)
損益グラフの元となる明細データを「debug」ディレクトリにCSV出力します。取引所からAPI取得した損益データの詳細を確認する場合などに使用します。(CSV出力する場合はdebug_mode=Trueを設定します。)

PLCreatorを使用する場合はグラフ作成前に「set_debug_mode」関数にて設定します。

# デバッグモード設定
PLCreator.set_debug_mode(debug_mode=True)

CreateGraphを使用する場合はコンストラクタ引数にて設定します。

cg = CreateGraph_For_BitMEX(debug_mode=True, date_offset=9, api_name="")
cg = CreateGraph_For_bitFlyer(debug_mode=True, date_offset=9, api_name="")
cg = CreateGraph_For_Liquid(debug_mode=True, date_offset=9, api_name="")

[ デバッグモード概要図 ]

画像22

■ 集計基準タイムゾーン (date_offset)
PLCreatorの集計基準タイムゾーンのデフォルトは日本時間(JST)です。
そのため、「2019/06/01」を日付指定した場合の日次損益は
2019/06/01 00:00:00~2019/06/01 23:59:59 (日本時間+09:00)
となります。

これに対してBitMEXのウォレット画面に表示される日次の金額はUTC+12:00が集計基準となっています。
そのため、「2019/06/01」の日次損益は
2019/05/31 12:00:00~2019/06/01 11:59:59 (UTC+00:00) =
2019/05/31 21:00:00~2019/06/01 20:59:59 (日本時間+09:00)

この基準時間差のため、集計期間が異なります。

画像23

PLCreatorの集計基準タイムゾーン変更はdate_offsetにて行います。

PLCreatorを使用する場合はグラフ作成前に「set_date_offset」関数にて設定します。

# 集計基準タイムゾーン設定
PLCreator.set_date_offset(offset=9)

CreateGraphを使用する場合はコンストラクタ引数にて設定します。

cg = CreateGraph_For_BitMEX(debug_mode=False, date_offset=9, api_name="")
cg = CreateGraph_For_bitFlyer(debug_mode=False, date_offset=9, api_name="")
cg = CreateGraph_For_Liquid(debug_mode=False, date_offset=9, api_name="")

[ 設定概要 ]
date_offset=9   ( +09:00 JST ) ※デフォルト
date_offset=0   ( +00:00 UTC ) UTC時刻ベースの日付設定
date_offset=12 ( +12:00 ) BitMEX ウォレット画面ベースの日付設定

■ 接続するAPI名 (api_name)
config.jsonに設定したAPI Key/Secretのうち、どれを使用してデータ取得を行うか指定します。
未指定または省略した場合は最初に設定されているAPI Key/Secretを使用します。

cg = CreateGraph_For_BitMEX(debug_mode=False, date_offset=9, api_name="API1")
cg = CreateGraph_For_bitFlyer(debug_mode=False, date_offset=9, api_name="api1")
cg = CreateGraph_For_Liquid(debug_mode=False, date_offset=9, api_name="id_1")

画像24


【4-1. 損益データから損益グラフを作成】

サンプルとして同梱されている損益データ「sample_pl.csv」をDataFrameにて読み込み、条件を指定して損益グラフを作成します。
(入力する損益データは下記形式であれば2次元listでもDataFrameでも問題ありませんのでご自身で用意された損益データでもお試しください。)

使用するファイルは「pl_from_data.py」になります。

画像25

「sample_pl.csv」

画像26

「pl_from_data.py」

# -*- coding: utf-8 -*-
import pandas as pd
from plcreator import PLCreator, Theme, Currency, DataType

def main():
   #---------------------------------------------------------------------------
   # 1. 損益データ読み込み
   #---------------------------------------------------------------------------
   df = pd.read_csv("data/sample_pl.csv")
   print(df.head())

   #---------------------------------------------------------------------------
   # 2. 初期設定
   #---------------------------------------------------------------------------
   # デバッグモード設定
   # Trueにするとdebugディレクトリに各損益グラフ別の明細データが
   # csv出力されます。(データを確認したいときに使用する)
   PLCreator.set_debug_mode(debug_mode=False)

   # 日付基準オフセット設定
   # UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   # デフォルトは日本時間(JST)で +9 です。
   PLCreator.set_date_offset(offset=9)

   #---------------------------------------------------------------------------
   # 3. 損益グラフ作成
   #---------------------------------------------------------------------------
   #  (1で取得した損益データを基にグラフを作成する)
   PLCreator.create_pl_graph(
       pl_data         = df,             # 入力PLデータ (二次元リスト or DataFrame([unixtime, pl]))
       input_type      = DataType.Each,  # 入力データタイプ
       input_currency  = Currency.BTC,   # 入力通貨
       output_currency = Currency.BTC,   # 出力通貨
       output_btc_unit = "BTC",          # 出力BTC単位
       file_id         = "PL_Graph",     # ファイル識別ID
       theme           = Theme.BF_Light, # デザインテーマ
       trades_info     = True,           # 取引集計情報表示
       daily           = True,           # 日次グラフ作成
       weekly          = False,          # 週次グラフ作成
       monthly         = False,          # 月次グラフ作成
       annual          = False,          # 年次グラフ作成
       with_html       = False,          # HTMLグラフ作成
       output_csv      = True,           # 一覧データCSV出力
       notify_line     = False,          # LINE送信
       notify_discord  = False,          # Discord送信
       notify_twitter  = False,          # Twitter送信
       exchange        = "",             # 取引所名
       symbol          = "",             # 通貨ペア名
       hidden_graph    = False)          # グラフ非表示

if __name__ == "__main__":
   main()


【4-2. 取引所からデータを取得してグラフ化】

「from_ymd」に指定した日付以降の「symbol」通貨ペアの約定履歴や建玉情報などをREST APIにて取得し、損益データを作成します。
「from_ymd」"yyyy/mm/dd"形式(str)で指定してください。
 「symbol」は各取引所の標記(str)にて指定してください。
  BitMEX : XBTUSD(※) / ETHUSD / XRPM19 / ADAU19 etc...
  bitFlyer : FX_BTC_JPY(※) / BTC_JPY etc...
  Liquid   : BTCJPY(※) / ETHJPY etc...
  ※「symbol」省略時に設定される通貨ペア)

さらに作成した損益データと各種オプションを指定して損益グラフを作成します。
本処理は取引所へREST APIリクエストを行うため、予め「config.json」API Key/Secretの設定が必要です。
(詳細は「2. 初期設定 ③」を参照ください。)

使用するファイルは
「pl_from_api_"取引所".py」になります。
(BitMEX/bitFlyer/Liquid版がありますが、使い方や関数は同じです。)

画像27

BitMEX版「pl_from_api_BitMEX.py」

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_BitMEX

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for BitMEX)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_BitMEX(debug_mode=False, date_offset=9, api_name="")

   #---------------------------------------------------------------------------
   # 2. 損益データ取得(REST API)
   #---------------------------------------------------------------------------
   # [@param]
   #  from_ymd  : データ取得開始日
   #    指定した日付以降の損益データを取得します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(XBTUSD / ETHUSD / XRPM19 etc...)
   #---------------------------------------------------------------------------
   cg.get_pl_from_rest(from_ymd="2019/06/01", symbol="XBTUSD")

   #---------------------------------------------------------------------------
   # 3. 損益グラフ作成
   #---------------------------------------------------------------------------
   #  (2で取得した損益データを基にグラフを作成する)
   cg.create_pl_graph(output_currency = Currency.BTC,   # 出力通貨
                      output_btc_unit = "BTC",          # 出力BTC単位
                      theme           = Theme.BF_Light, # デザインテーマ
                      trades_info     = True,           # 取引集計情報表示
                      daily           = True,           # 日次グラフ作成
                      weekly          = False,          # 週次グラフ作成
                      monthly         = False,          # 月次グラフ作成
                      annual          = False,          # 年次グラフ作成
                      with_html       = False,          # HTMLグラフ作成
                      output_csv      = True,           # 一覧データCSV出力
                      notify_line     = False,          # LINE送信
                      notify_discord  = False,          # Discord送信
                      notify_twitter  = False,          # Twitter送信
                      hidden_graph    = False)          # グラフ非表示

if __name__ == "__main__":
   main()

bitFlyer版「pl_from_api_bitFlyer.py」
bitFlyerでは現物とFXの価格乖離によってSFDが発生することがあります。
SFDを評価損益に含める場合はグラフ作成前に「add_sfd=True」を設定してください。

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_bitFlyer

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for bitFlyer)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_bitFlyer(debug_mode=False, date_offset=9, api_name="")

   # SFD有無設定
   cg.add_sfd = True

   #---------------------------------------------------------------------------
   # 2. 損益データ取得(REST API)
   #---------------------------------------------------------------------------
   # [@param]
   #  from_ymd  : データ取得開始日
   #    指定した日付以降の損益データを取得します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(FX_BTC_JPY / BTC_JPY)
   #---------------------------------------------------------------------------
   cg.get_pl_from_rest(from_ymd="2019/06/01", symbol="FX_BTC_JPY")

   #---------------------------------------------------------------------------
   # 3. 損益グラフ作成
   #---------------------------------------------------------------------------
   #  (2で取得した損益データを基にグラフを作成する)
   cg.create_pl_graph(output_currency = Currency.JPY,   # 出力通貨
                      theme           = Theme.BF_Light, # デザインテーマ
                      trades_info     = True,           # 取引集計情報表示
                      daily           = True,           # 日次グラフ作成
                      weekly          = False,          # 週次グラフ作成
                      monthly         = False,          # 月次グラフ作成
                      annual          = False,          # 年次グラフ作成
                      with_html       = False,          # HTMLグラフ作成
                      output_csv      = True,           # 一覧データCSV出力
                      notify_line     = False,          # LINE送信
                      notify_discord  = False,          # Discord送信
                      notify_twitter  = False,          # Twitter送信
                      hidden_graph    = False)          # グラフ非表示

if __name__ == "__main__":
   main()

bitFlyer版「pl_from_api_bitFlyer.py」

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_Liquid

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for Liquid)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_Liquid(debug_mode=True, date_offset=9, api_name="")

   #---------------------------------------------------------------------------
   # 2. 損益データ取得(REST API)
   #---------------------------------------------------------------------------
   # [@param]
   #  from_ymd  : データ取得開始日
   #    指定した日付以降の損益データを取得します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(BTCJPY / ETHJPY etc.)
   #---------------------------------------------------------------------------
   cg.get_pl_from_rest(from_ymd="2019/06/01", symbol="BTCJPY")

   #---------------------------------------------------------------------------
   # 3. 損益グラフ作成
   #---------------------------------------------------------------------------
   #  (2で取得した損益データを基にグラフを作成する)
   cg.create_pl_graph(output_currency = Currency.JPY,   # 出力通貨
                      theme           = Theme.BF_Light, # デザインテーマ
                      trades_info     = True,           # 取引集計情報表示
                      daily           = True,           # 日次グラフ作成
                      weekly          = False,          # 週次グラフ作成
                      monthly         = False,          # 月次グラフ作成
                      annual          = False,          # 年次グラフ作成
                      with_html       = False,          # HTMLグラフ作成
                      output_csv      = True,           # 一覧データCSV出力
                      notify_line     = False,          # LINE送信
                      notify_discord  = False,          # Discord送信
                      notify_twitter  = False,          # Twitter送信
                      hidden_graph    = False)          # グラフ非表示

if __name__ == "__main__":
   main()


【4-3. 定期的に日次グラフをLINE/Discord通知】

「interval」に指定した時間間隔毎に「symbol」通貨ペアの当日の最新約定履歴や建玉情報などをREST APIにて取得し、損益データを作成します。
作成された日次損益グラフはLINE/Discord/Twitterに自動送信します。
本処理は定期通知のため、強制終了するかエラーが発生するまで稼働し続けます。
また、取引所へREST APIリクエスト、LINE/Disocord/Twitter送信を行うため、予め「config.json」API Key/SecretLINE Token、Discord Webhook URL、Twitter認証キーなどの設定が必要です。
(詳細は「2. 初期設定 ③」を参照ください。)

[ interval 設定例 ]
["minute", 15] ⇒ 15分間隔(毎時0, 15, 30, 45分に送信)
["hour", 4] ⇒ 4時間間隔(0, 4, 8, 12, 16, 20時に送信)
["day", 1] ⇒ 1日間隔(日付が変わるタイミングで送信)

使用するファイルは
「pl_notify_"取引所".py」になります。
(BitMEX/bitFlyer/Liquid版がありますが、使い方や関数は同じです。)

画像28

BitMEX版「pl_notify_BitMEX.py」

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_BitMEX

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for BitMEX)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_BitMEX(debug_mode=False, date_offset=9, api_name="")

   #---------------------------------------------------------------------------
   # 2. グラフ設定
   #---------------------------------------------------------------------------
   cg.output_currency = Currency.BTC
   cg.output_btc_unit = "BTC"
   cg.theme           = Theme.BF_Light
   cg.trades_info     = True
   cg.hidden_graph    = False

   #---------------------------------------------------------------------------
   # 3. 送信先設定
   #---------------------------------------------------------------------------
   #  (config.jsonにtoken/urlを事前に設定する)
   cg.notify_line    = True
   cg.notify_discord = True
   cg.notify_twitter = False

   #---------------------------------------------------------------------------
   # 4. 日次損益グラフ定期通知
   #---------------------------------------------------------------------------
   # [@param]
   #  interval  : データ取得開始日
   #    指定した時間間隔毎に当日の日次損益グラフを送信します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(XBTUSD / ETHUSD / XRPM19 etc...)
   #---------------------------------------------------------------------------
   cg.start_scheduled_notification(interval=["minute", 15], symbol="XBTUSD")

   # 定期通知のため、終了させるまで稼働し続ける

if __name__ == "__main__":
   main()

bitFlyer版「pl_notify_bitFlyer.py」
SFDに関しては前項と同様です。(詳細は「4-2」参照)

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_bitFlyer

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for bitFlyer)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_bitFlyer(debug_mode=False, date_offset=9, api_name="")

   #---------------------------------------------------------------------------
   # 2. グラフ設定
   #---------------------------------------------------------------------------
   cg.output_currency = Currency.JPY
   cg.theme           = Theme.BF_Light
   cg.trades_info     = True
   cg.hidden_graph    = False

   # SFD有無設定
   cg.add_sfd         = True

   #---------------------------------------------------------------------------
   # 3. 送信先設定
   #---------------------------------------------------------------------------
   #  (config.jsonにtoken/urlを事前に設定する)
   cg.notify_line    = True
   cg.notify_discord = True
   cg.notify_twitter = False

   #---------------------------------------------------------------------------
   # 4. 日次損益グラフ定期通知
   #---------------------------------------------------------------------------
   # [@param]
   #  interval  : データ取得開始日
   #    指定した時間間隔毎に当日の日次損益グラフを送信します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(FX_BTC_JPY / BTC_JPY)
   #---------------------------------------------------------------------------
   cg.start_scheduled_notification(interval=["minute", 15], symbol="FX_BTC_JPY")

   # 定期通知のため、終了させるまで稼働し続ける

if __name__ == "__main__":
   main()

Liquid版「pl_notify_Liquid.py」

# -*- coding: utf-8 -*-
from plcreator import Theme, Currency
from plcreator import CreateGraph_For_Liquid

def main():
   #---------------------------------------------------------------------------
   # 1. グラフ作成インスタンス生成(for Liquid)
   #---------------------------------------------------------------------------
   # [@param]
   #  debug_mode  : デバッグモード
   #    Trueにするとdebugディレクトリに各明細データがcsv出力されます。
   #    詳細なデータ確認をしたいときに使用します。通常はFalseです。
   #
   #  date_offset : 日付基準オフセット設定
   #    UTCを基準に損益集計時の日次切り替わり時刻のオフセット時間を設定します。
   #    デフォルトは日本時間(JST)で +9 です。
   #
   #  api_name    : 接続するAPI名
   #    config.jsonに設定したAPI情報から、どれを使用するか設定します。
   #    未入力時は最初に設定されているAPIが使用されます。
   #---------------------------------------------------------------------------
   cg = CreateGraph_For_Liquid(debug_mode=False, date_offset=9, api_name="")

   #---------------------------------------------------------------------------
   # 2. グラフ設定
   #---------------------------------------------------------------------------
   cg.output_currency = Currency.JPY
   cg.theme           = Theme.BF_Light
   cg.trades_info     = True
   cg.hidden_graph    = False

   #---------------------------------------------------------------------------
   # 3. 送信先設定
   #---------------------------------------------------------------------------
   #  (config.jsonにtoken/urlを事前に設定する)
   cg.notify_line    = True
   cg.notify_discord = True
   cg.notify_twitter = False

   #---------------------------------------------------------------------------
   # 4. 日次損益グラフ定期通知
   #---------------------------------------------------------------------------
   # [@param]
   #  interval  : データ取得開始日
   #    指定した時間間隔毎に当日の日次損益グラフを送信します。
   #
   #  symbol    : 通貨ペア
   #    指定した通貨ペアの損益データを取得します。(BTCJPY / ETHJPY etc.)
   #---------------------------------------------------------------------------
   cg.start_scheduled_notification(interval=["minute", 15], symbol="BTCJPY")

   # 定期通知のため、終了させるまで稼働し続ける

if __name__ == "__main__":
   main()


【4-4. Discord Botとの対話操作で損益グラフ作成

Bot設定したDiscordチャンネルにグラフ作成コマンドを入力することでDIscordBotが損益グラフ作成およびTLへアップロードを行います。
以下のコマンドが用意されており、各コマンドの引数にオプションを設定することも可能です。
(省略時は「plcpg.py」に定義されたデフォルトが適用されます。)
DiscordBotを使用するには、予め「config.json」Discord Bot Tokenの設定が必要です。
(詳細は「2. 初期設定 ③」を参照ください。)

[ コマンド一覧 ]
「!daily」          :日次損益グラフ作成
「!weekly」       :週次損益グラフ作成
「!monthly」    :月次損益グラフ作成
「!annual」       :年次損益グラフ作成
「!csv」             :CSV損益ファイルより損益グラフ作成
「!show_help」:各コマンド解説表示

画像29

使用するファイルは「discord_bot.py」になります。
(コマンド実装は「plcog.py」になるため、処理内容やデフォルトの変更を行う場合はそちらを編集してください。)

画像30

[ DiscordBotの起動方法 ]
「discord_bot.py」を実行してください。

画像31

[ コマンドの実行方法 ]
Bot設定したDiscordチャンネルにコマンドと(必要に応じて)引数を入力してください。

画像32

画像33

画像34

画像35


【5. 注意事項(必ずお読みください)】

■ タイムゾーンは日本時間(JST)を基準として集計しています。
(UTC基準とは日次の集計期間が異なることにご注意ください。)
必要に応じて集計基準タイムゾーンを変更してご使用ください。

■ 本ツールは扱うデータ期間や量によってかなりの処理時間が必要な場合があります。(データ取得、グラフ作成、LINE/Discord/Twitter送信 etc.)
リアルタイム性が求められるBOTや処理には組み込まないでください。

■ 入出力で通貨が異なる場合の変換レートはcryptowatchの日足OHLCVの終値を参照しています。(BTC/JPYbitFlyer現物BTC/USDBitfinex
当日のレートは作成時点の終値を採用しているため、入力損益に変化がない場合でもレート換算された出力損益は変動することがあります。

■ 本ツールは正確な損益を証明するものではありません。
正確な損益は各取引所の公式な金額をご確認ください。
約定履歴等から算出した損益は端数処理の誤差レート換算等により、場合によっては大きく差が生じる可能性があります。
あくまで参考としてください。

意図的な損益の偽造や一般的に誤解を生むような表現勧誘行為などには使用しないでください。

■ 取引所APIを使用する処理では期間やデータ量によって一時的に多くリクエスト発行を行う場合があります。
BOT稼働している場合などはRateLimitの管理にご注意ください。

商用利用の禁止
本ツールは個人または小規模での運用や分析、検証を目的としているため、非商用でご利用ください。
(商用利用した場合のリスクや責任の範囲、今後の開発の自由度等を考慮した上での制約とさせて頂きます。)

免責事項
本ツールおよび本ツールに掲載されている情報を利用した結果、被ったとされるいかなる損害も保証は出来かねますので、あらかじめご了承ください。

上記をご理解の上で要・不要をご検討ください。


【6. PLCreatorに含まれるもの】

画像36

PLCreatorに含まれるディレクトリ・ファイル構造は上記のとおりです。
その中で損益グラフ作成を行う上で主に編集・実行するファイルは赤枠で囲まれたファイルになります。(4章で解説したファイル)

《以下、有料パートですが、解説はここまでで全てです。》

この続きをみるには

この続き:378文字

損益グラフ作成ツール「PLCreator v1.4」

Nagi

3,000円

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

ありがとうございます!よろしければフォロー&シェアも頂けたら幸いです。
90
暗号通貨関連の投資、トレードを実践中。 最近はBTCFXのシステムトレードにハマってます! Twitterでも情報発信やってます。 よかったらフォローしてください。 https://twitter.com/Nagi7692

コメント10件

購入者ですが、作ってもらうこと可能ですか?
ご購入ありがとうございます。
作るとはどういうことを想定されておりますでしょうか?
なにかカスタマイズなどの開発を意味するのか、損益グラフを作成することを意味するのか、ちょっと分かりかねますのでもう少し詳しくご説明頂けると幸いです。

なお、コメントは公開情報ですので話しにくいようならTwitterのDMへご連絡ください。
https://twitter.com/Nagi7692
Discordの対話方式でLiquidの日次損益が、正常に機能しないです。グラフは出力されますが、グラフや数値が正しく無いです。500円の利益なのに3000円くらいの利益になって表示されます。コードの編集はしていません。BFなどは問題なく出力されます。
お問い合わせありがとうございます。
Liquidの当日の日次損益が正しく集計されない件についてこちらでも調査を行ってみます。
また、もし可能なら調査のため、正しく集計できていない明細データをDM等で頂けないでしょうか?(https://twitter.com/Nagi7692

plcreator\cogs\plcogs.pyの553行目辺りにあるコードのdebug_modeをTrueに変更して実行するとdebugディレクトリが作成され、そこにグラフ明細csvデータが作成されます。

・・・
elif exchange == "Liquid":
cg = CreateGraph_For_Liquid(debug_mode=True, date_offset=offset, api_name=api)

不明な点等ございましたら、DMでもご質問ください。
お手数をお掛けしますが、よろしくお願い致します。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。