QMT中print内容同时输出到控制台和日志文件

文章介绍了如何在QMT中使用自定义的Logger类,将print输出同时记录到控制台和日志文件,以便于长时间运行程序时保存完整日志信息。通过定义Logger类,重写write方法,实现了日志的双重记录。在回测结束时,会关闭日志文件并恢复控制台输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在QMT中使用print可以打印出执行的日志,但是有时候执行程序时间长,打印的内容比较多,控制台中就要覆盖前面的内容,不能够完整的保留下来做分析,下面示例可以在print到控制台的同时记录到日志文件中。

#encoding:gbk
 
import pandas as pd
import numpy as np
import talib
import sys
import time

#Logger类的定义
class Logger(object):
	def __init__(self,filename="Default.log"):
		self.terminal=sys.stdout
		self.log=open(filename,"w",encoding="utf-8") #防止编码错误

	def write(self, message):
		self.terminal.write(message)
		self.log.write(message)

	def flush(self):
		pass

#log初始化函数,在函数中初始化log对象
def loginit():
	t=time.strftime("-%Y%m%d-%H%M%S",time.localtime()) #时间戳
	filename='d:\stock\log\log'+t+'.txt'
	log=Logger(filename)
	sys.stdout=log
 
def init(ContextInfo):
	ContextInfo.stock_code_list=['000001.SZ']
	ContextInfo.accID='18510385'
	ContextInfo.set_universe(ContextInfo.stock_code_list)
	ContextInfo.set_account(ContextInfo.accID)
	loginit() #初始化log对象
	
def handlebar(ContextInfo):
	timetag=ContextInfo.get_bar_timetag(ContextInfo.barpos)
	dt=timetag_to_datetime(timetag,'%Y-%m-%d %H:%M%S')
	print(dt,'-'*30)
	if ContextInfo.is_last_bar() or dt[:10]==ContextInfo.end[:10]:
		sys.stdout.log.close() #关闭文件
		sys.stdout=sys.stdout.terminal #恢复输出的控制台引用
		print('回测完成') #最后一句没有写到日志文件中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值