mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 14:54:21 +01:00
Extract DataServerWebsocket back to HFStrategy
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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