frosty00

frosty00

Member Since 6 years ago

London

Experience Points
76
follower
Lessons Completed
19
follow
Lessons Completed
97
stars
Best Reply Awards
29
repos

1988 contributions in the last year

Pinned
⚡ A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges
⚡ Secret Sharing implementation using Lagrange interpolation in python
⚡ Some small bash scripts that interact with git to make your life easier when working with GitHub.
⚡ vi/ex commands I use to customise vim
Activity
Nov
24
4 days ago
Activity icon
created branch

frosty00 in frosty00/ccxt create branch update-yarl

createdAt 3 days ago
Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

ftx fetch_positions(symbols= ) doesn't return result for the specific symbol

When I run the code ftx fetch_positions(symbols='ETH-PERP), it returned all position I had traded, including those with no current position, instead of returning the opened position of the specific symbols.

Not seeing others having the same problem so i try to upgrade to the latest version of ccxt, but still not working.

  • OS: Windows
  • Programming Language version: Python 3.8.8
  • CCXT version: 1.62.15
exchange.fetch_positions(symbols='ETH-PERP')
[{'info': {'future': 'BTC-PERP',
   'size': '0.0',
   'side': 'buy',
   'netSize': '0.0',
   'longOrderSize': '0.0',
   'shortOrderSize': '0.0',
   'cost': '0.0',
   'entryPrice': None,
   'unrealizedPnl': '0.0',
   'realizedPnl': '43.31487525',
   'initialMarginRequirement': '0.1',
   'maintenanceMarginRequirement': '0.03',
   'openSize': '0.0',
   'collateralUsed': '0.0',
   'estimatedLiquidationPrice': None,
   'recentAverageOpenPrice': None,
   'recentPnl': None,
   'recentBreakEvenPrice': None,
   'cumulativeBuySize': None,
   'cumulativeSellSize': None},
  'symbol': 'BTC-PERP',
  'timestamp': None,
  'datetime': None,
  'initialMargin': None,
  'initialMarginPercentage': 0.1,
  'maintenanceMargin': None,
  'maintenanceMarginPercentage': 0.03,
  'entryPrice': None,
  'notional': None,
  'leverage': 10,
  'unrealizedPnl': None,
  'contracts': 0.0,
  'contractSize': 1.0,
  'marginRatio': None,
  'liquidationPrice': None,
  'markPrice': None,
  'collateral': None,
  'marginType': 'cross',
  'side': 'long',
  'percentage': None},
 {'info': {'future': 'ETH-PERP',
   'size': '1.81',
   'side': 'sell',
   'netSize': '-1.81',
   'longOrderSize': '0.0',
   'shortOrderSize': '0.0',
   'cost': '-7655.033',
   'entryPrice': '4229.3',
   'unrealizedPnl': '0.0',
   'realizedPnl': '-615.26048801',
   'initialMarginRequirement': '0.1',
   'maintenanceMarginRequirement': '0.03',
   'openSize': '1.81',
   'collateralUsed': '765.5033',
   'estimatedLiquidationPrice': '13756.0814500442',
   'recentAverageOpenPrice': '4265.055248618784',
   'recentPnl': '64.717',
   'recentBreakEvenPrice': '4265.055248618784',
   'cumulativeBuySize': '0.0',
   'cumulativeSellSize': '1.81'},
  'symbol': 'ETH-PERP',
  'timestamp': None,
  'datetime': None,
  'initialMargin': 765.5033,
  'initialMarginPercentage': 0.1,
  'maintenanceMargin': 229.65099,
  'maintenanceMarginPercentage': 0.03,
  'entryPrice': None,
  'notional': 7655.033,
  'leverage': 10,
  'unrealizedPnl': 64.717,
  'contracts': 1.81,
  'contractSize': 1.0,
  'marginRatio': 0.0131,
  'liquidationPrice': 13756.0814500442,
  'markPrice': 4229.3,
  'collateral': 17473.12541458,
  'marginType': 'cross',
  'side': 'short',
  'percentage': 8.45}]
frosty00
frosty00

@kennethyuenwc symbols must be a list of symbols

pull request

frosty00 pull request ccxt/ccxt

frosty00
frosty00

add support for headers in the implicit api

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

ok that's fair enough, i guess it is possible for the http server and backend to be out of sync if the server is caching stuff

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

how is leave the timestamp undefined better than falling back to the date header

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

i don't think that it is a bad thing though, i'd rather have the http server time that nothing

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

it's better than generating the timestamp on the client side, cause that's nonsense imo

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

if the http server provides it then we can put it there imo, cause we can assume the http server and backend are in sync

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

@frosty00 let's first agree on the first fact that defines everything else in this discussion: the orderbook['timestamp'] is not the response time, it's the timestamp when the orderbook was actually updated (if defined by the exchange). That timestamp may be in the past, and that information may be missing. From there it follows that we should not put anything there, if the exchange does not provide an orderbook['timestamp']. Some users might want to put the http response timestamp into the orderbook['timestamp'] – and we can support that, but that must be optional, and should not be the default behavior for 100%.

it depends on the exchange, it might be the last updated time or the current server time depending on each specific exchange, there is examples of both in the code

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

in fact i think this usage is probably more common that lastUpdated timestamp

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

it can also mean "current server time"

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

the meaning of the orderbook timestamp is "when it was last updated" – served in orderbook['timestamp'] if known

it's not the case for all exchanges, it can also mean "current server time"

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

anyway the http server should call the backend so the timestamp is pretty accurate

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

if the exchange replies with a stale orderbook then that is a wtf from the exchange

If we put the HTTP timestamp into the orderbook['timestamp'] - that is a wtf from us.

not really, cause if you think about it, would you rather receive some data with no timestamp in an async context, wtf is this data coming in? or would you rather have the timestamp of the http server?

If (1) is undefined – we should tell the user the real truth.

it's not the real truth, the http server timestamp is a valid timestamp that exists

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

but i believe that parsing the http header is better than leaving it undefined

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

if the exchange replies with a stale orderbook then that is a wtf from the exchange

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

i think the timestamp coming from the exchange has nothing to do with when it was last updated but rather when the exchange processed the request, there's actually a lot of data in the headers including relevant rate limiting data

see https://github.com/ccxt/ccxt/pull/10693

pull request

frosty00 pull request ccxt/ccxt

frosty00
frosty00

add support for headers in the implicit api

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

@kroitor I think it is ok if we do it were it is undefined, cause at the end of the day that is the timestamp of the response coming from the http server, it may be less precise than the backend timestamp but it is better than nothing imo

Activity icon
created branch

frosty00 in frosty00/ccxt create branch branch2

createdAt 4 days ago
open pull request

frosty00 wants to merge ccxt/ccxt

frosty00
frosty00

Added fetchPositions to gateio

settle=, type=

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714098851 | 2021-11-24T00:34:58.851Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57665.54 |            |            |      |                                          
 ETH/USDT:USDT | 1637714098851 | 2021-11-24T00:34:58.851Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=usdt, type=

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714100539 | 2021-11-24T00:35:00.539Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714100539 | 2021-11-24T00:35:00.539Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=btc, type=

     symbol |     timestamp |                 datetime |  initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |       notional | leverage | unrealizedPnl | contracts |   contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |            percentage
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC/USD:BTC | 1637714102116 | 2021-11-24T00:35:02.116Z | 0.000347766957 |      0.4092493870331502 |  0.00000424883907 |                       0.005 |      57662 | 0.000849767814 |        0 |    -1.1937e-8 |       -49 | -3.0075191e-10 |             |         97045.83 |  57662.81 |            |            | sell | -0.000034324710153529

settle=, type=swap

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714103660 | 2021-11-24T00:35:03.660Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714103660 | 2021-11-24T00:35:03.660Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=, type=futures

          symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side | percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USD_20211231 | 1637714105202 | 2021-11-24T00:35:05.202Z |             0 |                         |                 0 |                       0.005 |          0 |        0 |        0 |             0 |         0 |              |             |                0 |   58283.7 |            |            |      |           

settle=usdt, type=swap

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714106737 | 2021-11-24T00:35:06.737Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714106737 | 2021-11-24T00:35:06.737Z | 82.433006745942 |     0.05398582440540611 |           7.63469 |                       0.005 |     4346.1 | 1526.938 |        0 |        -5.803 |       -35 |        -0.01 |             |          4555.42 |     4362.68 |            |            | sell | -0.07039655872173642

settle=usdt, type=futures

           symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |  notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USDT_20211126 | 1637714108298 | 2021-11-24T00:35:08.298Z |   2.919410325 |     0.10122148475104106 |       0.144209025 |                       0.005 |    58242.6 | 28.841805 |       10 |     -0.279495 |         5 |       0.0001 |             |         52680.36 |  57683.61 |            |            |  buy | -0.09573679917707355

settle=btc, type=swap

     symbol |     timestamp |                 datetime |  initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |       notional | leverage | unrealizedPnl | contracts |    contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |            percentage
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC/USD:BTC | 1637714109836 | 2021-11-24T00:35:09.836Z | 0.000347766957 |      0.4092937449234088 | 0.000004248378595 |                       0.005 |      57662 | 0.000849675719 |        0 |   -1.04032e-7 |       -49 | -3.00686725e-10 |             |         97045.83 |  57669.06 |            |            | sell | -0.000299142853873837

settle=btc, type=futures

          symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side | percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USD_20211231 | 1637714111382 | 2021-11-24T00:35:11.382Z |             0 |                         |                 0 |                       0.005 |          0 |        0 |        0 |             0 |         0 |              |             |                0 |   58283.7 |            |            |      |           
frosty00
frosty00

i think we should just do this.parseNumber (market['contractSize']) here

pull request

frosty00 merge to ccxt/ccxt

frosty00
frosty00

Added fetchPositions to gateio

settle=, type=

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714098851 | 2021-11-24T00:34:58.851Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57665.54 |            |            |      |                                          
 ETH/USDT:USDT | 1637714098851 | 2021-11-24T00:34:58.851Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=usdt, type=

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714100539 | 2021-11-24T00:35:00.539Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714100539 | 2021-11-24T00:35:00.539Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=btc, type=

     symbol |     timestamp |                 datetime |  initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |       notional | leverage | unrealizedPnl | contracts |   contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |            percentage
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC/USD:BTC | 1637714102116 | 2021-11-24T00:35:02.116Z | 0.000347766957 |      0.4092493870331502 |  0.00000424883907 |                       0.005 |      57662 | 0.000849767814 |        0 |    -1.1937e-8 |       -49 | -3.0075191e-10 |             |         97045.83 |  57662.81 |            |            | sell | -0.000034324710153529

settle=, type=swap

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714103660 | 2021-11-24T00:35:03.660Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714103660 | 2021-11-24T00:35:03.660Z | 82.433006745942 |     0.05398805190073975 |          7.634375 |                       0.005 |     4346.1 | 1526.875 |        0 |         -5.74 |       -35 |        -0.01 |             |          4555.42 |      4362.5 |            |            | sell | -0.06963230175129537

settle=, type=futures

          symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side | percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USD_20211231 | 1637714105202 | 2021-11-24T00:35:05.202Z |             0 |                         |                 0 |                       0.005 |          0 |        0 |        0 |             0 |         0 |              |             |                0 |   58283.7 |            |            |      |           

settle=usdt, type=swap

        symbol |     timestamp |                 datetime |   initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice |   markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 BTC/USDT:USDT | 1637714106737 | 2021-11-24T00:35:06.737Z |               0 |                         |                 0 |                       0.005 |          0 |        0 |      100 |             0 |         0 |              |             |                0 |    57662.09 |            |            |      |                     
 ETH/USDT:USDT | 1637714106737 | 2021-11-24T00:35:06.737Z | 82.433006745942 |     0.05398582440540611 |           7.63469 |                       0.005 |     4346.1 | 1526.938 |        0 |        -5.803 |       -35 |        -0.01 |             |          4555.42 |     4362.68 |            |            | sell | -0.07039655872173642

settle=usdt, type=futures

           symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |  notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |           percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USDT_20211126 | 1637714108298 | 2021-11-24T00:35:08.298Z |   2.919410325 |     0.10122148475104106 |       0.144209025 |                       0.005 |    58242.6 | 28.841805 |       10 |     -0.279495 |         5 |       0.0001 |             |         52680.36 |  57683.61 |            |            |  buy | -0.09573679917707355

settle=btc, type=swap

     symbol |     timestamp |                 datetime |  initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice |       notional | leverage | unrealizedPnl | contracts |    contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side |            percentage
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC/USD:BTC | 1637714109836 | 2021-11-24T00:35:09.836Z | 0.000347766957 |      0.4092937449234088 | 0.000004248378595 |                       0.005 |      57662 | 0.000849675719 |        0 |   -1.04032e-7 |       -49 | -3.00686725e-10 |             |         97045.83 |  57669.06 |            |            | sell | -0.000299142853873837

settle=btc, type=futures

          symbol |     timestamp |                 datetime | initialMargin | initialMarginPercentage | maintenanceMargin | maintenanceMarginPercentage | entryPrice | notional | leverage | unrealizedPnl | contracts | contractSize | marginRatio | liquidationPrice | markPrice | collateral | marginType | side | percentage
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BTC_USD_20211231 | 1637714111382 | 2021-11-24T00:35:11.382Z |             0 |                         |                 0 |                       0.005 |          0 |        0 |        0 |             0 |         0 |              |             |                0 |   58283.7 |            |            |      |           
Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

basically instead of returning a json string from the unified api we should return an object that has the json response as well as the headers

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00
{
  'Access-Control-Allow-Headers': 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type',
  'Access-Control-Allow-Methods': 'GET,POST,OPTIONS,DELETE,PUT',
  'Access-Control-Max-Age': '1728000',
  Connection: 'keep-alive',
  'Content-Encoding': 'gzip',
  'Content-Type': 'application/json',
  Date: 'Wed, 24 Nov 2021 00:47:01 GMT',
  Server: 'openresty',
  'Transfer-Encoding': 'chunked',
  Vary: 'Origin',
  'X-Request-Id': '[3eaf6b34-4236365582]'
}

cause gateio does provide the timestamp in the fetchOrderBook response in the headers technically, it's just that we currently only parse the response body, I'll have a think but it shouldn't be impossible to solve

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

Any way to add "synthetic" timestamp?

Let's say we have:

for (i=0; i<5; i++)
   ex.fetchOrderBook('btc/usdt').then(myParseOB);
   phseudo_sleep(100); 
}

function myParseOB(resp){
   this.OB = resp;
}

in our app, we reply OB to be the latest, and for that, we depend on .timestamp property of response. However, with some exchanges, (i.e. gate.io) it is 'undefined' and thus, returned 5 calls are in not chronological orders sometimes. (i.e. the 5th sent request might return response earlier then 3rd request)

What is your advise to make their responses chronologically sorted? I've been thinking if there is any internal property in ccxt (or maybe somewhere in headers), like exchange.Request_Start_Time_Of_Last_Received_Response would have been very useful, for many different ccxt methods, to make them datestamped, when exchange doesn't give any timestamp.

frosty00
frosty00

I think maybe we should try to parse the info from the response headers

Nov
23
5 days ago
Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

CCXT Developer Wanted

Hi everyone!

We are having more and more requests for new features. There's a backlog of issues and pull requests in the CCXT repository. We are a very tiny team doing our best to keep CCXT free for the users. We'd like to resolve the backlog, which is why we think it is time to expand the CCXT team. We need more people to help us on our current tasks and beyond. Since so many people rely on this software we need developers who are also rockstars and workhorses. We don't have working hours or schedules, it will require the majority of your time. Your compensation will be very good but it will depend on your activity (or how much you do). Your age does not matter that much, but make sure it is legal for working. This library is developed in three languages JavaScript, Python and PHP. You need a decent experience with at least two of those three languages, though better know all three. The more programming languages you have worked with – the better. You must be an exceptionally skilled coder and a software architect with a lot of practice. Your English must be fluent. You must be a CS enthusiast in your heart (ideally, a CS graduate), to work on our team. You need a portfolio of the work you did, on GitHub or elsewhere. We are looking for people who have more answers than questions.

Things you must know very well or must have dealt with:

  • CCXT usage and documentation
  • OOP (C++ experience would be very good)
  • concurrency and parallelism in different languages
  • software architectures
  • patterns and algorithms
  • version control
  • networking
  • cryptocurrencies
  • general trading
  • finance

This is what we do:

  • writing unified methods and new exchange API integrations
  • reviewing and directing the work on the existing PRs
  • fixing bugs in the code, maintaining the repositories
  • supporting users, answering questions, closing issues
  • adding new examples and docs

This is a fully remote job. You must be stress-resistant and be prepared to learn fast and bury into the work quickly. Novice/beginner developers, please, don't waste your time. Apart from the technical work it implies a lot of communication. There will be a paid trial period of 1-2 months to see if we can work together. We start from $100k/y to $200k+/y in crypto stablecoins on average. It can go both ways depending on your qualification.

If you're interested, please, pm us on our discord chat (we will reply as soon as possible):

Discord

frosty00
frosty00

This is good news. Btw, just my 2 cents - you might consider hiring 2 person instead of one, for half-time. Might be better for replacing each-other and also, working parallelly on different tasks.

We have already hired 2 people, now we are looking for a third person to join us. We are looking for people who will work full time since it is a big time commitment.

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

[wavesexchange.py] - waves_exch.createOrder - KeyError: 'EGG/WAVES'

  • OS: Ubuntu 20.04.3 LTS
  • Programming Language version: Python 3.9.6
  • CCXT version: 1.61.98
Request: POST http://matcher.waves.exchange/matcher/orderbook {'content-type': 'application/json', 'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate'} {"senderPublicKey":"**************************","matcherPublicKey":"**************************","assetPair":{"amountAsset":"C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS","priceAsset":""},"orderType":"buy","price":3900000017,"amount":106062997,"timestamp":1637633628162,"expiration":1640052828162,"matcherFee":300000,"signature":"48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X","version":3}

Response: POST http://matcher.waves.exchange/matcher/orderbook 200 {'Server': 'nginx', 'Date': 'Tue, 23 Nov 2021 02:13:52 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'x-span-id': 'fba9e7eec44593be', 'x-trace-id': 'a5c5c5f49a3f9c77', 'matcher-http-server': 'matcher-1', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, DELETE', 'Access-Control-Allow-Headers': 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,signature,timestamp', 'Access-Control-Expose-Headers': 'Content-Length,Content-Range', 'Backend': 'unknown', 'Content-Encoding': 'gzip'} {"success":true,"message":{"version":3,"id":"**************************","sender":"**************************","senderPublicKey":"**************************","matcherPublicKey":"**************************","assetPair":{"amountAsset":"C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS","priceAsset":"WAVES"},"orderType":"buy","amount":106062997,"price":3900000017,"timestamp":1637633628162,"expiration":1640052828162,"matcherFee":300000,"matcherFeeAssetId":null,"signature":"48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X","proofs":["48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X"]},"status":"OrderAccepted"}


Traceback (most recent call last):

  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 1076, in create_order
    return self.parse_order(value, market)
           │    │           │      └ {'percentage': True, 'precision': {'amount': 8, 'price': 8}, 'limits': {'amount': {'min': None, 'max': None}, 'price': {'min'...
           │    │           └ {'version': '3', 'id': '**************************', 'sender': '**************************', 'send...
           │    └ <function wavesexchange.parse_order at 0x7f84f84a3790>
           └ ccxt.wavesexchange()
  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 1287, in parse_order
    price = self.price_from_precision(symbol, priceString)
            │    │                    │       └ '3900000017'
            │    │                    └ 'EGG/WAVES'
            │    └ <function wavesexchange.price_from_precision at 0x7f84f84a3310>
            └ ccxt.wavesexchange()
  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 911, in price_from_precision
    market = self.markets[symbol]
             │    │       └ 'EGG/WAVES'
             │    └ {'WAVES/BTC': {'percentage': True, 'precision': {'amount': 8, 'price': 8}, 'limits': {'amount': {'min': None, 'max': None}, '...
             └ ccxt.wavesexchange()

KeyError: 'EGG/WAVES'

frosty00
frosty00

Waves Ducks/WAVES = EGG/WAVES

Waves Ducks = EGG

same thing

Activity icon
issue

frosty00 issue comment ccxt/ccxt

frosty00
frosty00

[wavesexchange.py] - waves_exch.createOrder - KeyError: 'EGG/WAVES'

  • OS: Ubuntu 20.04.3 LTS
  • Programming Language version: Python 3.9.6
  • CCXT version: 1.61.98
Request: POST http://matcher.waves.exchange/matcher/orderbook {'content-type': 'application/json', 'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate'} {"senderPublicKey":"**************************","matcherPublicKey":"**************************","assetPair":{"amountAsset":"C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS","priceAsset":""},"orderType":"buy","price":3900000017,"amount":106062997,"timestamp":1637633628162,"expiration":1640052828162,"matcherFee":300000,"signature":"48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X","version":3}

Response: POST http://matcher.waves.exchange/matcher/orderbook 200 {'Server': 'nginx', 'Date': 'Tue, 23 Nov 2021 02:13:52 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'x-span-id': 'fba9e7eec44593be', 'x-trace-id': 'a5c5c5f49a3f9c77', 'matcher-http-server': 'matcher-1', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, DELETE', 'Access-Control-Allow-Headers': 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,signature,timestamp', 'Access-Control-Expose-Headers': 'Content-Length,Content-Range', 'Backend': 'unknown', 'Content-Encoding': 'gzip'} {"success":true,"message":{"version":3,"id":"**************************","sender":"**************************","senderPublicKey":"**************************","matcherPublicKey":"**************************","assetPair":{"amountAsset":"C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS","priceAsset":"WAVES"},"orderType":"buy","amount":106062997,"price":3900000017,"timestamp":1637633628162,"expiration":1640052828162,"matcherFee":300000,"matcherFeeAssetId":null,"signature":"48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X","proofs":["48ZLKzsu1PaJXvyXtAVqi3kvEQpe8t8bJVyXKdF4yJHVNgXvEers2U3NoMQGk6kSRP5efQ9GiF67dVH7fggaJj6X"]},"status":"OrderAccepted"}


Traceback (most recent call last):

  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 1076, in create_order
    return self.parse_order(value, market)
           │    │           │      └ {'percentage': True, 'precision': {'amount': 8, 'price': 8}, 'limits': {'amount': {'min': None, 'max': None}, 'price': {'min'...
           │    │           └ {'version': '3', 'id': '**************************', 'sender': '**************************', 'send...
           │    └ <function wavesexchange.parse_order at 0x7f84f84a3790>
           └ ccxt.wavesexchange()
  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 1287, in parse_order
    price = self.price_from_precision(symbol, priceString)
            │    │                    │       └ '3900000017'
            │    │                    └ 'EGG/WAVES'
            │    └ <function wavesexchange.price_from_precision at 0x7f84f84a3310>
            └ ccxt.wavesexchange()
  File "/home/system/.asdf/installs/python/3.9.6/lib/python3.9/site-packages/ccxt/wavesexchange.py", line 911, in price_from_precision
    market = self.markets[symbol]
             │    │       └ 'EGG/WAVES'
             │    └ {'WAVES/BTC': {'percentage': True, 'precision': {'amount': 8, 'price': 8}, 'limits': {'amount': {'min': None, 'max': None}, '...
             └ ccxt.wavesexchange()

KeyError: 'EGG/WAVES'