fetch_csv使用

Posted 左手程序右手拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fetch_csv使用相关的知识,希望对你有一定的参考价值。

fetch_csv使用

Table of Contents

1 简述

目标是通过csv文件提供每日推荐股票,然后让algrithm解析csv文件的内容后进行backtest.

2 使用google drive发布csv文件

  1. Upload file to Google Drive
  2. Click on it and open with Google Sheets
  3. Click on File-> Publish to the web 注意使用link而不是embedding
  4. Click on "Web page" and change to "Comma-separated values (.csv)"
  5. Click on publish
  6. 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

Validate

以上是关于fetch_csv使用的主要内容,如果未能解决你的问题,请参考以下文章

fetch_csv使用

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)