Moved files into repo

This commit is contained in:
Jacob Plaster
2018-11-14 12:22:48 +01:00
parent 22d1fe7fdb
commit fb8e7db149
13 changed files with 510 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
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.
'''
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:
self._onCandle(msg)
elif eType == self.WS_TRADE:
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):
data = self._exec_bt_string()
await self.ws.send(data)
async def _onCandle(self, data):
candle = data[3]
await self.onCandleHook(candle)
async def _onTrade(self, data):
trade = data[2]
await self.onTradeHook(trade)