以下代码在python shell中正常工作,显示了feed对象的内容:
from pyalgotrade import strategy
from pyalgotrade.barfeed import yahoofeed
class MyStrategy(strategy.BacktestingStrategy):
def __init__(self, feed, instrument):
strategy.BacktestingStrategy.__init__(self, feed)
self.__instrument = instrument
def onBars(self, bars):
bar = bars[self.__instrument]
self.info(bar.getClose())
feed = yahoofeed.Feed()
feed.addBarsFromCSV("orcl","data/bistampTicker.csv")
myStrategy = MyStrategy(feed, "orcl")
myStrategy.run()
但是,它在Django视图中的执行会导致以下错误:
'function' object has no attribute 'BacktestingStrategy'
其中BacktestingStrategy是在python模块的strategy文件夹内的__ init__.py文件中定义的类,在python路径中。
我对这个问题的理解是django没有读取__ init__.py文件,因此没有正确导入模块(pyalgotrade模块)。
有没有办法告诉Django这样做?
提前致谢并抱歉这个愚蠢的问题。
干杯
答案 0 :(得分:2)
Django只是Python:在普通Python中没有任何事情发生在Django关于模块的阅读中不会发生。
在任何情况下,您对问题的诊断都是错误的:未能读取模块不会给出您看到的错误。错误消息表明函数对象不包含属性TestingStrategy。这意味着您重新定义strategy
的某个地方是一个函数,而不是您最初导入的模块。
答案 1 :(得分:1)
您正在从那里定义的模块strategy
导入函数pyalgotrade
。子函数pyalgotrade.strategy
被此函数隐藏。
可能你想写:
import pyalgotrade.strategy as strategy
在第一行。
答案 2 :(得分:1)
修改库并不是真正解决方案,它只是一个黑客攻击。看看你得到的错误:
'function' object has no attribute 'BacktestingStrategy'
这不是一个导入问题:您正在重新定义strategy
作为函数。不仅如此,我刚刚安装了pyalgotrade
并做了以下工作:
>>> from pyalgotrade import strategy
>>> strategy.BacktestingStrategy
<class 'pyalgotrade.strategy.BacktestingStrategy'>
查看您已导入的任何其他内容,并确保直接拥有所有姓名。
记住,Django只是python;它没有做任何不同的事情,你做错了什么。 (这为你提供了学习东西的绝佳机会!)
答案 3 :(得分:0)
尝试这样做:
from pyalgotrade import strategy
print strategy
让我们知道你得到了什么。