mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-18 22:34:21 +01:00
Extract DataServerWebsocket back to HFStrategy
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
name = 'bfxapi'
|
||||
|
||||
from bfxapi.websockets.LiveWebsocket import LiveBfxWebsocket
|
||||
from bfxapi.websockets.DataServerWebsocket import DataServerWebsocket
|
||||
from bfxapi.websockets.GenericWebsocket import GenericWebsocket
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user