2016-11-24 4 views
0

Я пытаюсь использовать технический индикатор (Stochastic), но я получаю сообщение об ошибке утверждения для этой линии:Assertion Ошибка - Pyalgotrade

self.__slow_stoch = stoch.StochasticOscillator(feed[instrument],self.__stoch, 3, self.__slow_d) 

Я использую pyalgotrade запустить торговую стратегию в питоне , Любая идея о том, как это исправить? Я попробовал написать Try/Exception для этой ошибки, но не повезло ... Любые идеи очень ценятся!

from pyalgotrade import strategy 
from pyalgotrade.tools import yahoofinance 
import numpy as np 
import pandas as pd 
#Technical Analysis Libraries 
from pyalgotrade import talibext 
from pyalgotrade.talibext import indicator 
from pyalgotrade.technical import ma 
from pyalgotrade.technical import roc 
from pyalgotrade.technical import rsi 
from talib import MA_Type 
from pyalgotrade.technical import stoch 
import talib 

class MyStrategy(strategy.BacktestingStrategy): 
    def __init__(self, feed, instrument): 
     super(MyStrategy, self).__init__(feed, 1000) 
     self.__position = [] #None 
     self.__instrument = instrument 
     self.setUseAdjustedValues(True) 
     self.__prices = feed[instrument].getPriceDataSeries() 


     self.__stoch = stoch.StochasticOscillator(feed[instrument],5, dSMAPeriod=3, maxLen=1) 
     self.__slow_d = ma.SMA(self.__stoch,3) 
     self.__slow_stoch = stoch.StochasticOscillator(feed[instrument],self.__stoch, 3, self.__slow_d) 


    def onEnterOk(self, position): 
     execInfo = position.getEntryOrder().getExecutionInfo() 
     self.info("BUY at $%.2f" % (execInfo.getPrice())) 

    def onEnterCanceled(self, position): 
     self.__position = None 

    def onExitOk(self, position): 
     execInfo = position.getExitOrder().getExecutionInfo() 
     self.info("SELL at $%.2f" % (execInfo.getPrice())) 
     self.__position = None 

    def onExitCanceled(self, position): 
     # If the exit was canceled, re-submit it. 
     self.__position.exitMarket() 

    def onBars(self, bars): #Verify data here 

     bar = bars[self.__instrument] 
     self.info("%s,%s" % (bar.getClose(),self.__slow_stoch[-1]) 


def run_strategy(inst): 
    # Load the yahoo feed from the CSV file 

    feed = yahoofinance.build_feed([inst],2015,2016, ".") # feed = yahoofinance.build_feed([inst],2015,2016, ".") 

    # Evaluate the strategy with the feed. 
    myStrategy = MyStrategy(feed, inst) 
    myStrategy.run() 
    print "Final portfolio value: $%.2f" % myStrategy.getBroker().getEquity() 


def main(): 
    instruments = ['ddd'] 
    for inst in instruments: 
      run_strategy(inst) 


if __name__ == '__main__': 
     main() 

Код:

self.__stoch = stoch.StochasticOscillator(feed[instrument],5, dSMAPeriod=3, maxLen=1) 
    slow_k = self.__stoch.getD() 
    slow_d = ma.SMA(self.__stoch.getD(), 3) 
    self.__slow_stoch = stoch.StochasticOscillator(feed[instrument],slow_k, dSMAPeriod=slow_d, maxLen=1) 

Сообщение об ошибке:

Traceback (most recent call last): 
    File "algov1.py", line 224, in <module> 
    main() 
    File "algov1.py", line 220, in main 
    run_strategy(inst) 
    File "algov1.py", line 212, in run_strategy 
    myStrategy = MyStrategy(feed, inst) 
    File "algov1.py", line 91, in __init__ 
    self.__slow_stoch = stoch.StochasticOscillator(feed[instrument],slow_k, dSMAPeriod=slow_d, maxLen=1) 
    File "C:\Users\JDOG\Anaconda2\lib\site-packages\pyalgotrade\technical\stoch.py", line 90, in __init__ 
    technical.EventBasedFilter.__init__(self, barDataSeries, SOEventWindow(period, useAdjustedValues), maxLen) 
    File "C:\Users\JDOG\Anaconda2\lib\site-packages\pyalgotrade\technical\stoch.py", line 55, in __init__ 
    technical.EventWindow.__init__(self, period, dtype=object) 
    File "C:\Users\JDOG\Anaconda2\lib\site-packages\pyalgotrade\technical\__init__.py", line 41, in __init__ 
    assert(isinstance(windowSize, int)) 
AssertionError 
+0

Не могли бы вы опубликовать полную проверку ошибок отслеживания ошибок? – gzc

+0

Я обновил проводку с новым кодом и ошибкой. – RageAgainstheMachine

+0

Второй параметр и третий параметр должны быть целыми. – gzc

ответ

1

Это класс определение StochasticOscillator.

class StochasticOscillator(technical.EventBasedFilter): 

    def __init__(self, barDataSeries, period, dSMAPeriod=3, useAdjustedValues=False, maxLen=dataseries.DEFAULT_MAX_LEN): 
     assert dSMAPeriod > 1, "dSMAPeriod must be > 1" 
     assert isinstance(barDataSeries, bards.BarDataSeries), \ 
      "barDataSeries must be a dataseries.bards.BarDataSeries instance" 

     technical.EventBasedFilter.__init__(self, barDataSeries, SOEventWindow(period, useAdjustedValues), maxLen) 
     self.__d = ma.SMA(self, dSMAPeriod, maxLen) 

период и dSMAPeriod оба фиксированные целые числа.

При вызове StochasticOscillator() Python вызывается StochasticOscillator.__init__, автоматически создавайте и передавайте в self, и вы передаете левые параметры с правильным порядком и типом.

Обновление:

См код, dSMAPeriod используется для вычисления D%, что является SMA из K%. Когда dSMAPeriod равно 1, D% равно K%. Поскольку вы действительно хотите установить dSMAPeriod в 1, вы можете перейти в dSMAPeriod = 2, а затем использовать stoch.

+0

жаль, что новобранец. как мне включить это в свой код? класс стохастический осциллятор (technical.EventBasedFilter): Защиту __init __ (я, barDataSeries, период, dSMAPeriod = 3, useAdjustedValues ​​= False, MAXLEN = dataseries.DEFAULT_MAX_LEN): – RageAgainstheMachine

+0

Это определение класса, вы должны передать правильные параметры следующие за '__init__' определение. – gzc

+0

Как бы я включил код, который был у меня таким, который позволяет мне получить медленный сток, когда я его вычисляю, и поэтому я могу просмотреть его в функции onbars в self.info? собственной .__ Сточ = stoch.StochasticOscillator (подача [документ], 5, dSMAPeriod = 3, MaxLen = 1) slow_k = само .__ stoch.getD() slow_d = ma.SMA (само .__ stoch.getD (), 3) self .__ slow_stoch = stoch.StochasticOscillator (feed [instrument], slow_k, dSMAPeriod = slow_d, maxLen = 1) – RageAgainstheMachine

Смежные вопросы