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('回测完成') #最后一句没有写到日志文件中

<think>好的,用户想知道迅投QMT支持的文件格式。我需要先回忆一下相关的引用内容。引用[1]提到使用xtdata.get_full_tick获取行情数据,生成DataFrame,可能支持pandas的数据结构,比如CSV、Excel等格式。引用[2]指出QMT支持的Python版本是3.6到3.8,并且有特定的.pyd文件,说明可能主要支持Python脚本。引用[3]提到小白量化模块在QMT上仿大智慧指标,可能涉及自定义指标文件,比如类似大智慧的公式文件。 另外,用户的问题可能隐含他们想导入数据或策略,比如CSV、Excel用于数据导入,Python脚本用于策略,或者特定金融指标文件。需要结合引用内容,整理出QMT支持的文件格式,包括数据格式、策略脚本格式、配置文件等。可能还要提到第三方库如pandas支持的文件,因为引用[1]用了DataFrame,可能暗示CSV支持。此外,策略回测可能需要历史数据文件,比如HDF5、JSON等,但不确定是否有直接支持,可能需要通过Python处理。 需要确保回答覆盖数据文件、策略脚本、配置文件、指标文件等,并引用相关的地方。比如数据导入可能用CSV,策略用.py,指标可能有自定义格式,配置文件可能是INI或YAML,但引用中没有明确提到,可能需要推测。同时注意用户可能需要具体例子,比如代码中使用pd.read_csv,所以支持CSV。 最后,生成相关问题时要围绕文件格式、数据导入导出、策略开发、兼容性等方面提问。</think>迅投QMT系统支持多种文件格式以满足量化交易需求,主要涵盖以下类型: 1. **Python脚本文件(.py)** QMT的核心策略开发基于Python,支持Python 3.6-3.8版本的脚本编写,例如策略回测、订单接口调用等[^2]。示例代码中可见通过`xtdata`模块获取行情数据: ```python data = xtdata.get_full_tick(a_index_etf) df = pd.DataFrame(data) ``` 2. **数据文件格式** - **CSV/Excel**:通过`pandas`库可直接读取结构化数据,如引用[1]中生成的`DataFrame`对象常用于处理CSV或Excel数据。 - **Tick/K线行情文件**:支持订阅实时行情数据并存储为系统内置格式,用于策略回测或分析[^1]。 3. **自定义指标文件** 用户可通过类似大智慧公式的语法编写技术指标,如引用[3]提到的仿大智慧指标回测设计,可能涉及自定义公式文件或配置文件。 4. **二进制依赖文件(.pyd)** QMT依赖特定版本的Python扩展模块,例如`IPythonApiClient.cp38-win_amd64.pyd`等二进制文件,用于接口调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值