请注意区分Python2和Python3
例如read_file,Python2使用from six import StringIO ,Python3使用 from six import BytesIO
投资研究的根目录在哪
https://www.joinquant.com/research
如何将本地的文件上传到投资研究
打开投资研究按照下面的指示完成,上传结束后文件在根目录。
为了保证大家可以正常的使用,我们对文件大小及上传速度有限制,如果文件较大,请使用我们的金融终端在本地研究。
在回测及研究中读取研究中的文件
(1)在官网的回测及研究中读取研究中的数据,请参考下面的回测;
(2)在客户端的回测及研究中读取数据,请参考如何在客户端调用本地的文件
如何在回测及模拟交易中连网获取数据
(1)我们的回测及模拟支持连网,您可以requests等获取数据;
(2)也可以连您自己的数据库,具体教程参考如何连数据库;
如何获取研究的目录
如何在研究中读取研究中的csv文件
将csv文件和研究文件放在同一个目录下(不确定的话,直接都放到研究的根目录),直接使用pandas读取
import pandas as pd
pd.read_csv('test.csv')
写入研究及读入回测
import pandas as pd
from six import StringIO
"""
将回测结果写入研究中,csv文件
"""
def initialize(context):
df = get_price('000001.XSHE')
write_file('test_df.csv', str(df))
df2 = pd.read_csv(StringIO(read_file('test_df.csv')))
print(type(df2))
print(df2)
如何将回测中的数据写到研究中
df = attribute_history('000001.XSHE', 5, '1d')
write_file('from_backtest.csv', df.to_csv(), append=False)
在研究根目录查看文件,勾选需要下载的文件,然后在最上面工具栏点击下载
下载文件,由于官网有限制,如果数据量比较多请使用我们的JQData
每天收盘后,将持仓信息持久化到本地
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)
write_file('test.pkl',content)
df = pickle.loads(read_file('test.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')))
或者
df = pd.read_excel(StringIO(read_file(fileName)),sheetname=curMonth)
写入研究及读入回测
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格式再写入。参见上一条。