codaone / dexbot Goto Github PK
View Code? Open in Web Editor NEWThis project forked from xeroc/stakemachine
Trading Bot for the BitShares Decentralized Exchange
License: Other
This project forked from xeroc/stakemachine
Trading Bot for the BitShares Decentralized Exchange
License: Other
Implementation of PKGBUILD for Arch linux
AUR package url: https://aur.archlinux.org/packages/dexbot/
This bot should help any user provide liquidity in any market on the BitShares Exchange free of any additional cost. This has a few implications:
The Worker Proposal itself imposes some restrictions. Since the project is payed for collectively by BTS holders, the work should not benefit some limited group, but the whole: even those who do not use the software! A typical trading (non-market-making) strategy takes available liquidity off the market. This (possibly) benefits the trader in question, but reduces value from the rest; reduced liquidity is reduced value of the market, and thus the platform sustaining it. Therefore, the software cannot provide strategies that don't add liquidity to markets at all times. The ones left are not many.
It can be assumed that no-one will use a Market Making Strategy if it makes a loss. Making a profit will increase the Market Maker's assets and the liquidity he can provide. Therefore all the strategies provided by the software can be described as a "Strategy that attempts to profit by making markets". The different strategies can be classified by how they attempt to make the profit:
These two require almost no assumptions at all about the future. One benefit of these strategies is that they don't necessarily require constant on-time. They can be successfully maintained a few times a day, or even a week. These strategies therefore suit the purpose of the software perfectly. They can be run by users on laptops or desktops.
Many trading strategies that try to predict the future can also be executed by simultaneously making markets. If you think the value of an asset will dip a little and then rise, you can place buy orders and once they have filled place sell orders at a profit. That way they don't reduce liquidity but increase it. However they require software that is always on, thus practically limited to servers. They are also more risky because they rely on predictions.
These strategies will initially be included in the software:
Both strategies will be tailor suited to BitShares. The strategies will be shipped with sane and conservative defaults.
here is a copy of the log and the terminal, the terminal seems to be repeating the same thing over and over so i havnt copied it all:
dexbot.log
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 159, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 159, in process_market
bitshares_instance=self.bitshares
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/cryptokong/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in call
f(*a, **kw)
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/cryptokong/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/cryptokong/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/cryptokong/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/cryptokong/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
Version 0.1.2, run from cli with python3 ./app.py
I created a new worker (Add bot) normally with:
The bot created orders successfully. It crashed when I tried to pause worker with the message: Muistialueen ylitys (luotiin core-tiedosto)
, which apparently translates to segmentation fault.
Next run it started successfully, and on "edit worker" it crashed with the message:
Traceback (most recent call last):
File "/home/marko/localsoftware/DEXBot/dexbot/views/bot_item.py", line 95, in handle_edit_bot
edit_bot_dialog = EditBotView(controller, self.botname, self.config)
File "/home/marko/localsoftware/DEXBot/dexbot/views/edit_bot.py", line 25, in __init__
center_price_dynamic = self.controller.get_target_center_price_dynamic(bot_data)
AttributeError: 'CreateBotController' object has no attribute 'get_target_center_price_dynamic'
Keskeytetty (luotiin core-tiedosto)
Using Archlinux with Gnome. Installed python dependencies manually with --user switch
Make sure to read and understand the purpose of this software before reading this.
This strategy hopes to sell for more than it buys and vice-versa, as much as possible at as much profit as possible. The bigger the difference between buy and sell order the more profit. The more volume the more profit. So far so good.
When the spread is too great very little trading happens. Orders aren't filled and no profit is made.
In order to make any profit according to the strategy, both assets are needed. There needs to be both sell and buy orders. If the price moves enough in one direction, one of the assets can be sold out, and the strategy ceases to function.
Most of the adjustable parameters of this strategy are for either tuning the spread for maximum profit or coping with price movements for keeping assets somewhat balanced. This strategy must constantly react to changes in market conditions (mainly price), so is mostly suited for a computer constantly online, but can be tuned to better survive some downtime.
So let's define the logic:
Examples use the MILK:USD market.
Base Currency: Unit of account and one of the assets to be traded. (Example: USD)
Quote Currency: The "asset of interest" (Example: MILK)
Center Price: A price assumed to be the most accurate reference price for a market, reported as Base Currency (Example: 2.25 USD)
Spread: The combined distance in percents from center price to lowest own sell order and center price to own highest buy order. It can be assumed that a sensible spread is always less than 20%. (Example: 4.5 %)
Offset: An additional variable for helping keep the assets balanced. (Example: 1.115 %)
Relative Order Size: Issue 29. Portion of asset holdings to use for an order. (Example: 10% of USD, 10% of MILK). Note that this will change the actual order size after every filled order. The bigger the Relative Order Size the more profit, but the less resilience in case of downtime or quick price swings.
A sell order is placed at center price + offset + (spread / 2)
with amount Total MILK * Relative Order Size
A buy order is placed at center price + offset - (spread / 2)
with amount of Total USD * Relative Order Size
It should be assumed that the bot isn't constantly online. Every time the situation is checked and found to have changed, orders are simply cancelled and new ones added according to the strategy.
Of the following mechanisms the bot can use only one at a time, so these alternatives should be represented in the GUI with radio buttons.
The user can type in the center price for the strategy to be used. This is suitable for markets where prices are practically stable, like USD:EUR or BitBTC:OPEN.BTC.
Use the last filled order of one's own as the center price. This effectively halves the spread from profit making perspective. It also automatically helps balance the portfolio. This is the strategy used at the moment by ihaywood/dexbot.
This suits markets where prices are mostly discovered elsewhere, and the prices on BitShares are expected to follow with a small lag. For instance BTC:USD prices on Coinbase are likely to be reflected on BitShares. As a byproduct orders might be filled by the bot, which would reduce liquidity. A "Don't Fill Orders" option is necessary.
Excluding own orders. Usually the closest opposite orders are dust orders (insignificant amounts left over from other trades). The center price derived from these orders might or might not represent the actual center price. Issue 30
This bypasses the problem of dust orders. First we figure out at what price we could buy x MILK and at what price we could sell x MILK, then calculate the center price from those prices. This might be more meaningful than the previous method. This method can easily be manipulated in low-participation markets, and a "Don't Fill Orders" option would decrease risk.
This information is from actual trades. The method should exclude dust trades because they would skew the price too much.
All Market Pegged Assets and similar algorithmic assets on the BitShares Blockchain rely on price feeds from witnesses (and others). They are automatically averaged into a single "Feed Price", which can be obtained by the API. This price feed can be used in [SHORT]:[BACK] -markets, where [SHORT]is the MPA and [BACK] is the asset used as collateral.
This helps filter out noise from signal, but adds some lag to the reaction. It is to be used in combination with one of the above mechanisms. It would be nice to have several different tunable parameters for this method.
The problem with estimating center price from other orders on the books is that bots will cascade information without knowing where it is derived from in the first place. A Center Price derived from actual filled orders is probably more relevant information.
In order to find the sweet spot between volume and spread for maximal profit. The user must choose only one of the following methods. Averaging can be used in addition to any one chosen.
The user sets a percentage manually and adjusts it at will.
Since the closest orders get filled first, it's worth trying to be there. If several bots do the same, they will compete to close the spread, which is bad for profits but good for the whole. A minimum spread should be given to avoid zero profit
Find out at what price a certain amount can be bought or sold, calculate the spread from that, and decide own spread accordingly. The amount used should be in relation to one's own order sizes.
This would help filter out noise, and also avoid constand updating of orders for no real reason. It could add some additional stability to the market.
If order size is defined as a certain percentage of portfolio, the strategy will automatically resist massive imbalance. A few additional mechanisms can be used to add bias in either direction.
Increase offset if we have less MILK than USD, to encourage the market to sell us some MILK rather then buy from us.
Several orders placed at defined increments further from the Center Price. Order sizes decrease starting from the middle using: Remaining assets * Relative Order Size
. A good increment is Spread / 2
. This feature adds resilience in case of sudden price spikes or lengthy off-time.
We might assume that a user leaving the defaults is using a laptop and will check the situation once a day. The best way to prepare for price swings while offline is to add staggered orders from -25% to +33% or something similar. So this should be default.
For the Center Price and the Spead, the default method should be the most robust one implemented, verified by actual tests in real markets.
Debian 9:
Running ruamel.yaml-0.15.35/setup.py -q bdist_egg --dist-dir /tmp/easy_install-7nqpukbj/ruamel.yaml-0.15.35/egg-dist-tmp-zzq159uc
sys.argv ['/tmp/easy_install-7nqpukbj/ruamel.yaml-0.15.35/setup.py', '-q', 'bdist_egg', '--dist-dir', '/tmp/easy_install-7nqpukbj/ruamel.yaml-0.15.35/egg-dist-tmp-zzq159uc']
ext/_ruamel_yaml.c:4:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
Install on Debian 9:
Installed /usr/local/lib/python3.5/dist-packages/dexbot-0.1.0-py3.5.egg
Processing dependencies for dexbot==0.1.0
Searching for pyqt5
Reading https://pypi.python.org/simple/pyqt5/
No local packages or working download links found for pyqt5
error: Could not find suitable distribution for Requirement.parse('pyqt5')
dex@Frankfurt-Deb9-2GB:~/DEXBot$ voltron
-su: voltron: command not found
How to fix?
Currently when a bot is removed from the GUI all the orders of the bot account are canceled.
Change it so that only the orders made by the bot are removed.
Implement multi-OS packaging mechanism for:
We will make use of pyinstaller to configure the multi-OS release.
The packaging mechanism should work correctly for each environment using:
$ pyinstaller app.spec
-> DEXBot-gui
$ pyinstaller cli.spec
-> DEXBot-cli
Implement CI and automatic release build using Travis (for OSX & Linux releases) and Appveyor (for the windows release).
One of the most interesting features of the BitShares DEX is the possibility to trade directly between any two assets. Demand for such markets will likely increase in the future. Once Market Makers can easily bootstrap any market, the possibility might even be exposed in the reference client. Remittance is one example where users might have the need to exchange from some smartcoin to another, where neither is one of the current "base" assets. Another example is a cryptocurrency enthusiast who wants to profit from the fluctuation between two promising coins without circulating over BTC or USD.
DEXBot should also allow the Market Maker to provide liquidity in any market.
Ubuntu 17.10
python setup.py install
Writing /tmp/easy_install-7gmvfh06/click-datetime-0.2/setup.cfg
Running click-datetime-0.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-7gmvfh06/click-datetime-0.2/egg-dist-tmp-4pfgk04_
error: [Errno 2] No such file or directory: 'README.md'
~/DEXBot$ ls
app.py app.spec build cli.py config.yml dexbot dexbot.egg-info dist docs hooks LICENSE.txt Makefile MANIFEST.in README.md setup.cfg setup.py
This might be hard to reproduce as you need a force settlement. Maybe with a test function?
I ran the bot successfully for some 6 hours, when an order was filled by Unknown market update type: {'id': '1.4.4546', 'owner': '1.2.594058', 'balance': {'asset_id': '1.3.121', 'amount': 2080000}, 'settlement_date': '2018-04-12T01:22:12'}
. After this the other order was left open and no further actions were made.
In case the user has a local node, there should be a place to enter it. This could be done in a conf file, but if there are other configuration options in the future, it is natural to have this in the GUI.
The Bitshares API doesn't consider currency symbols written in lowercase to be valid symbols.
Because of this, characters written in the quote/base asset input should be converted to uppercase automatically.
Basic buying/selling strategy with user defined values
This is almost the simplest way to get a dynamic price for a market. It will work well in already active markets, but in quiet market it can be easily manipulated.
The bot should keep an eye on the price and reset orders if price has changed more than 1/4 of the spread. A filled order can work as a trigger to recalculate Center Price.
The GUI should have a place where all the logged messages are displayed.
Timestamp, bot name and the message should be displayed on a single log message.
Traceback (most recent call last):
File "/home/hiquanta/Documents/git/DEXBot/dexbot/views/create_worker.py", line 90, in handle_save
if not self.validate_form():
File "/home/hiquanta/Documents/git/DEXBot/dexbot/views/create_worker.py", line 75, in validate_form
if not self.validate_account():
File "/home/hiquanta/Documents/git/DEXBot/dexbot/views/create_worker.py", line 54, in validate_account
return self.controller.is_account_valid(account, private_key)
File "/home/hiquanta/Documents/git/DEXBot/dexbot/controllers/create_worker_controller.py", line 63, in is_account_valid
pubkey = format(PrivateKey(private_key).pubkey, self.bitshares.prefix)
AttributeError: 'BitShares' object has no attribute 'prefix'
Ubuntu 16.04, DEXBot 0.1.12, two Workers.
I paused one Worker (the first). dexbot.log records "Canceling all orders", after which nothing happens. The pointer in in a "clicking hand" over the whole window. Must force window to close, but something still remains running as command prompt doesn't reappear. Here dexbot.info output:
2018-04-12 18:43:44,259 - BTSUSD-2 using account btsusd-2 on unknown - ERROR - Worker initialisation
Traceback (most recent call last):
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 74, in init_workers
view=self.view
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 37, in __init__
self.check_orders()
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 100, in update_orders
returnOrderId="head"
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/market.py", line 436, in buy
tx = self.bitshares.finalizeOp(order, account["name"], "active")
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 382, in broadcast
ret, api="network_broadcast")
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 135, in rpcexec
reply = self.ws.recv()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_core.py", line 300, in recv
opcode, data = self.recv_data()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_core.py", line 317, in recv_data
opcode, frame = self.recv_data_frame(control_frame)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_core.py", line 330, in recv_data_frame
frame = self.recv_frame()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_core.py", line 364, in recv_frame
return self.frame_buffer.recv_frame()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_abnf.py", line 361, in recv_frame
self.recv_header()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_abnf.py", line 309, in recv_header
header = self.recv_strict(2)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_abnf.py", line 396, in recv_strict
bytes_ = self.recv(min(16384, shortage))
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_core.py", line 434, in _recv
return recv(self.sock, bufsize)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/websocket_client-0.47.0-py3.5.egg/websocket/_socket.py", line 81, in recv
bytes_ = sock.recv(bufsize)
KeyboardInterrupt
To be used in the Relative Orders strategy.
In stead of having the order size defined in absolute terms, it should be a percentage of the total balance of the asset in question. The percentage can be set by the user, and 10% can be the default.
The benefits of this are:
For ensuring which version the user is using when reporting bugs and other feedback.
This is based on a short discussion in the community and dev chat. "Bot" refers to the whole software and "Worker" means the individual combination of account, strategy, parameters and history. So the user will run only one Bot but the Bot can contain several Workers.
When using a small spread (0.40%) orders get filled very quickly. It happened that an order was filled, and the bot attempted to cancel the opposite order. The opposite order was filled before the "cancel order" reached the blockchain, and the bot couldn't cancel it.
This can be reproduced easily in an active market (BTS:USD) with a small spread (<0.4%).
Console output:
Error in on_market: Assert Exception: maybe_found != nullptr: Unable to find Object
Traceback (most recent call last):
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 134, in on_market
self.workers[worker_name].onMarketUpdate(data)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in __call__
f(*a, **kw)
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 149, in check_orders
self.update_orders()
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 81, in update_orders
self.cancel_all()
File "/home/dexbotmake/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 54, in rpcexec
return self.rpc.rpcexec(self, payload)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 173, in rpcexec
raise RPCError(ret['error']['message'])
grapheneapi.exceptions.RPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in on_message
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/websocket.py", line 276, in <listcomp>
[getattr(self.events, callbackname)(x) for x in data["params"][1]]
File "/home/dexbotmake/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in __call__
f(*a, **kw)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/notify.py", line 164, in process_market
bitshares_instance=self.bitshares
File "/home/dexbotmake/.local/lib/python3.5/site-packages/Events-0.3-py3.5.egg/events/events.py", line 95, in __call__
f(*a, **kw)
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 136, in on_market
self.workers[worker_name].error_onMarketUpdate(e)
File "/home/dexbotmake/dexbot/dexbot/strategies/relative_orders.py", line 70, in error
self.cancel_all()
File "/home/dexbotmake/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 293, in finalizeOp
return self.txbuffer.broadcast()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 388, in broadcast
raise e
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 386, in broadcast
ret, api="network_broadcast")
File "/home/dexbotmake/.local/lib/python3.5/site-packages/graphenelib-0.6.1-py3.5.egg/grapheneapi/graphenewsrpc.py", line 213, in method
r = self.rpcexec(query)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitsharesapi/bitsharesnoderpc.py", line 64, in rpcexec
raise exceptions.UnhandledRPCError(msg)
bitsharesapi.exceptions.UnhandledRPCError: Assert Exception: maybe_found != nullptr: Unable to find Object
At this point I forced the bot to close:
^CTraceback (most recent call last):
File "/home/dexbotmake/dexbot/dexbot/views/worker_item.py", line 61, in pause_worker
self.main_ctrl.stop_worker(self.worker_name)
File "/home/dexbotmake/dexbot/dexbot/controllers/main_controller.py", line 35, in stop_worker
self.worker_manager.stop(worker_name)
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 169, in stop
self.remove_market(worker_name)
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 194, in remove_market
with self.config_lock:
KeyboardInterrupt
The X11 connection broke (error 1). Did the X11 server die?
Here's the dexbot.log snippet:
2018-04-12 13:08:37,295 - Worker 2 using account dexbot.info on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:08:42,207 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a buy order for 4.733755 USD @ 0.13882062645248552
2018-04-12 13:08:45,785 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a sell order for 46.864547 BTS @ 0.13937702174888825
2018-04-12 13:08:45,939 - Worker 2 using account dexbot.info on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:08:45,962 - Worker 2 using account dexbot.info on BTS/USD - INFO - Canceling all orders
2018-04-12 13:08:51,239 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a buy order for 5.03871 USD @ 0.1388194300564363
2018-04-12 13:08:54,420 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a sell order for 44.6740135 BTS @ 0.13937582055766448
2018-04-12 13:08:57,631 - Worker 1 using account btsusd-2 on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:08:57,653 - Worker 1 using account btsusd-2 on BTS/USD - INFO - Canceling all orders
2018-04-12 13:09:04,200 - Worker 1 using account btsusd-2 on BTS/USD - INFO - Placed a buy order for 23.551810000000003 USD @ 0.13665240179045424
2018-04-12 13:09:09,636 - Worker 1 using account btsusd-2 on BTS/USD - INFO - Placed a sell order for 78.57081500000001 BTS @ 0.13941305637207957
2018-04-12 13:09:09,720 - Worker 2 using account dexbot.info on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:09:09,748 - Worker 2 using account dexbot.info on BTS/USD - INFO - Canceling all orders
2018-04-12 13:09:16,993 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a buy order for 4.7867750000000004 USD @ 0.13778997115947592
2018-04-12 13:09:21,505 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a sell order for 46.488539 BTS @ 0.13834223557294076
2018-04-12 13:09:21,642 - Worker 2 using account dexbot.info on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:09:21,669 - Worker 2 using account dexbot.info on BTS/USD - INFO - Canceling all orders
2018-04-12 13:09:28,272 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a buy order for 5.1081650000000005 USD @ 0.13847404289614598
2018-04-12 13:09:30,148 - Worker 2 using account dexbot.info on BTS/USD - INFO - Placed a sell order for 44.163795 BTS @ 0.13902904908009847
2018-04-12 13:09:30,209 - Worker 1 using account btsusd-2 on BTS/USD - INFO - Canceling all orders
2018-04-12 13:09:30,259 - Worker 2 using account dexbot.info on BTS/USD - INFO - Change detected, updating orders
2018-04-12 13:09:30,287 - Worker 2 using account dexbot.info on BTS/USD - INFO - Canceling all orders
2018-04-12 13:09:36,769 - Worker 2 using account dexbot.info on BTS/USD - INFO - Worker "Worker 2" is disabled
2018-04-12 13:09:36,773 - Worker 2 using account dexbot.info on BTS/USD - INFO - Worker "Worker 2" is disabled
2018-04-12 13:09:36,777 - Worker 2 using account dexbot.info on BTS/USD - INFO - Worker "Worker 2" is disabled
2018-04-12 13:09:36,780 - Worker 2 using account dexbot.info on BTS/USD - INFO - Worker "Worker 2" is disabled
Found this issue related seLain/mattermost_bot#19
Could maybe try newer version of python if that would work for packaging
First I successfully downloaded the latest version of the windows package (DEXBot-win64.zip version 1.0.6) and replaced the 2 executables. Then I manually created the config.yml with the default content:
node: wss://bitshares.openledger.info/ws
workers: {}
After starting the Dexbot-gui.exe and creating a worker, this was the content of the config.yml:
node: wss://bitshares.openledger.info/ws
workers: {Worker 1: {account: xxxxxx, market: SMART/BTC, module: dexbot.strategies.relative_orders,
strategy: Relative Orders, target: {amount: 5.0, center_price: 0.0, center_price_dynamic: true,
spread: 2.0}}}
Now when i start the worker via the play button, i get the following error in the command screen:
Until the packages work as intended or there are native packages, we need at least one installation method on Linux that is guaranteed to work, in order to get users up and running.
After DEXBot has been running for multiple hours, one would want to analyze the trades made. To make that possible in the most simple fashion, would be just to save all trades (under "my trades" section) to a xls/csv file.
Currently pausing the bot only closes the socket connection, it should cancel the bot orders before that.
The bot successfully placed orders on both sides of Center Price, but as one order filled a new one wasn't created. There was sufficient funds.
Message in terminal:
Insufficient buy balance, needed 12.76107892... USD
disabled
disabled
disabled
disabled
...
Market was Base=USD Quote=BTS. Order size 100 (this is apparently BTS and actual order sizes were 50 BTS). The filled order was a sell BTS for USD
, and it was completely filled. There was 99 USD left on the account.
I paused the bot, and it successfully canceled the remaining order. However on resume (play button), only a sell BTS
was created.
Executable created with pyinstaller compiles but crashes on wallet creation.
This is the error message:
Traceback (most recent call last):
File "dexbot/views/create_wallet.py", line 19, in validate_form
File "dexbot/controllers/wallet_controller.py", line 14, in create_wallet
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/wallet.py", line 170, in create
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/wallet.py", line 177, in newWallet
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/storage.py", line 393, in __init__
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/storage.py", line 414, in saveEncrytpedMaster
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/storage.py", line 438, in getEncryptedMaster
File "site-packages/bitshares-0.1.11b0-py3.5.egg/bitshares/aes.py", line 33, in encrypt
File "site-packages/pycryptodome-3.4.7-py3.5-linux-x86_64.egg/Crypto/Cipher/AES.py", line 202, in new
File "site-packages/pycryptodome-3.4.7-py3.5-linux-x86_64.egg/Crypto/Cipher/__init__.py", line 55, in _create_cipher
File "site-packages/pycryptodome-3.4.7-py3.5-linux-x86_64.egg/Crypto/Cipher/_mode_cbc.py", line 247, in _create_cbc_cipher
File "site-packages/pycryptodome-3.4.7-py3.5-linux-x86_64.egg/Crypto/Cipher/_mode_cbc.py", line 95, in __init__
AttributeError: 'NoneType' object has no attribute 'CBC_start_operation'
Aborted (core dumped)
GUI should include basic functionality. It should include the ability to create a single bot with set market, account and strategy.
Had 2 Workers. After a freeze and kill I started the bot and tried to delete the first worker. No success. Terminal output below:
QApplication: invalid style override passed, ignoring it.
Traceback (most recent call last):
File "/home/dexbotmake/dexbot/dexbot/views/worker_item.py", line 92, in remove_widget_dialog
self.remove_widget()
File "/home/dexbotmake/dexbot/dexbot/views/worker_item.py", line 96, in remove_widget
self.main_ctrl.remove_worker(self.worker_name)
File "/home/dexbotmake/dexbot/dexbot/controllers/main_controller.py", line 51, in remove_worker
WorkerInfrastructure.remove_offline_worker(config, worker_name)
File "/home/dexbotmake/dexbot/dexbot/worker.py", line 207, in remove_offline_worker
strategy.purge()
File "/home/dexbotmake/dexbot/dexbot/basestrategy.py", line 272, in purge
self.cancel_all()
File "/home/dexbotmake/dexbot/dexbot/basestrategy.py", line 266, in cancel_all
account=self.account
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 1202, in cancel
return self.finalizeOp(op, account["name"], "active", **kwargs)
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/bitshares.py", line 292, in finalizeOp
self.txbuffer.sign()
File "/home/dexbotmake/.local/lib/python3.5/site-packages/bitshares-0.1.13-py3.5.egg/bitshares/transactionbuilder.py", line 345, in sign
raise MissingKeyError
bitshares.exceptions.MissingKeyError
After this I successfully deleted the second Worker and tried the first again with no success. It should probably be noted that I had just wiped the wallet with uptick wipewallet
im getting the following, anyone have any ideas
scrypt-1.2.1/libcperciva/crypto/crypto_aes.c(6): fatal error C1083: Cannot open include file: 'openssl/aes.h': No such file or directory
error: Setup script exited with error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe' failed with exit status 2
Because it is widely know by that name. "Buy and Sell orders Relative to assumed center price".
Traceback (most recent call last):
File "/home/hiquanta/.local/bin/dexbot-gui", line 11, in
load_entry_point('dexbot==0.1.13', 'console_scripts', 'dexbot-gui')()
File "/home/hiquanta/.local/lib/python3.6/site-packages/dexbot-0.1.13-py3.6.egg/dexbot/gui.py", line 37, in main
File "/home/hiquanta/.local/lib/python3.6/site-packages/dexbot-0.1.13-py3.6.egg/dexbot/gui.py", line 18, in init
TypeError: 'NoneType' object is not subscriptable
Have a separate page for program-wide configuration. To begin with this is just for issue #47 , but in the future it would contain other options also.
The easiest fix for this is to just remove the private key from the database when a worker is removed in the GUI.
This should be temporal fix, later we should add a key/account manager in the GUI
The CLI version can be for now since the keys can be managed in it with uptick.
In Create bot window change Center Price and Amount bot parameters fields decimal points to 8
Currently the bot only quietly disables itself and doesn't let the user know that an error has occurred in the GUI version.
The GUI should use the notice dialog to notify the user of all the log.critical errors.
There are several dependencies that must be manually installed with pip
because the compile script does not detect the dependencies installed with the system's package manager.
I am trying to compile the code in Xubuntu 16.04 LTS, but after seeing problem #13, I think this is common in distributions based on Debian.
These problems are also detected in xeroc/stakemachine repository.
Dependencies detected so far:
One possible solution is to include pip3 install --user PACKAGES
in the compile script.
Using the first in first out (FIFO) model, we can calculate the profit as "positions close". A position opens when the trader buys an asset and closes when he sells it all. The difference is profit. Using this model in traditional markets is simple, because a position is considered open as long as the trader holds the quote asset and he is expected to close it sooner or later. In crypto it's a little different, as the trader might want to accumulate also quote asset, never to actually "close" the position.
Let's have two variables:
If our first trade sells 100 USD and buys 800 BTS, the Base_surplus variable would be -100 and the quote_surplus would be 800. Then our next trade buys 102 USD and sells 790 BTS, after which base_surplus=2 and quote_surplus=10.
We then report profit by converting both to base asset using latest price and summing up.
All states should be recorded, so we can calculate profit over different time periods (24h/7d/30d/365d).
Account total value should also be recorded simultaneously, because then we can calculate and report relative profit over the same time periods.
The value of generated profit is calculated at the price of the time of calculation, even though the profit may have been made at a completely different point price. In this case, capital gains will be attributed to the bot even no profit has been made. Also the opposite is true. This will give the user a wrong impression about the profitability, and he might make unnecessary adjustments or choose not to adjust even if there had been reason to do so.
Add a feature that allows editing bots
When creating and editing the relative orders strategy user should not be allowed to input 0 as the amount
Make sure to read and understand the purpose of this software before reading this.
This is a strategy well suited for computers inconsistently online - as it never makes a loss (depends on how it's calculated), but only suffers from decreased performance when offline. The essence of the strategy is to harvest profit from volatility. It always has an order waiting to be filled no matter which direction the price moves and how far it moves. When an order fills, the idea is to use gained funds to place an opposite order at a profit. So if a sell order is filled, a buy order is placed at x% cheaper.
In order to continue making profit from volatility, there should always be at least one order left on both sides. If the price moves too much in one direction, one of the assets can be sold out, and the strategy ceases to function. Therefore orders must be spread over a range that can be expected to never be exceeded. The wider the range, the smaller the order size or the greater the increment.
Because the profit of each trade is small, the power of this strategy comes from the fact that it never makes a loss (sells at a loss), but makes lots of small profits. Even taken as separate, the profits are meaningful, but the real power comes by reinvesting profits to get a compounding effect.
Apart from the price range, most methods and parameters of this strategy will result in more profit or less profit. It can't be forced to make a loss.
Initiate strategy by spreading buy and sell orders at 5% increments and a 10% difference between lowest sell and highest buy orders, over a range of -99% to +10,000%. Let order size increase by sqrt(1.05) from lowest to highest. When an order fills (partially or fully) use gained funds to add a new order to opposite side according to initial plan. Let profits accumulate.
Examples use the MILK:USD market.
Base Currency: Unit of account and one of the assets to be traded. (Example: USD)
Quote Currency: The "asset of interest" (Example: MILK)
Initial Center Price: A price assumed to be the most accurate reference price for a market, reported as Base Currency (Example: 2.25 USD)
Range Minimum: How low can the price of Quote Asset be expected to ever go (Example: 0.01 USD)
Range Maximum: How high a price of the Quote Asset do we want to prepare for (Example: 100 USD)
Increment: At what intervals are orders made to fill the range (Example 0.5 %)
Spread: How much higher should the lowest sell price be compared to highest buy price (Example: 1.8 %. Another example: 5,000 %)
Reinvest Percentage: How much of profit to reinvest (Example: 50%)
Profit Bias: How much of the collected profit should be in Quote Asset (Example: 100%)
We might assume that a user leaving the defaults is using a laptop and will check the situation once a week. Bigger increments and bigger spread will result in fewer trades, but in significantly more profit per trade. The optimum would be two opposite trades per week. Maybe a 10% increment and 20% spread would work. With a 100x - infinite range, two opposite trades would result in about 2% profit.
Implement the most simple possible viable version of Staggered Orders. If possible it should be such that the methods for determining each parameter can be chosen by the user when configuring the strategy -although there will only be one choice per parameter to begin with (so the user explicitly selects the only possible choice). Later on the strategy can be enhanced with multiple different methods for each parameter, making the strategy flexible and more dynamic, allowing the user to fine-tune for more profit.
SPREAD: How much profit to make per order; minimum difference between lowest sell and highest buy price. Can be input as a percentage, and means how much higher the lowest sell price is than the highest buy price. (Examples: 2.8%, 20%, 5000%). Default value 5%.
INCREMENT: At which intervals should order be placed to fill the whole range. Input as a percentage. Default value 1%.
LOWER_BOUND: What is the lowest price of MILK the user wants to prepare for. (Example: 0.1 USD). Default value 0.00000001
UPPER_BOUND: What is the highest price of MILK the user wants to prepare for. (Example: 100 USD). Default value 1,000,000,000.
This might be best done by iterating until desired values are reached.
CENTER_PRICE / sqrt( 1 + SPREAD )
CENTER_PRICE * sqrt( 1 + SPREAD)
INCREMENT
. (With a 5% increment you should get balance * 0.05
). Assign the result as the order size of the order closest to center price. Calculate and assign the next order size by dividing previous order size by sqrt( 1 + INCREMENT)
. Do this until an amount is defined for each order (price point) both ways. Sum up all orders for both sides separately. Calculate ratio: total_asset_balance / previously_calculated_orders_sum
. Since there are two assets, take the results and increase order sizes on both sides by the smaller of calculated ratios. Now we should end up with a plan for a symmetric market strategy, which makes full use of the the more restricting balance of both assets.I expect it to be the easiest to reinvest profits, so I proceed with that assumption.
Whatever funds are aquired when orders fill, place a new order with all the funds (If asset it BTS leave at least 1 BTS for fee's) at a SPREAD
profit:
filled order price / ( 1 + SPREAD)
.filled order price * ( 1 + SPREAD)
.That's about it if the bot can process one filled order at a time. What still needs to be thought out is if several orders fill at the same time or if the bot is offline for a while and several orders fill before getting back.
Over time this strategy as such will reallocate orders very unevenly over the range where trades have happened. It is unclear whether this is good or not. Future enhancements will include mechanisms to even out order sizes and distribute profits more evenly over several nearby orders.
What also needs to be thought out is the excess funds after allocating "all". If there are additional funds after the strategy is initiated, the defined logic will allocate all excess funds opposite to the first filled order. That isn't desirable. Could we somehow let the user know how much of each asset the strategy needs according to the values he has input? EDIT: We decided to inform the user at time of creating Worker about how much of each asset the strategy needs. The user must tune the parameters to suit his balances, and send the account the necessary funds.
CLI and GUI should have their own separate binary download files.
This will make the download size much smaller and most people aren't going to use both CLI and the GUI.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.