-2

我尝试使用 Pyalgotrade 库中的列表函数在 python 中编写随机振荡器。

我的代码如下:

from pyalgotrade.tools import yahoofinance
from pyalgotrade import strategy
from pyalgotrade.barfeed import yahoofeed
from pyalgotrade.technical import stoch
from pyalgotrade import dataseries
from pyalgotrade.technical import ma
from pyalgotrade import technical
from pyalgotrade.technical import highlow
from pyalgotrade import bar
from pyalgotrade.talibext import indicator
import numpy
import talib

class MyStrategy(strategy.BacktestingStrategy):
    def __init__(self, feed, instrument):
        strategy.BacktestingStrategy.__init__(self, feed)  
        self.__instrument = instrument

    def onBars(self, bars):

        barDs = self.getFeed().getDataSeries("002389.SZ")

        self.__stoch = indicator.STOCH(barDs, 20, 3, 3)

        bar = bars[self.__instrument]
        self.info("%0.2f, %0.2f" % (bar.getClose(), self.__stoch[-1]))

# Downdload then Load the yahoo feed from the CSV file
yahoofinance.download_daily_bars('002389.SZ', 2013, '002389.csv')
feed = yahoofeed.Feed()
feed.addBarsFromCSV("002389.SZ", "002389.csv")

# Evaluate the strategy with the feed's bars.
myStrategy = MyStrategy(feed, "002389.SZ")
myStrategy.run()

我得到了这样的错误:

  File "/Users/johnhenry/Desktop/simple_strategy.py", line 46, in onBars
    self.info("%0.2f, %0.2f" % (bar.getClose(), self.__stoch[-1]))
TypeError: float argument required, not numpy.ndarray

随机:

pyalgotrade.talibext.indicator.STOCH(barDs,计数,fastk_period=-2147483648,slowk_period=-2147483648,slowk_matype=0,slowd_period=-2147483648,slowd_matype=0)

4

3 回答 3

0

要么 要么bar.getClose()正在self.__stoch[-1]返回一段numpy.ndarray时间 两者都应该返回floats。

于 2014-04-10T14:50:37.213 回答
0

就是字符串格式化操作,,,%就行了

self.info("%0.2f, %0.2f" % (bar.getClose(), self.__stoch[-1]))

是有希望的%0.2f标量,但两者之一(bar.getClose()self.__stoch[-1])是一个矩阵。

您可以将格式化字符串更改为期望字符串,只要它具有可打印的形式,它将接受任何 Python 对象:

self.info("%s, %s" % (bar.getClose(), self.__stoch[-1]))
于 2014-04-10T14:52:34.383 回答
0

问题是您正在尝试将 talibext 指标用作数据序列,但事实并非如此。

我认为你必须使用:

self.__stoch[0][-1]

获取最后一个 %K 值,并且:

self.__stoch[1][-1]

获取最后一个 %D 值。

我建议您改用 pyalgotrade.technical.stoch.StochasticOscillator,它实际上表现得像一个数据序列,您将能够:

self.__stoch[-1]

或者

self.__stoch.getD()[-1]

请记住,在这种情况下,您只需构建 StochasticOscillator 一次。

于 2014-04-11T23:51:02.457 回答