全部產品
Search
文件中心

ApsaraDB for Redis:基於TairSearch構建股票K線Realtime Compute服務

更新時間:Jul 30, 2024

本文介紹如何基於TairSearch構建一個即時的股票K線指標服務。

背景資訊

投資者在進行股票投資活動前,通常需要藉助股票行情資料進行分析、判斷。在眾多股票行情指標中,K線是基礎指標,也是核心指標,K線可以演繹出多種其他指標。K線由開盤價、收盤價、最低價、最高價組成,可繪製成日K線、周K線、月K線、季度K線或者30分鐘K線等。

證券商會從證券交易所接收近乎即時的股票行情未經處理資料,並從以上資料中即時地計算出日K線、5分鐘K線等指標,而且投資交易行業對行情分析的即時性要求極高,大量的Realtime Compute和訪問請求是證券商等股票行情提供應商的重要挑戰。

TairSearch是集緩衝與計算於一體的即時全記憶體檢索系統,可作為股票行情的熱資料緩衝系統,服務於K線等需大量Realtime Compute的指標服務。本文將介紹如何基於TairSearch構建股票3分鐘K線Realtime Compute服務。

說明

關於TairSearch的詳細介紹及命令樣本,請參見TairSearch

Demo示範

建立股票Schema

本樣本中類比每3秒產生一條原始行情資料。可通過TFT.CREATEINDEX命令以股票代號為Key名稱建立該股票的對應Schema,Schema中包含最高價(high)、最低價(low)、開盤價(open)、收盤價(close)、成交量(amount)、成交總額(volume)與時間戳記(date)欄位,以時間戳記(date)為索引。

說明

如需增加或調整欄位,可直接執行TFT.UPDATEINDEX

程式碼範例如下:

TFT.CREATEINDEX 58Z074 '{
    "mappings": {
        "properties": {
            "high": {"index": false,"type": "double"},
            "low": {"index": false,"type": "double"},
            "open": {"index": false,"type": "double"},
            "close": {"index": false,"type": "double"},
            "volume": {"index": false,"type": "long"},
            "amount": {"index": false,"type": "long"},
            "date": {"index": true,"type": "long"}
        }
    }
}'

預計輸出:

OK

匯入股票資料

整理股票資料,寫入TairSearch文檔,程式碼範例如下:

TFT.ADDDOC 58Z074 '{
    "high": 1237.53,
    "low": 887.54,
    "open": 987.36,
    "close": 997.53,
    "volume": 110,
    "amount": 2809,
    "date": 1659922202
}'

計算即時K線

類比計算3分鐘K線,需要擷取3分鐘內的開盤價、收盤價、最低價和最高價,程式碼範例如下:

  • 計算開盤價:

    TFT.SEARCH 58Z074 '{
        "size": 1,
        "_source": {"includes": "open"},
        "sort": [{"date": {"order": "asc"}}],
        "query": {"range": {"date": {"gte": 1659922200,"lte": 1659922380}}}
    }'
  • 計算收盤價:

    TFT.SEARCH 58Z074 '{
        "size": 1,
        "_source": {"includes": "close"},
        "sort": [{"date": {"order": "desc"}}],
        "query": {"range": {"date": {"gte": 1659922200,"lte": 1659922380}}}
    }'
  • 計算最高價和最低價:

    TFT.SEARCH 58Z074 '{
        "size": 0,
        "query": {"range": {"date": {"gte": 1659922200,"lte": 1659922380}}},
        "aggs": {"high": {"max": {"field": "high"}},"low": {"min": {"field": "low"}}}
    }'

繪製K線

通過Python Pyecharts庫,將上述搜尋結果資料繪製K線的效果如下:TairSearch構建股票效果圖

效能資料

計算開盤價或收盤價以及最高價、最低價的效能資料如下:

  • 計算開盤價或收盤價。

    測試命令:

    redis-benchmark -r 1 -n 100000 TFT.SEARCH 58Z074 '{"size": 1, "_source": {"includes": "open"}, "sort": [{"date": {"order": "asc"}}], "query": {"range": {"date": {"gte": 1659922200,"lte": 1659922380}}}}'

    測試結果:

    100.00% <= 5 milliseconds
    12078.75 requests per second
  • 計算最高價、最低價:

    測試命令:

    redis-benchmark -r 1 -n 100000 TFT.SEARCH 58Z074 '{"size": 0,"query": {"range": {"date": {"gte": 1659922200,"lte": 1659922380}}},"aggs": {"high": {"max": {"field": "high"}},"low": {"min": {"field": "low"}}}}'

    測試結果:

    100.00% <= 2 milliseconds
    65019.51 requests per second