ビットコイン売買プログラムの独自ログをエクセルで分析できるようにcsv出力するクラスを作ったが、どうせならコンソール画面にも出力したりしなかったり簡単にできたら便利だと思ったので作ったのだ。
すごく見やすいですわ。
マイビットコインボット専用なので汎用性はありません。
# coding: utf-8
import csv
from pprint import pprint
import time, datetime
from parameter import Parameter #設定変数を管理している独自のpythonクラスコード
p=Parameter()#パラメーターの読み込み、同上
con_row=0 #コンソールには10回に1回見出し行を表示するためのフラグ
loglist1=['日','時','status','勝回','負回','回計','Ppnl','Tpnl','T回','T階',
'Pside','price','Popen_p','Tstart_p','Plot','Pminus','Thigh','Tlow','next_side',
'profit_w','stop_w','Tprofit_w','Tstop_w',
'interval','size','Corder_type']
class Log2csv(): #LOGを独自フォーマットで出力する
def __init__(self):
#self.status=status
today = datetime.datetime.fromtimestamp(time.time())
today.strftime('%Y/%m/%d,%H:%M:%S')
self.log_file='log\LOG' + today.strftime('%Y-%m-%d-%Hh%Mm')+'.csv'
def status_first_print(self):
with open(self.log_file,'a',newline='')as f:
writer=csv.writer(f)
writer.writerow(loglist1)
def status_get(self,status,p):
self.status=status
self.p=p
today = datetime.datetime.fromtimestamp(time.time())
today.strftime('%Y/%m/%d,%H:%M:%S')
loglist=[]
loglist.append(today.strftime('%Y/%m/%d'))
loglist.append(today.strftime('%H:%M:%S'))
loglist.append(self.status)
loglist.append(self.p.take_profit)
loglist.append(self.p.loss_cut)
loglist.append(int(self.p.total))
loglist.append(int(self.p.posi_pnl))
loglist.append(int(self.p.trail_pnl))
loglist.append(self.p.trail_count)
loglist.append(self.p.trail_stage)
loglist.append(self.p.posi_side )
loglist.append(int(self.p.current_price ))
loglist.append(int(self.p.posi_open_price ))
loglist.append(int(self.p.trail_start_price))
loglist.append(self.p.posi_lotsize)
loglist.append(self.p.posi_minus)
loglist.append(int(self.p.tick_high))
loglist.append(int(self.p.tick_low))
#'''2020/04/13
# loglist.append(self.p.next_side)
# loglist.append(self.p.profit_width )
# loglist.append(self.p.stop_width )
# loglist.append(self.p.trail_profit_width)
# loglist.append(self.p.trail_stop_width)
# loglist.append(self.p.interval)
# loglist.append(self.p.lotsize)
# loglist.append(self.p.child_order_type)
#'''
return loglist
def log2csv(self,status,data):#csvファイルに出力しエクセルで見るクラスメソッド
self.status=status
self.data=data
with open(self.log_file,'a',newline='')as f:
writer=csv.writer(f)
writer.writerow(self.status_get(self.status,self.data))
def log2con(self,status,data):#モニターで見るクラスメソッド
global con_row
self.status=status
self.data=data
if con_row==0:
for i in loglist1:
print (i,end='\t')
print('')#改行
con_row=1
else :
for i in self.status_get(self.status,self.data):
print(i,end='\t')
print('')
con_row+=1
if con_row>10:
con_row=0
'''
使い方(main側)
#インスタンス化
p=Palameter()
l2c=Log2csv()
l2c.status_first_print()#タイトル行は別に指定
l2c.log2csv('start',p)
l2c.log2con('start',p)
'''
コメント