7

我正在尝试使用PyAlogoTrade的事件探查器

但是我不想使用来自yahoo!finance的数据,我想使用自己的但不知道如何解析,CSV格式为:

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

完整CSV的在这里

我想做类似的事情:

def main(plot):
    instruments = ["AA", "AES", "AIG"]
    feed = yahoofinance.build_feed(instruments, 2008, 2009, ".")

然后yahoofinance.build_feed(instruments, 2008, 2009, ".")用我的替换CSV

我试过了:

import csv

with open( 'FinexBTCDaily.csv', 'rb' ) as csvfile:
     data = csv.reader( csvfile )

def main( plot ):
    feed = data

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

4

3 回答 3

3

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

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

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

于 2016-05-25T10:52:01.860 回答
3

步骤 A:GenericBarFeed在课堂上遵循 PyAlgoTrade 文档

在此链接上,请参阅v0.16 中课程addBarsFromCSV()CSV部分BarFeed

在此链接上,请参阅v0.17 中课程addBarsFromCSV()CSV部分BarFeed

Note

- CSV 文件的第一行必须有列名。
- 如果该Adj Close列为空,则可以。
- 使用多个仪器时:
--- 如果加载的所有仪器都在同一时区,则可能未指定时区参数。
--- 如果加载的任何仪器在不同的时区,则应设置时区参数。 从 CSV 格式的文件中加载给定工具的条形图。仪器在棒料中注册。– 仪器标识符。– CSV 文件的路径。– 用于本地化条的时区。检查。

addBarsFromCSV( instrument, path, timezone = None )


Parameters:
(string) instrument
(string) path
(pytz) timezone
pyalgotrade.marketsession


下一步:
ABarFeed从具有以下格式的 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
                                                                }
                                            )
于 2016-05-04T11:45:04.720 回答
0

您可以使用pyalgotrade.barfeed.addBarsFromSequence列表理解从 CSV 逐行/逐条输入数据。基本上,您从每一行创建一个条形图,将 OHLCV 作为初始化参数传递,并在字典中传递带有附加数据的额外列。您可以尝试这样的事情(包含所有必需的导入):

data = pd.DataFrame(index=pd.date_range(start='2021-11-01', end='2021-11-05'), columns=['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'ExtraCol1', 'ExtraCol3', 'ExtraCol4', 'ExtraCol5'], data=np.random.rand(5, 10))
feed = yahoofeed.Feed()
feed.addBarsFromSequence('instrumentID', data.index.map(lambda i:
        BasicBar(
            i,      
            data.loc[i, 'Open'],
            data.loc[i, 'High'],            
            data.loc[i, 'Low'],             
            data.loc[i, 'Close'],           
            data.loc[i, 'Volume'],          
            data.loc[i, 'Adj Close'],           
            Frequency.DAY,        
            data.loc[i, 'ExtraCol1':].to_dict())    
).values)

输入数据框是使用随机值创建的,以使该示例更易于重现,但鉴于使用了有效的列名,将条形添加到提要中的部分对于来自 CSV 的数据框的工作方式应该相同。

于 2021-11-21T13:31:01.250 回答