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
我想做类似的事情:
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
但它会抛出属性错误。任何想法如何做到这一点?
答案 0 :(得分:2)
GenericBarFeed
类 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
您的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
这也允许您处理日内数据并在需要时清理数据,例如您的时间戳。
当然,另一种可能性是解析您的文件并将其保存,因此它看起来像是一个雅虎订阅源。在您的情况下,您必须调整列和时间戳。