Hi team,
I'm trying to build my own feed.DataBase Class for my websocket service. But I'm stuck right now.
I can run the Class and print my data correctly, but I'm not able to set the lines for my data.
It always raise the error when I tried to assign the data.
Here's the code I've done, can anyone help to give a example how to set the web socket data? thanks
rom datetime import datetime
import backtrader as bt
import websocket
import logging
import json
class MySocketData(bt.feeds.DataBase):
def __init__(self):
self.ws = None
self.data = []
def islive(self):
return True
def start(self):
self.ws = websocket.WebSocketApp('MY_IP:PORT',
on_open=self.on_open,
on_message=self.next)
print("start run forever!!!!")
self.ws.run_forever()
def stop(self):
self.ws.close()
def on_open(self, ws):
logging.info('connected the data stream')
ws.send('This is a test message from NB yo man!')
def next(self, ws, message):
logging.info(f'received: {message}')
data = json.loads(message)
self.data.append(data)
if len(self.data) > 0:
print(datetime.strptime(self.data[0]['日期'], r'%Y/%m/%d %H:%M:%S'))
dt = bt.date2num(datetime.strptime(self.data[0]['日期'], r'%Y/%m/%d %H:%M:%S'))
print(self.lines.datetime)
self.l.datetime[0] = dt
self.l.open[0] = self.data[0]['KBAR']
self.l.high[0] = self.data[0]['KBAR']
self.l.low[0] = self.data[0]['KBAR']
self.l.close[0] = self.data[0]['KBAR']
if __name__ == '__main__':
datafeed = MySocketData()
datafeed.start()