2017-01-23 12 views
0

У меня есть таблица RethinkDB, состоящая из ордеров на инвентарь Робиннити. Соответствующие поля:Как я могу выполнить уменьшение карты на отфильтрованных группах в RethinkDB?

side (либо buy или sell)
state (Я ищу только для filled заказов)
price (Средняя цена USD порядка)
quantity (количество акций, проданных или купленных)

Я просто пытаюсь понять все свои P/L на каждом складе в истории заказов.

У меня есть следующий рабочий запрос, который говорит мне цену всех ордеров на продажу, сгруппированный по символу акции:

r.db('robinhood').table('orders').filter({side: 'sell', state: 'filled'}) 
.map(function(order) { 
    return { 
    cost: (order('price').coerceTo('number')).mul(order('quantity').coerceTo('number')), 
    symbol: order('symbol') 
    } 
}).group('symbol').sum('cost') 

Это возвращает что-то вроде этого:

[{"group":"AA","reduction":491},{"group":"AAPL","reduction":10589},{"group":"ABEO","reduction":7596.16},...] 

Очевидно, что я могу сделать тот же запрос для стороны BUY, который расскажет мне общую стоимость всех моих заказов на покупку (а затем, теоретически, я мог бы просто вычесть это из каждого из предыдущих значений SELL).

Короче, как я могу вычесть общую стоимость BUY заказов для каждого символа акций от общей стоимости SELL заказов для каждого символа акции, используя ОДИН ReQL запроса?

Спасибо за ваше время.

ответ

1

Вы можете попробовать добавить обратную величину ордеров на покупку к вашей сумме:

r.db('robinhood').table('orders').filter({state: 'filled'}) 
.map(function(order) { 
    return { 
    cost: order('price').coerceTo('number') 
      .mul(order('quantity').coerceTo('number')) 
      .mul(r.branch(order('side').eq('sell'), 1, -1)), 
    symbol: order('symbol') 
    } 
}).group('symbol').sum('cost')