PyAlgoTrade 学习笔记(一)

来源:互联网 发布:js表单验证代码大全 编辑:程序博客网 时间:2024/05/18 02:45

PyAlgoTrade的主要目的是帮助人们测试其交易策略。
PyAlgoTrade有六大组件:

  • Strategies策略
  • Feeds数据源
  • Brokers经纪商
  • DataSeries数据序列
  • Technicals指标计算
  • Optimizer优化

Strategies

    定义的实现交易逻辑的类:何时买、何时卖,等等

Feeds

    These are data providing abstractions. 例如,你可以使用CSV数据源从一个格式化后的csv(以逗号分割)文件中加载数据推送给策略。    数据源不仅限于bars。例如,可以利用Twitter数据源将Twitter的事件信息转化为交易决策(译者注:事件驱动)。

Brokers

    经纪商模块负责执行订单。

DataSeries

    DataSeries 是用于管理时间序列的抽象类

Technicals

    这是你用来对DataSeries进行计算的一组过滤(指标)器。 例如简单移动平均线(SMA),相对强弱指标(RSI)等. 这些过滤(指标)器被建模为DataSeries 的装饰器。

Optimizer

    这是能让你在不同电脑之间、或多进程、或二者结合以加快回测效率的一组类。

Feeds--Bar数据来源
PyAlgoTrade提供了四种权威的数据来源和一种自定义的数据来源。

一、自定义数据来源

一个从CSV文件中加载的BarFeed具有以下

Date Time,Open,High,Low,Close,Volume,Adj Close2013-01-01 13:59:00,13.51001,13.56,13.51,13.56,273.88014126,13.51
class pyalgotrade.barfeed.csvfeed.BarFeed(frequency, maxLen=1024)

注意:

  • CSV文件的第一行 必须 是列名。
  • 复权收盘价 列允许为空。

以上数据来源类都有如下方法:

addBarsFromCSV(instrument, path, timezone=None)

为指定的品种从格式化后的CSV文件中加载bars,同时在bar数据源中注册品种

参数:

  • instrument (string.) – 品种标识。
  • path (string.) – CSV文件的路径
  • timezone (A pytz timezone.) – The timezone to use to localize bars.
    详情 pyalgotrade.marketsession.

举例:

from pyalgotrade.barfeed import csvfeedfreed=csvfeed.BarFeed()#"orcl"是品种标示"dat/ORCL-2000.csv"是文件路径feed.addBarsFromCSV("orcl", "dat/ORCL-2000.csv")

csv中还有个方法,可以对文件的时间进行格式化。

class pyalgotrade.feed.csvfeed.Feed(dateTimeColumn, dateTimeFormat, converter=None, delimiter=', ', timezone=None, maxLen=1024)

参数:

  • dateTimeColumn (string.) – 带有datetime列的列名.
  • dateTimeFormat (string.) – datetime的转换格式. datetime.datetime.strptime 将用它对该列进行格式转换.
  • converter (function.) – 一个有两个参数(列名和值)的转换函数。它将转换字符串到其他格式。默认转换为float,如果转换失败则返回string原值。
  • delimiter (string.) – 字符串分隔符.
  • maxLen (int.) –当队列已满,一旦添加新的条目进来,将会在相反位置删除对应数量的条目。具体详见pyalgotrade.dataseries.DataSeries

示例如下

一个带有以下格式的文件

Date,USD,GBP,EUR2013-09-29,1333.0,831.203,986.752013-09-22,1349.25,842.755,997.6712013-09-15,1318.5,831.546,993.9692013-09-08,1387.0,886.885,1052.911...

像这样引入并使用:

from pyalgotrade.feed import csvfeedfeed = csvfeed.Feed("Date", "%Y-%m-%d")feed.addValuesFromCSV("quandl_gold_2.csv")for dateTime, value in feed:    print(dateTime, value)

输出结果:

1968-04-21 00:00:00 {'USD': 37.65, 'GBP': 15.6833, 'EUR': ''}1968-04-28 00:00:00 {'USD': 38.65, 'GBP': 16.1271, 'EUR': ''}1968-05-05 00:00:00 {'USD': 39.1, 'GBP': 16.3188, 'EUR': ''}1968-05-12 00:00:00 {'USD': 39.6, 'GBP': 16.5625, 'EUR': ''}1968-05-19 00:00:00 {'USD': 41.5, 'GBP': 17.3958, 'EUR': ''}1968-05-26 00:00:00 {'USD': 41.75, 'GBP': 17.5104, 'EUR': ''}1968-06-02 00:00:00 {'USD': 41.95, 'GBP': 17.6, 'EUR': ''}1968-06-09 00:00:00 {'USD': 41.25, 'GBP': 17.3042, 'EUR': ''}...2013-07-28 00:00:00 {'USD': 1331.0, 'GBP': 864.23, 'EUR': 1001.505}2013-08-04 00:00:00 {'USD': 1309.25, 'GBP': 858.637, 'EUR': 986.921}2013-08-11 00:00:00 {'USD': 1309.0, 'GBP': 843.156, 'EUR': 979.79}2013-08-18 00:00:00 {'USD': 1369.25, 'GBP': 875.424, 'EUR': 1024.964}2013-08-25 00:00:00 {'USD': 1377.5, 'GBP': 885.738, 'EUR': 1030.6}2013-09-01 00:00:00 {'USD': 1394.75, 'GBP': 901.292, 'EUR': 1055.749}2013-09-08 00:00:00 {'USD': 1387.0, 'GBP': 886.885, 'EUR': 1052.911}2013-09-15 00:00:00 {'USD': 1318.5, 'GBP': 831.546, 'EUR': 993.969}2013-09-22 00:00:00 {'USD': 1349.25, 'GBP': 842.755, 'EUR': 997.671}

二、Yahoo! Finance
该数据文件来源于雅虎金融,其频率只支持日内和周内数据。

class pyalgotrade.barfeed.yahoofeed.Feed(frequency=86400,           timezone=None, maxLen=1024)
  • frequency – bars的频率. 只支持 pyalgotrade.bar.Frequency.DAY 或 pyalgotrade.bar.Frequency.WEEK 类型
  • timezone (A pytz timezone.) – 默认情况下使用bars自身的时区. 详见 pyalgotrade.marketsession.(主要有;NASDAQ、NYSE、USEquities、MERVAL、BOVESPA、FTSE、TSE)。

三、Google Finance
加载下载自Google Finance的CSV文件中的bars。

 class pyalgotrade.barfeed.googlefeed.Feed(frequency=86400, timezone=None, maxLen=1024)
  • frequency – bars的频率. 当前只支持 pyalgotrade.bar.Frequency.DAY 类型。

四、Quandl
加载下载自Quandl的CSV文件中的bars

 class pyalgotrade.barfeed.quandlfeed.Feed(frequency=86400, timezone=None, maxLen=1024)
  • frequency – bars的频率. 只支持 pyalgotrade.bar.Frequency.DAY 或 pyalgotrade.bar.Frequency.WEEK 的类型

五、Ninja Trader
加载从NinjaTrader导出的CSV文件中的bars

class pyalgotrade.barfeed.ninjatraderfeed.Feed(frequency, timezone=None, maxLen=1024)
  • frequency – bars的频率. 只支持 pyalgotrade.bar.Frequency.MINUTE 或
    pyalgotrade.bar.Frequency.DAY。即支持分时数据和日内数据。
0 0
原创粉丝点击