如何将自己的数据输入PyAlgoTrade?

时间:2016-05-03 12:11:11

标签: csv algorithmic-trading quantitative-finance pyalgotrade back-testing

I'm trying to use PyAlogoTrade's event profiler

但是,我不想使用 yahoo!finance 中的数据,我想使用自己的数据,但无法弄清楚如何解析在 -- Boost version: 1.46.1 -- Boost headers were found here: /usr/include -- geometry.hpp found here: MYVAR-NOTFOUND -- Boost version: 1.46.1 -- Found the following Boost libraries: -- thread 中,格式为:

CSV

The complete CSV is here

我想做类似的事情:

Timestamp      Low  Open   Close       High        BTC_vol     USD_vol       [8]      [9]
2013-11-23 00  800  860    847.666666  886.876543  853.833333   6195.334452  5248330  0
2013-11-24 00  745  847.5  815.01      860         831.255     10785.94131   8680720  0

然后将def main(plot): instruments = ["AA", "AES", "AIG"] feed = yahoofinance.build_feed(instruments, 2008, 2009, ".") 替换为yahoofinance.build_feed(instruments, 2008, 2009, ".")

我试过了:

CSV

但它会抛出属性错误。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:2)

步骤A:关注 GenericBarFeed

上的PyAlgoTrade文档

On this link see the addBarsFromCSV() in CSV section of the BarFeed class in v0.16

On this link see the addBarsFromCSV() in CSV section of the BarFeed class in v0.17

  

<强> Note

   - CSV文件必须在第一行中包含列名    - 如果Adj Close列为空,则可以    - 使用多种仪器时:
  ---如果加载的所有仪器都在同一时区,则可能不指定时区参数   ---如果加载的任何仪器位于不同的时区,则应设置时区参数。

   addBarsFromCSV( instrument, path, timezone = None )
  从CSV格式的文件中加载给定乐器的小节。仪器在料柱中注册。

  的 Parameters:
  (string) instrument - 仪器标识符。
  (string) path - CSV文件的路径   (pytz) timezone - 用于本地化栏的时区。
选中 pyalgotrade.marketsession

下一步:
BarFeed 从CSV文件加载具有以下格式的栏:

Date       Time,    Open,    High, Low,  Close,   Volume,      Adj Close
2013-01-01 13:59:00,13.51001,13.56,13.51,13.56789,273.88014126,13.51001

步骤B:实施文档化的CSV文件预格式化

您的CSV数据需要一点理智(之前可以在 PyAlgoTrade 方法中使用),但是它是可行的,您可以创建一个简单的转换器可以手动使用,也可以使用功能强大的 numpy.genfromtxt() lambda- converters设施。

此示例代码仅用于说明目的,以便立即查看 converters 对您自己的转换的权力,因为CSV结构不同。

with  open( getCsvFileNAME( ... ), "r" ) as aFH:
                         numpy.genfromtxt(  aFH,
                                            skip_header     = 1,    # Ref. pyalgotrade
                                            delimiter       = ",",
                                            #                                v     v       v       v       v       v 
                                            #                       2011.08.30,12:00,1791.20,1792.60,1787.60,1789.60,835
                                            #                       2011.08.30,13:00,1789.70,1794.30,1788.70,1792.60,550
                                            #                       2011.08.30,14:00,1792.70,1816.70,1790.20,1812.10,1222
                                            #                       2011.08.30,15:00,1812.20,1831.50,1811.90,1824.70,2373
                                            #                       2011.08.30,16:00,1824.80,1828.10,1813.70,1817.90,2215
                                            converters      = { 0:  lambda aString: mPlotDATEs.date2num( datetime.datetime.strptime( aString, "%Y.%m.%d" ) ),       #_______________________________________asFloat ( 1.0, +++ )
                                                                1:  lambda aString: ( ( int( aString[0:2] ) * 60 + int( aString[3:] ) ) / 60. / 24. )               #           ( 15*60 + 00 ) / 60. / 24.__asFloat < 0.0, 1.0 )
                                                                #                                    HH:                       :MM                                                HH      MM
                                                                }
                                            )

答案 1 :(得分:1)

我建议您创建自己的Rowparser和Feed,这比听起来容易得多,请看一下:yahoofeed

这也允许您处理日内数据并在需要时清理数据,例如您的时间戳。

当然,另一种可能性是解析您的文件并将其保存,因此它看起来像是一个雅虎订阅源。在您的情况下,您必须调整列和时间戳。