请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3365785 新帖:17

【有用功】在回测及模拟交易中读取/写入研究中不同格式的文件

2020来了发表于:5 月 9 日 17:37回复(1)

请注意区分Python2和Python3

例如read_file,Python2使用from six import StringIO ,Python3使用 from six import BytesIO

投资研究的根目录在哪

https://www.joinquant.com/research

如何将本地的文件上传到投资研究

打开投资研究按照下面的指示完成,上传结束后文件在根目录。

为了保证大家可以正常的使用,我们对文件大小及上传速度有限制,如果文件较大,请使用我们的金融终端在本地研究。
Img

在回测及研究中读取研究中的文件

(1)在官网的回测及研究中读取研究中的数据,请参考下面的回测;

(2)在客户端的回测及研究中读取数据,请参考如何在客户端调用本地的文件

如何在回测及模拟交易中连网获取数据

(1)我们的回测及模拟支持连网,您可以requests等获取数据;
(2)也可以连您自己的数据库,具体教程参考如何连数据库;

如何获取研究的目录

Img

如何在研究中读取研究中的csv文件

将csv文件和研究文件放在同一个目录下(不确定的话,直接都放到研究的根目录),直接使用pandas读取

import pandas as pd
pd.read_csv('test.csv')

写入研究及读入回测

import pandas as pd
# python2
from six import StringIO 
# python3
# from six import BytesIO
"""
将回测结果写入研究中,csv文件
"""

# 初始化函数,设定基准等等
def initialize(context):
    # 写入
    df = get_price('000001.XSHE')
    write_file('test_df.csv', str(df))

    # 读入(python2)
    df2 = pd.read_csv(StringIO(read_file('test_df.csv')))
    # df2 = pd.read_csv(BytesIO(read_file('test_df.csv')))
    print(type(df2))
    print(df2)

如何将回测中的数据写到研究中

df = attribute_history('000001.XSHE', 5, '1d') #获取DataFrame表
write_file('from_backtest.csv', df.to_csv(), append=False) #写到文件中

在研究根目录查看文件,勾选需要下载的文件,然后在最上面工具栏点击下载

下载文件,由于官网有限制,如果数据量比较多请使用我们的JQData
Img

每天收盘后,将持仓信息持久化到本地

## 收盘后运行函数  
def after_market_close(context):
    log.info(str('函数运行时间(after_market_close):' str(context.current_dt.time())))
    #得到当天所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录:' str(_trade))
    df = context.portfolio.positions
    write_file('json_test.josn', str(dict(df)))
    log.info('一天结束')
    log.info('##############################################################')

在回测中写及读取pkl文件

pkl文件比较特殊,请尽量保证python2的版本一致,使用pickle模块将数据对象保存到文件并在回测中读取

import cPickle as pickle
df = get_price('600507.XSHG')
content = pickle.dumps(df)  #将数据序列化成pkl格式的字符串
write_file('test.pkl',content)  #储存数据

df = pickle.loads(read_file('test.pkl')) #读取字符串形式的pkl文件
print df

说明:

回测或者模拟交易,默认从研究的根目录读取文件;

回测或者模拟交易保存的文件也默认在研究的根目录中;

不支持excel文件,您可以保存成csv.

读取研究中的excel文件

https://www.joinquant.com/post/3898?tag=algorithm

使用xlrd

import xlrd
excel_content = read_file("asd.xsl")
excel = xlrd.open_workbook(file_contents=excel_content)

使用pandas

import pandas as pd
from six import StringIO
print pd.read_excel(StringIO(read_file('test.xls')))

或者

# https://www.joinquant.com/post/15256?replyId=52139#52139
df = pd.read_excel(StringIO(read_file(fileName)),sheetname=curMonth) #读excel

写入研究及读入回测

import pandas as pd
from six import StringIO
"""
将回测结果写入研究中,csv文件
"""

# 初始化函数,设定基准等等
def initialize(context):
    # 写入
    df = get_price('000001.XSHE')
    write_file('test_df.xlsx', str(df))

    # 读入
    df2 = pd.read_csv(StringIO(read_file('test_df.xlsx')))
    print(type(df2))
    print(df2)

写入沪深300的股票到HS300.stocks.json文件中

import json
write_file('HS300.stocks.json', json.dumps(get_index_stocks('000300.XSHG')))

import pandas as pd
df = read_file('HS300.stocks.json')
print(type(df))
print(df)
print('='*50)

df2= json.loads(df)
print(type(df2))
print(df2)

不能序列化的对象可以转换为dict格式再写入。参见上一条。

全部回复

0/140

达人推荐

量化课程

    移动端课程