パンダのデータフレームに対して 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_data
はdict
、symbol
データフレームを取得するための文字列キーです。データは株価データです。たとえばself.symbol_data["GOOG"]
、始値、安値、高値、終値、出来高を含む各行で、日付ごとの Google の毎日の株価情報インデックスを含むデータフレームを返します。私の目標は、 を使用してこの価格データを毎日繰り返すことyield
です。
_connect_MySQL
データベースからデータを取得します この例では、関数内の s = "GOOG"