2

次のコードは Python シェルで正常に動作し、フィード オブジェクトのコンテンツを表示します。

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にそうするように指示する方法はありますか?

事前に感謝し、初歩的な質問で申し訳ありません。

乾杯

4

4 に答える 4

2

Django は単なる Python です。モジュールの読み取りに関して、Django で発生しないことは、プレーンな Python で発生することはありません。

いずれにせよ、問題の診断は間違っています。モジュールを読み取れなくても、表示されるエラーは発生しません。エラー メッセージには、関数オブジェクトに TestingStrategy 属性が含まれていないことが示されています。strategyこれは、最初にインポートしたモジュールではなく、どこかで関数として再定義したことを意味します。

于 2014-08-27T18:07:32.653 に答える
1

ライブラリを変更することは実際には解決策ではなく、単なるハックです。あなたが得ているエラーを見てください:

'function' object has no attribute 'BacktestingStrategy'

これはインポートの問題ではありませんstrategy。関数として再定義している場所です。それだけでなくpyalgotrade、問題なく次のことをインストールして実行しました。

>>> from pyalgotrade import strategy
>>> strategy.BacktestingStrategy
<class 'pyalgotrade.strategy.BacktestingStrategy'>

インポートした他のものを見て、すべての名前が正しいことを確認してください。

Django は単なる python であることを思い出してください。それは何か違うことをしているわけではありません。あなたは何か間違ったことをしています。(何かを学ぶ絶好の機会です!)

于 2014-08-27T18:52:12.843 に答える
0

これを試してください:

from pyalgotrade import strategy
print strategy

そして、あなたが得たものを私たちに知らせてください。

于 2014-08-30T01:05:20.517 に答える