fetch_csv使用
Posted csfreebird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fetch_csv使用相关的知识,希望对你有一定的参考价值。
fetch_csv使用
Table of Contents
1 简述
目标是通过csv文件提供每日推荐股票,然后让algrithm解析csv文件的内容后进行backtest.
2 使用google drive发布csv文件
- Upload file to Google Drive
- Click on it and open with Google Sheets
- Click on File-> Publish to the web 注意使用link而不是embedding
- Click on "Web page" and change to "Comma-separated values (.csv)"
- Click on publish
- Copy link and paste into your algorithm
3 algorithm中读取csv文件
def initialize(context):
fetch_csv('https://docs.google.com/spreadsheets/d/e/2PACX-1vTRI-pBnDl9gAv2TQ4x2fImtU-kcJkhnfncMlF5G4BjZiBJg9Lpm71YVL7gANODitMjv1B05yZrZg_5/pub?output=csv',
date_column = 'date',
date_format = '%Y-%m-%d')
4 解析csv文件
4.1 日期范围需要设置正确
假设csv文件如下, 前面的initialize中已经设置了date_column和date_format帮助解析日期。
date,symbol,recType,close,start,end,X,cash
2018-06-29,MPC,buy,70.16,1530302400,1531598400,0.025,10000
根据实验,algorithm的日期范围需要包含2018-06-29,且当日期>=2018-06-29的时候,就会得到csv文件2018-06-29的行数据
def before_trading_start(context, data):
log.info(len(data.fetcher_assets))
输出日志为:
2018-06-28 20:45 before_trading_start:7 INFO 0
2018-06-29 20:45 before_trading_start:7 INFO 1
2018-07-02 20:45 before_trading_start:7 INFO 1
2018-07-03 20:45 before_trading_start:7 INFO 1
4.2 获取某个字段
目前只能在handle_data中获取
def handle_data(context, data):
for asset in data.fetcher_assets:
print data.current(asset,'recType')
输出结果
2018-06-29 21:32 PRINT buy
2018-06-29 21:33 PRINT buy
2018-06-29 21:34 PRINT buy
2018-06-29 21:35 PRINT buy
2018-06-29 21:36 PRINT buy
2018-06-29 21:37 PRINT buy
这样的效果很不好,需要提升.我们需要得到一个dataframe,而不是这样访问数据.
4.3 通过pre函数获取dataframe
def initialize(context):
fetch_csv('https://docs.google.com/spreadsheets/d/e/2PACX-1vTRI-pBnDl9gAv2TQ4x2fImtU-kcJkhnfncMlF5G4BjZiBJg9Lpm71YVL7gANODitMjv1B05yZrZg_5/pub?output=csv',
pre_func=pre,
date_column = 'date',
date_format = '%Y-%m-%d')
def pre(df):
print df
return df
输出结果为:
1970-01-01 08:00 PRINT date symbol recType close start end X cash
0 2018-06-29 MPC buy 70.16 1530302400 1531598400 0.025 10000
这个数据不错,现在看如何将df对象如何保存,quantopian没有提供直接的方式,但是我们可以用闭包。类似javascript的闭包。
def initialize(context):
fetch_csv('https://docs.google.com/spreadsheets/d/e/2PACX-1vTRI-pBnDl9gAv2TQ4x2fImtU-kcJkhnfncMlF5G4BjZiBJg9Lpm71YVL7gANODitMjv1B05yZrZg_5/pub?output=csv',
pre_func=wrap(context),
date_column = 'date',
date_format = '%Y-%m-%d')
def wrap(context):
context.csvDF = None
def pre(df):
context.csvDF = df
return df
return pre
def before_trading_start(context, data):
"""
每天开市前会被调用,在这里根据时间选择要处理的股票
"""
print context.csvDF
输出结果非常好,每天开市前会调用before_trading_start,context.csvDF已经保存了csv的数据。这样连最开始的日期范围限制都突破了.
2018-06-28 20:45 PRINT date symbol recType close start end X cash \\
0 2018-06-29 MPC buy 70.16 1530302400 1531598400 0.025 10000
dt
0 2018-06-29
2018-06-29 20:45 PRINT date symbol recType close start end X cash \\
0 2018-06-29 MPC buy 70.16 1530302400 1531598400 0.025 10000
dt
0 2018-06-29
2018-07-02 20:45 PRINT date symbol recType close start end X cash \\
0 2018-06-29 MPC buy 70.16 1530302400 1531598400 0.025 10000
dt
0 2018-06-29
2018-07-03 20:45 PRINT date symbol recType close start end X cash \\
0 2018-06-29 MPC buy 70.16 1530302400 1531598400 0.025 10000
dt
0 2018-06-29
Author: dean
Created: 2019-10-05 六 21:10
以上是关于fetch_csv使用的主要内容,如果未能解决你的问题,请参考以下文章