log出力をcsvかコンソールまたは両方に切り替える自作ラッパー

ビットコイン売買プログラムの独自ログをエクセルで分析できるように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)

'''

コメント

タイトルとURLをコピーしました