1

パンダのデータフレームに対して 1 行ずつ生成しようとしていますが、エラーが発生します。データフレームは、毎日の始値、終値、高値、安値、出来高の情報を含む株価データです。

以下は私のコードです。このクラスは、MySQL データベースからデータを取得します

class HistoricMySQLDataHandler(DataHandler):

def __init__(self, events, symbol_list):
    """
    Initialises the historic data handler by requesting
    a list of symbols.

    Parameters:
    events - The Event Queue.
    symbol_list - A list of symbol strings.
    """
    self.events = events
    self.symbol_list = symbol_list

    self.symbol_data = {}
    self.latest_symbol_data = {}
    self.continue_backtest = True       

    self._connect_MySQL()
def _connect_MySQL(self): #get stock price for symbol s 
    db_host = 'localhost'
    db_user = 'sec_user'
    db_pass = 'XXX'
    db_name = 'securities_master'
    con = mdb.connect(db_host, db_user, db_pass, db_name)
    for s in self.symbol_list:
       sql="SELECT * FROM daily_price where symbol= s
       self.symbol_data[s] = pd.read_sql(sql, con=con, index_col='price_date')"

def _get_new_bar(self, symbol):
    """
    Returns the latest bar from the data feed as a tuple of 
    (sybmbol, datetime, open, low, high, close, volume).
    """

    for row in self.symbol_data[symbol].itertuples():
        yield tuple(symbol, datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S'), 
                    row[15], row[17], row[16], row[18],row[20])

def update_bars(self):
    """
    Pushes the latest bar to the latest_symbol_data structure
    for all symbols in the symbol list.
    """
    for s in self.symbol_list:
        try:
            bar = self._get_new_bar(s).__next__()
        except StopIteration:
            self.continue_backtest = False

メイン関数では:

# Declare the components with respective parameters
symbol_list=["GOOG"]
events=queue.Queue()
bars = HistoricMySQLDataHandler(events,symbol_list)


while True:
# Update the bars (specific backtest code, as opposed to live trading)
   if bars.continue_backtest == True:
      bars.update_bars()
   else:
      break
   time.sleep(1)

データ例:

symbol_data["GOOG"] =             
  price_date id exchange_id ticker instrument name   ...    high_price  low_price close_price adj_close_price  volume                              
  2014-03-27  29        None   GOOG      stock  Alphabet Inc Class C   ...      568.0000   552.9200      558.46          558.46    13100

update_bars関数は次の行に移動するために呼び出されます_get_new_bar(翌日の価格)

私の目的は毎日株価を取得することです(データフレームの行を繰り返します)がself.symbol_data[s]、in_connect_MySQLはデータフレームであり、in_get_new_barはジェネレータであるため、このエラーが発生します

AttributeError:'generator'オブジェクトに属性がありません'itertuples'

誰にもアイデアはありますか?

私はpython 3.6を使用しています。ありがとう

self.symbol_datadictsymbolデータフレームを取得するための文字列キーです。データは株価データです。たとえばself.symbol_data["GOOG"]、始値、安値、高値、終値、出来高を含む各行で、日付ごとの Google の毎日の株価情報インデックスを含むデータフレームを返します。私の目標は、 を使用してこの価格データを毎日繰り返すことyieldです。

_connect_MySQLデータベースからデータを取得します この例では、関数内の s = "GOOG"

4

1 に答える 1