gruelbox / orko

Trade on and script multiple crypto exchanges from a single user interface on desktop and mobile. In development.
GNU Affero General Public License v3.0
180 stars 61 forks source link

Script Engine: Access to Order Book #984

Open AwooOOoo opened 4 years ago

AwooOOoo commented 4 years ago

Is your feature request related to a problem? Please describe. Allow the script engine to expose access to the orderbook data as seen in the orders window

Describe the solution you'd like Expose 'orders' object such as;

{
  open: {
    { type: 'SELL', orderState: 'onExchange', limit: '0.65', trigger: '0.65', amount: '100', filled: '0.0'},
    { type: 'SELL', orderState: 'onExchange', limit: '0.75', trigger: '0.75', amount: '100', filled: '0.0'}
  },
  history: [
    { created: '8/16/2020 10:00:00 AM', price: '0.55', amount: '100', fee: '5.5', feeCcy: 'EUR' },
    { created: '8/16/2020 10:05:00 AM', price: '0.45', amount: '100', fee: '4.5', feeCcy: 'EUR' }
  ] 
}

Describe alternatives you've considered I haven't yet had a chance to look at your internal data structures to see what correct enumerations for different states are; such as is 'SELL' always capitalized, what are the enumeration states for 'orderState' etc?

AwooOOoo commented 4 years ago

Assign this to me, I'll work on it after I finish cleaning up adding balance support (#983).

AwooOOoo commented 4 years ago

Some examples for the new support;

Open Orders

var count = 0;

function start() {
  var subscription = events.setOpenOrders(
    function(event) {
      notifications.info("*** OPEN ORDERS: " + event.openOrders());

      if (count++ >= 1) {
        control.done()
      }
    },
    parameters.selectedCoin
  );

  return RUNNING
}

function stop() {
  events.clear(subscription);  // Stop the subscription
}

Example Response:

Open orders: [order=LimitOrder [limitPrice=360, Order [type=ASK, originalAmount=10, cumulativeAmount=0, averagePrice=0, fee=0, instrument=ETH/EUR, id=1, timestamp=Thu Aug 20 16:08:14 CEST 2020, status=NEW, flags=[], userReference=175420665]]] [order=LimitOrder [limitPrice=370, Order [type=ASK, originalAmount=10, cumulativeAmount=0, averagePrice=0, fee=0, instrument=ETH/EUR, id=2, timestamp=Thu Aug 20 16:08:19 CEST 2020, status=NEW, flags=[], userReference=154148732]]]

Order Book

var count = 0;

function start() {
  var subscription = events.setOrderBook(
    function(event) {
      notifications.info("*** OrderBook BIDS: " + event.orderBook().bids);
      notifications.info("*** OrderBook ASKS: " + event.orderBook().asks);

      if (count++ >= 1) {
        control.done()
      }
    },
    parameters.selectedCoin
  );

  return RUNNING
}

function stop() {
  events.clear(subscription);  // Stop the subscription
}

Example Response:

[LimitOrder [limitPrice=347.77000000, Order [type=BID, originalAmount=0.32508000, cumulativeAmount=null, averagePrice=null, fee=null, instrument=ETH/EUR, id=, timestamp=Thu Aug 20 15:12:35 CEST 2020, status=null, flags=[], userReference=192475211]], LimitOrder [limitPrice=347.75000000, Order [type=BID, originalAmount=0.16254000, cumulativeAmount=null, averagePrice=null, fee=null, instrument=ETH/EUR, id=, timestamp=Thu Aug 20 15:12:37 CEST 2020, status=null, flags=[], userReference=113477373]], LimitOrder [limitPrice=347.56000000, Order [type=BID, originalAmount=1.07717000, cumulativeAmount=null, averagePrice=null, fee=null, instrument=ETH/EUR, id=, timestamp=Thu Aug 20 15:12:26 CEST 2020, status=null, flags=[], userReference=155455028]], LimitOrder [limitPrice=347.38000000, Order [type=BID, originalAmount=2.69161000, cumulativeAmount=null, averagePrice=null, fee=null, instrument=ETH/EUR, id=null, timestamp=null, status=null, flags=[], userReference=115320557]] ...