Skip to content
This repository has been archived by the owner on Feb 15, 2022. It is now read-only.

Bitfinex WebSockets API + Fix postonly not triggering re-buy #458

Merged
merged 27 commits into from
Aug 14, 2017
Merged

Bitfinex WebSockets API + Fix postonly not triggering re-buy #458

merged 27 commits into from
Aug 14, 2017

Conversation

crubb
Copy link
Contributor

@crubb crubb commented Aug 8, 2017

Hey,

I ported the bitfinex API to websockets. Backfilling is done using REST. Have been using it for about a week or more.

Also fixed postonly cancels to actually trigger re-buys ;)

Best regards,
Christian

Check for balance error also on checkOrder (e.g. bitfinex, using websockets, reports the error later than other exchanges)
Copy link
Owner

@DeviaVir DeviaVir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, will wait for more eyes from i.e. @nedievas

@nedievas
Copy link
Contributor

nedievas commented Aug 8, 2017

I'd like more time to read it. Thanks.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

After few tests in the morning, I found balances not working as it should: asset and currency on hold have 0 values. I'll try to test more.

@@ -282,6 +282,7 @@ module.exports = function container (get, set, clear) {
if (err) return cb(err)
s.api_order = api_order
order.status = api_order.status
if (api_order.reject_reason) order.reject_reason = api_order.reject_reason
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need of this line. Let's keep to overall code structure.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in line with lib/engine.js#284. It is more consistent and should be kept (see below).

return cancelOrder(true)
return cb(null, null)
}
if (order.status === 'rejected' && order.reject_reason === 'balance') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we removed previous line 285, we need to correct this to if (order.status === 'rejected' & (order.reject_reason === 'balance' || api_order.reject_reason === 'balance')) {

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above. Why check order.status (which was copied from api_order) and then check api_order? This is not consistent.

Since we do not agree, a decision by a maintainer, i.e. @DeviaVir or @carlos8f, on this one and line 285 are needed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it better to leave in one line then to scarce around the whole code ;) Especially when no body cares to comment every function.

}
if (order.status === 'rejected' && order.reject_reason === 'balance') {
msg('not enough balance for ' + type + ', aborting')
return cb(null, null)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No good. Should be return cb(null, false)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please explain, everywhere it's cb(null, null), except for engine.js#231

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should test it. If we leave cb(null, null), and we have not enough balance to execute order, we would like it to finish and not to continuously try to execute it. cd(null, false) cancels further order execution.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But on the new order execution the balance is adjusted - and that's what we want?

'oc',
null,
{
id: order.bitfinex_id
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order.order_id

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order.bitfinex_id is correct (see below).


var order = {
id: cid,
bitfinex_id: null,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bitfinex_id: cid if necessary at all. See line 324.

Copy link
Contributor Author

@crubb crubb Aug 9, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using two different IDs here:

  1. Since we're not using the REST API, we don't immediately get bitfinex's order ID when we submit an order over websockets. Therefore, we're creating our own internal ID (exchange.js#335) and use that within zenbot.
  2. As soon as we know about bitfinex's ID, we save it in the order object (exchange.js#148) - but zenbot still referns to the order by it's internal ID (cid). We can then use the bitfinex_id to e.g. cancel the order.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since we are using WS API, we immediately get order ID via 'os' or 'hos'.
I also exchanged bitfinex_id with opts.order_id and it canceled the order.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But we do not know the ID in the moment we send() the order. How can we be 100% certain the next websockets response is actually the response of the zenbot order we just sent out and not e.g. a manual trade? Therefore I strongly suggest working with internal IDs and storing the bitfinex_id in the order object.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may agree on your position as I had the same problem to instantly get order ID via WS.

balance.currency_hold = ws_balance[opts.currency].available ? n(ws_balance[opts.currency].balance).subtract(ws_balance[opts.currency].available).format('0.00000000') : n(0).format('0.00000000')
balance.asset_hold = ws_balance[opts.asset].available ? n(ws_balance[opts.asset].balance).subtract(ws_balance[opts.asset].available).format('0.00000000') : n(0).format('0.00000000')

cb(null, balance)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not working. I found a way to take correct values for asset_hold and currency_hold from REST1, but if we use the same APIkeys - we get Nonce error.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide an example, I don't understand the problem.

According to the bitfinex docs, key 4 of the array is

Amount not tied up in active orders, positions or funding (null if the value is not fresh enough).

Are we on the same page of the definition of currency_hold and asset_hold? As far as I understood it, those values are about currency/assets tied up in open/uncanceled/not yet fully returned orders, which we can't use for new orders.

Therefore I think an amount of 0 is correct in most cases.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plain example:

---------------------------- STARTING LIVE TRADING ----------------------------

Waiting 1s for initial websockets snapshot.

Balance WS: { currency: '0.00000000',
  asset: '0.04180751',
  currency_hold: '0.00000000',
  asset_hold: '0.00000000' }

Balance WS: { currency: '0.00000000',
  asset: '0.04180751',
  currency_hold: '0.00000000',
  asset_hold: '0.00000000' }
2017-08-09 17:34:47  3308.40 BTC-USD   +0.1%        6   61 ++      0.0158   0.0099           0.04181 BTC  0.00000 USD    +1.8%   +0.0%
---------------------------- STARTING LIVE TRADING ----------------------------

Balance REST: { asset: '0.04180751',
  currency: '0.00000000',
  asset_hold: '0.03265206',
  currency_hold: '0.00000000' }

Balance REST: { asset: '0.04180751',
  currency: '0.00000000',
  asset_hold: '0.03265206',
  currency_hold: '0.00000000' }
2017-08-09 17:37:24  3310.00 BTC-USD   +0.0%       13   63 ++      0.0180   0.0092           0.04181 BTC  0.00000 USD    +1.8%   +0.0%

and this it not so tragic as this:

Should be like that:

2017-08-09 17:38:47  3310.10 BTC-USD   +0.0%        6   63 ++      0.0169   0.0091           0.04181 BTC  0.00000 USD    +1.9%   +0.0%
2017-08-09 17:38:52 - sell delayed: +78.1% of funds (0.03265206 BTC) on hold

Balance REST: { asset: '0.04180751',
  currency: '0.00000000',
  asset_hold: '0.03265206',
  currency_hold: '0.00000000' }

Is like this:

2017-08-09 17:39:41  3310.10 BTC-USD   +0.0%       26   63 ++      0.0169   0.0091           0.04181 BTC  0.00000 USD    +1.9%   +0.0%
2017-08-09 17:39:58 - placing sell order...
2017-08-09 17:39:58 - sell order placed at 3310.10 USD

Balance WS: { currency: '0.00000000',
  asset: '0.04180751',
  currency_hold: '0.00000000',
  asset_hold: '0.00000000' }

2017-08-09 17:40:03 - order status: rejected
2017-08-09 17:40:03 - not enough balance for sell, aborting
2017-08-09 17:40:03 - not enough balance, or signal switched, cancel sell

Copy link
Contributor

@nedievas nedievas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First let's correct balance, then test again.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

One more problem!
zenbot buy or sell from command line is not working due to ws is not initialized for getQuote to get prices values :) It works if I leave REST2.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

'b' or 'B' is not working at all in --manual mode. 's' or 'S' is OK. I tried digging into it and can not find why :(

@crubb
Copy link
Contributor Author

crubb commented Aug 9, 2017

Manual mode (both buying and selling) is working fine for me.

Just pushed a fix for zenbot commandline buy & sell.

@@ -330,6 +343,9 @@ module.exports = function container (get, set, clear) {
},

trade: function (action, opts, cb) {
if (!pair) { pair = joinProduct(opts.product_id) }
var symbol = 't' + pair

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate in line 352

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a duplicate. The symbol on trade needs a 't' prefix, and in case the trade function is ever called as the first function, we need to know the pair and set it globally.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please pay more attention:

trade: function (action, opts, cb) {
if (!pair) { pair = joinProduct(opts.product_id) }
var symbol = 't' + pair //line 347
client = authedClientWs();
var cid = Math.round(((new Date()).getTime()).toString() * Math.random())
var symbol = 't' + joinProduct(opts.product_id) //line 352
var amount = action === 'buy' ? opts.size : opts.size * -1

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, sorry, misunderstood your comment.

Copy link
Contributor

@nedievas nedievas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see comments

@crubb
Copy link
Contributor Author

crubb commented Aug 9, 2017

Calculation of on_hold amounts are now triggered over WS on getBalance.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

Something is not right. Did you test?
I have this after update wallet calc:


Authed WebSockets: No message on channel 'auth' within 60 seconds, reconnecting...

Authed WebSockets: Error on auth, retrying in 60 seconds.

@crubb
Copy link
Contributor Author

crubb commented Aug 9, 2017

I tested and am currently running live. Please run with

DEBUG=bitfinex:ws ./zenbot.sh ...

and look at the output. When restarting too quickly when testing you might get an error like "api key invalid", but after waiting some time it's back to normal.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

I even changed my API keys... and DEBUG show auth OK. But it just hangs on
Waiting 1s for initial websockets snapshot.

Waiting 1s for initial websockets snapshot.

Waiting 1s for initial websockets snapshot.

Waiting 1s for initial websockets snapshot.

@nedievas
Copy link
Contributor

nedievas commented Aug 9, 2017

Reverted to previous and works again. I think all ws must be done outside getBalance.

@crubb
Copy link
Contributor Author

crubb commented Aug 9, 2017

Reworked everything to use only one websockets connection, which is established very early. That should speed things up to jump into live trading.

@nedievas
Copy link
Contributor

No luck:(
I just stare at that:

rebootfin@zenbot:~/zenbot$ zenbot trade --manual bitfinex.btc-usd --debug
fetching pre-roll data:

skipping 200 hrs of previously collected data
.
download complete!

               DATE            PRICE     DIFF            VOL         RSI                         ACTIONS                      BAL                PROFIT
2017-08-10 00:28:00  3342.60 BTC-USD                4
2017-08-10 00:30:00  3342.60 BTC-USD   +0.0%        2
2017-08-10 00:32:00  3342.70 BTC-USD   +0.0%        1
2017-08-10 00:34:00  3342.70 BTC-USD   +0.0%        6
2017-08-10 00:36:00  3342.60 BTC-USD    0.0%        0
2017-08-10 00:38:00  3343.50 BTC-USD   +0.0%       11
2017-08-10 00:40:00  3343.10 BTC-USD    0.0%       13
2017-08-10 00:42:00  3342.30 BTC-USD    0.0%        7
2017-08-10 00:44:00  3342.10 BTC-USD    0.0%        7
2017-08-10 00:46:00  3336.00 BTC-USD   -0.2%       36
2017-08-10 00:48:00  3327.00 BTC-USD   -0.3%       41
2017-08-10 00:50:00  3326.70 BTC-USD    0.0%        4
2017-08-10 00:52:00  3320.50 BTC-USD   -0.2%       18
2017-08-10 00:54:00  3324.60 BTC-USD   +0.1%        6
2017-08-10 00:56:00  3324.60 BTC-USD   +0.0%        7   82 ++++
2017-08-10 00:58:00  3324.60 BTC-USD   +0.0%        2   82 ++++
2017-08-10 01:00:00  3324.50 BTC-USD    0.0%        4   82 ++++
2017-08-10 01:02:00  3324.90 BTC-USD   +0.0%        4   82 ++++
2017-08-10 01:04:00  3329.80 BTC-USD   +0.1%       30   85 +++++
2017-08-10 01:06:00  3329.90 BTC-USD   +0.0%        3   85 +++++
2017-08-10 01:08:00  3334.90 BTC-USD   +0.2%       12   88 +++++
2017-08-10 01:10:00  3338.80 BTC-USD   +0.1%       10   90 +++++
2017-08-10 01:12:00  3338.80 BTC-USD   +0.0%        1   90 +++++
2017-08-10 01:14:00  3339.60 BTC-USD   +0.0%        5   90 +++++
2017-08-10 01:16:00  3340.00 BTC-USD   +0.0%       17   90 +++++
2017-08-10 01:18:00  3339.90 BTC-USD    0.0%        3   90 +++++
2017-08-10 01:20:00  3340.00 BTC-USD   +0.0%        2   90 +++++
2017-08-10 01:22:00  3344.00 BTC-USD   +0.1%        8   91 +++++   0.0192      buy
2017-08-10 01:24:00  3344.20 BTC-USD   +0.0%       11   91 +++++   0.0182   0.0003      buy
2017-08-10 01:26:00  3344.10 BTC-USD    0.0%        6   91 +++++   0.0167   0.0007      buy
2017-08-10 01:28:00  3344.20 BTC-USD   +0.0%       19   91 +++++   0.0156   0.0010      buy
2017-08-10 01:30:00  3350.20 BTC-USD   +0.2%      126   93 +++++   0.0278   0.0022      buy
2017-08-10 01:32:00  3351.50 BTC-USD   +0.0%       22   94 +++++   0.0286   0.0042      buy
2017-08-10 01:34:00  3351.50 BTC-USD   +0.0%       12   94 +++++   0.0265   0.0049      buy
2017-08-10 01:36:00  3349.00 BTC-USD   -0.1%       16   84 ++++    0.0190   0.0049      buy
2017-08-10 01:38:00  3344.90 BTC-USD   -0.1%        9   70 +++     0.0085   0.0049      buy
2017-08-10 01:40:00  3340.00 BTC-USD   -0.1%       36   58 ++     -0.0030   0.0063
2017-08-10 01:42:00  3341.30 BTC-USD   +0.0%       15   60 ++      0.0001   0.0088
2017-08-10 01:44:00  3343.70 BTC-USD   +0.1%       10   63 ++      0.0054   0.0100
2017-08-10 01:46:00  3343.10 BTC-USD    0.0%       15   62 ++      0.0037   0.0104
2017-08-10 01:48:00  3341.80 BTC-USD    0.0%       10   59 ++      0.0005   0.0108
2017-08-10 01:50:00  3346.90 BTC-USD   +0.2%       21   66 +++     0.0118   0.0113      buy
2017-08-10 01:52:00  3349.40 BTC-USD   +0.1%       10   69 +++     0.0165   0.0101      buy
2017-08-10 01:54:00  3350.70 BTC-USD   +0.0%        3   70 +++     0.0181   0.0086      buy
2017-08-10 01:56:00  3351.40 BTC-USD   +0.0%        6   71 +++     0.0183   0.0073      buy
2017-08-10 01:58:00  3351.60 BTC-USD   +0.0%       14   71 +++     0.0174   0.0072      buy
2017-08-10 02:00:00  3351.40 BTC-USD    0.0%       16   71 +++     0.0157   0.0077      buy
2017-08-10 02:02:00  3351.80 BTC-USD   +0.0%        4   71 +++     0.0154   0.0068      buy
2017-08-10 02:04:00  3351.90 BTC-USD   +0.0%       11   71 +++     0.0145   0.0060      buy
2017-08-10 02:06:00  3351.70 BTC-USD    0.0%        7   71 +++     0.0130   0.0056      buy
2017-08-10 02:08:00  3350.10 BTC-USD    0.0%       10   65 +++     0.0085   0.0048      buy
2017-08-10 02:10:00  3347.60 BTC-USD   -0.1%       18   57 ++      0.0023   0.0030
2017-08-10 02:12:00  3345.50 BTC-USD   -0.1%       16   52 +      -0.0025   0.0048
2017-08-10 02:14:00  3345.40 BTC-USD    0.0%        6   52 +      -0.0026   0.0066
2017-08-10 02:16:00  3345.30 BTC-USD    0.0%       14   51 +      -0.0026   0.0074
2017-08-10 02:18:00  3342.00 BTC-USD   -0.1%        2    -- 43    -0.0097   0.0078     sell
2017-08-10 02:20:00  3342.10 BTC-USD   +0.0%        9    -- 44    -0.0088   0.0085     sell
2017-08-10 02:22:00  3340.10 BTC-USD   -0.1%        6    -- 39    -0.0125   0.0087     sell
2017-08-10 02:24:00  3336.60 BTC-USD   -0.1%       14   --- 33    -0.0194   0.0087     sell
2017-08-10 02:26:00  3339.30 BTC-USD   +0.1%        7    -- 41    -0.0120   0.0088     sell
2017-08-10 02:28:00  3336.10 BTC-USD   -0.1%       13    -- 36    -0.0182   0.0074     sell
2017-08-10 02:30:00  3335.10 BTC-USD    0.0%       16   --- 34    -0.0190   0.0066     sell
2017-08-10 02:32:00  3336.90 BTC-USD   +0.1%       12    -- 39    -0.0136   0.0061     sell
2017-08-10 02:34:00  3336.10 BTC-USD    0.0%        6    -- 38    -0.0144   0.0055     sell
2017-08-10 02:36:00  3337.40 BTC-USD   +0.0%        4    -- 41    -0.0105   0.0047     sell
2017-08-10 02:38:00  3339.30 BTC-USD   +0.1%       10     - 46    -0.0055   0.0036     sell
2017-08-10 02:40:00  3339.40 BTC-USD   +0.0%        8     - 46    -0.0048   0.0042     sell
2017-08-10 02:42:00  3342.90 BTC-USD   +0.1%        7   54 +       0.0033   0.0049
2017-08-10 02:44:00  3340.60 BTC-USD   -0.1%        5     - 49    -0.0021   0.0066
2017-08-10 02:46:00  3339.40 BTC-USD    0.0%        6     - 47    -0.0046   0.0066
2017-08-10 02:48:00  3334.80 BTC-USD   -0.1%       47    -- 39    -0.0144   0.0067     sell
2017-08-10 02:50:00  3330.10 BTC-USD   -0.1%       19   --- 32    -0.0238   0.0064     sell
2017-08-10 02:52:00  3328.30 BTC-USD   -0.1%       28   --- 30    -0.0260   0.0072     sell
2017-08-10 02:54:00  3327.40 BTC-USD    0.0%       40   --- 29    -0.0261   0.0086     sell
2017-08-10 02:56:00  3328.40 BTC-USD   +0.0%       30   --- 32    -0.0220   0.0097     sell
2017-08-10 02:58:00  3330.10 BTC-USD   +0.1%        9    -- 36    -0.0166   0.0101     sell
2017-08-10 03:00:00  3331.10 BTC-USD   +0.0%       23    -- 39    -0.0131   0.0099     sell
2017-08-10 03:02:00  3331.30 BTC-USD   +0.0%       18    -- 39    -0.0117   0.0095     sell
2017-08-10 03:04:00  3331.50 BTC-USD   +0.0%       14    -- 40    -0.0104   0.0077     sell
2017-08-10 03:06:00  3330.90 BTC-USD    0.0%        9    -- 39    -0.0110   0.0066     sell
2017-08-10 03:08:00  3330.10 BTC-USD    0.0%        6    -- 37    -0.0119   0.0058     sell
2017-08-10 03:10:00  3326.40 BTC-USD   -0.1%       12   --- 31    -0.0193   0.0059     sell
2017-08-10 03:12:00  3327.20 BTC-USD   +0.0%       17   --- 34    -0.0161   0.0056     sell
2017-08-10 03:14:00  3330.00 BTC-USD   +0.1%       11    -- 42    -0.0086   0.0048     sell
2017-08-10 03:16:00  3329.20 BTC-USD    0.0%       27    -- 40    -0.0098   0.0039     sell
2017-08-10 03:18:00  3328.60 BTC-USD    0.0%       14    -- 39    -0.0104   0.0031     sell
2017-08-10 03:20:00  3326.30 BTC-USD   -0.1%       11   --- 35    -0.0147   0.0029     sell
2017-08-10 03:22:00  3326.80 BTC-USD   +0.0%        5    -- 37    -0.0125   0.0030     sell
2017-08-10 03:24:00  3326.00 BTC-USD    0.0%        7   --- 35    -0.0134   0.0030     sell
2017-08-10 03:26:00  3324.00 BTC-USD   -0.1%       19   --- 32    -0.0168   0.0029     sell
2017-08-10 03:28:00  3320.10 BTC-USD   -0.1%       13   --- 27    -0.0243   0.0032     sell
2017-08-10 03:30:00  3320.70 BTC-USD   +0.0%       16   --- 28    -0.0211   0.0043     sell
2017-08-10 03:32:00  3320.60 BTC-USD    0.0%        3   --- 28    -0.0198   0.0045     sell
2017-08-10 03:34:00  3312.60 BTC-USD   -0.2%       59  ---- 20    -0.0361   0.0051     sell
2017-08-10 03:36:00  3311.00 BTC-USD    0.0%       27  ---- 19    -0.0370   0.0074     sell
2017-08-10 03:38:00  3310.80 BTC-USD    0.0%       21  ---- 19    -0.0348   0.0086     sell
2017-08-10 03:40:00  3311.80 BTC-USD   +0.0%       34  ---- 22    -0.0300   0.0087     sell
2017-08-10 03:42:00  3312.10 BTC-USD   +0.0%       14  ---- 23    -0.0271   0.0085     sell
2017-08-10 03:44:00  3311.90 BTC-USD    0.0%       29  ---- 23    -0.0255   0.0075     sell
2017-08-10 03:46:00  3313.00 BTC-USD   +0.0%        7   --- 27    -0.0212   0.0064     sell
2017-08-10 03:48:00  3313.80 BTC-USD   +0.0%        3   --- 30    -0.0178   0.0059     sell
2017-08-10 03:50:00  3318.00 BTC-USD   +0.1%        7    -- 42    -0.0072   0.0067     sell
2017-08-10 03:52:00  3318.10 BTC-USD   +0.0%       15    -- 43    -0.0064   0.0087
2017-08-10 03:54:00  3318.70 BTC-USD   +0.0%        2    -- 44    -0.0046   0.0102
---------------------------- STARTING LIVE TRADING ----------------------------
WebSockets: We are now authenticated.


Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants