0

Volume-Weighted Average Prive (VWAP)price_per_unitquantitiyの取引を一定の期間にわたってプロットする必要があります。弾性検索集計:量加重平均価格

集計の結果、date_histogramのすべてのバケットには、これまでに発生したすべての取引のVWAPが含まれている必要があります。

これはElasticsearchを使用することが可能かどうか、またスクリプトに似たアプローチ(スクリプトを使用するようなことはありませんか?

trade文書のための基本的なマッピングは非常に簡単です:execution_time一方

"trade": { 
    "properties": 
    "trade_id": {"type": "string", "index": "not_analyzed"}, 
    "product_id": {"type": "string", "index": "not_analyzed"}, 
    "quantity": {'type': 'double'}, // number of units 
    "execution_time": {'type': 'date'}, 
    "price_per_unit": {'type': 'double'}, 
    } 
} 

date_histogramのために使用されるべきであるとの貿易の合計価格はprice_per_unitquantityの製品です。したがって、VWAP = sum(price_per_unit * quantity)/sum(quantity)

+1

[累積合計](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-cumulative-sum-aggregation.html)のようなサウンドは役立ちます。 –

+0

上記の質問のコードサンプルを用意してもらえますか?私は累積合計を調べてみましたが、実際にそれを実装できませんでした。 –

+0

私が提供したリンクにサンプルがあります。そして、私は、あなたがテストデータ、所望の出力とインデックスのマッピングを提供していないので、それよりも優れたサンプルを思いつくことができません。 –

答えて

2
DELETE test 
PUT test 
{ 
    "mappings": { 
    "trade": { 
     "properties": { 
     "trade_id": { 
      "type": "string", 
      "index": "not_analyzed" 
     }, 
     "product_id": { 
      "type": "string", 
      "index": "not_analyzed" 
     }, 
     "quantity": { 
      "type": "double" 
     }, 
     "execution_time": { 
      "type": "date" 
     }, 
     "price_per_unit": { 
      "type": "double" 
     } 
     } 
    } 
    } 
} 

POST test/trade/_bulk 
{"index":{}} 
{"execution_time":"2016-11-18T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-18T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-19T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-20T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-20T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-20T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-21T22:45:27Z","quantity":10,"price_per_unit":5} 
{"index":{}} 
{"execution_time":"2016-11-21T22:45:27Z","quantity":10,"price_per_unit":5} 

POST test/trade/_search 
{ 
    "size": 0, 
    "aggs": { 
    "sales_per_day": { 
     "date_histogram": { 
     "field": "execution_time", 
     "interval": "day" 
     }, 
     "aggs": { 
     "sales": { 
      "sum": { 
      "script": { 
       "lang": "groovy", 
       "inline": "doc['quantity'] * doc['price_per_unit']" 
      } 
      } 
     }, 
     "cumulative_sales": { 
      "cumulative_sum": { 
      "buckets_path": "sales" 
      } 
     } 
     } 
    } 
    } 
} 

inline scripting for groovyを有効にする必要があります。

+0

ありがとう、本当に助かりました! –

関連する問題