Extract DataServerWebsocket back to HFStrategy

This commit is contained in:
Jacob Plaster
2018-11-19 13:26:13 +00:00
parent 2b48a54603
commit 7c538cd0eb
2 changed files with 1 additions and 79 deletions

View File

@@ -1,4 +1,4 @@
name = 'bfxapi' name = 'bfxapi'
from bfxapi.websockets.LiveWebsocket import LiveBfxWebsocket from bfxapi.websockets.LiveWebsocket import LiveBfxWebsocket
from bfxapi.websockets.DataServerWebsocket import DataServerWebsocket from bfxapi.websockets.GenericWebsocket import GenericWebsocket

View File

@@ -1,78 +0,0 @@
import json
from .GenericWebsocket import GenericWebsocket
class DataServerWebsocket(GenericWebsocket):
'''
Basic websocket client that simply reads data from the DataServer. This instance
of the websocket should only ever be used in backtest mode since it isnt capable
of handling orders.
Events:
- connected: called when a connection is made
- done: fires when the backtest has finished running
'''
WS_END = 'bt.end'
WS_CANDLE = 'bt.candle'
WS_TRADE = 'bt.trade'
WS_START = 'bt.start'
WS_SYNC_START = 'bt.sync.start'
WS_SYNC_END = 'bt.sync.end'
WS_CONNECT = 'connected'
def __init__(self, host='ws://localhost:8899', *args, **kwargs):
super(DataServerWebsocket, self).__init__(host, *args, **kwargs)
def run(self, fromDate, toDate, syncTrades=True, syncCandles=True, tf='1m',
candleFields='*', tradeFields='*', syncMissing=True):
self.fromDate = fromDate
self.toDate = toDate
self.tf = tf
self.sync = syncCandles
self.syncTrades = syncTrades
self.syncCandles = syncCandles
self.syncMissing = syncMissing
self.candleFields = candleFields
self.tradeFields = tradeFields
super(DataServerWebsocket, self).run()
async def on_message(self, message):
self.logger.debug(message)
msg = json.loads(message)
eType = msg[0]
if eType == self.WS_SYNC_START:
self.logger.info("Syncing data with backtest server, please wait...")
elif eType == self.WS_SYNC_END:
self.logger.info("Syncing complete.")
elif eType == self.WS_START:
self.logger.info("Backtest data stream starting...")
elif eType == self.WS_END:
self.logger.info("Backtest data stream complete.")
await self.on_close()
elif eType == self.WS_CANDLE:
await self._onCandle(msg)
elif eType == self.WS_TRADE:
await self._onTrade(msg)
elif eType == self.WS_CONNECT:
await self.on_open()
else:
self.logger.warn('Unknown websocket command: {}'.format(msg[0]))
def _exec_bt_string(self):
data = '["exec.bt", [{}, {}, "{}", "{}", "{}", "{}", "{}", "{}", "{}"]]'.format(
self.fromDate, self.toDate, self.symbol, self.tf, json.dumps(self.syncCandles),
json.dumps(self.syncTrades), self.candleFields, self.tradeFields, json.dumps(self.sync))
return data
async def on_open(self):
self._emit('connected')
data = self._exec_bt_string()
await self.ws.send(data)
async def _onCandle(self, data):
candle = data[3]
self._emit('new_canlde', candle)
async def _onTrade(self, data):
trade = data[2]
self._emit('new_trade', trade)