國
立 政 治 大 學
‧
Na tiona
l Ch engchi University
第四章 系統研究架構實作 一、市場狀態室
市場狀態室每秒會接收外部金融機構提供的多種商品的即時報價源,
並在極短的時間內算出 18 種技術指標(數量可彈性增加),並運用這些 指標相互產生出上千種的買賣規則,本系將其規則稱之為市場狀態。每一 秒鐘上千種的市場狀態,一天交易時間過後將會儲存一千八百萬筆上下的 資料,這些龐大的資料累積起來能夠提供給多種演算法以建構出可靠的策 略模型。在即時模擬環境下,市場狀態室也會即時的將需要的市場狀態傳 給相對應的策略模型去計算出信號。
二、交易室
交易室主要處理的項目有二,第一為進場時機點的優化,工作內容為 每當投資人欲啟動一次交易,交易室需負責佈署該次模擬(Simulation)
並且開始接收即時市場狀態交給一至多個策略模型以算出權重信號並加總,
得出一個該模擬在該時間點的唯一信號。第二為出場時機點的優化,當接 收到進場信號後,交易室會依照投資人的選擇到模擬交易所或者券商下單 介面下單,並依照上方策略模型是否再次傳來信號決定是否出場,待到市 場走勢將要改變即立刻獲利了結。接著會一一詳細說明此二條項目。
‧ 國
立 政 治 大 學
‧
Na tiona
l Ch engchi University
圖 17 交易室運作流程示意圖 (一) 進場時機點之優化
1. 流程簡介
當投資人選擇完欲投資之標的、欲使用的策略模型以及其權重值等相 關的參數後,SimulationReceiveSpout 會將這些參數交給 SimulationBolt,
SimulationBolt 會去資料庫讀出投資人選用的策略模型,並將其他的相關 參數包成一個 Simulation 交給 SignalCalculationBolt。同時,SimulationBolt 也要讀取這些策略模型中總共使用到了哪幾種市場狀態,並將使用到的市 場狀態傳給 StateReceiveBolt 向 StateCenter 登記。
而 SignalCalculationBolt 拿到由上方傳來的 simulation 後,會馬上交由 後方的大策略機制將其展開成一個 SuperStrategy,完成策略的佈署,並準 備開始計算信號。
‧ 國
立 政 治 大 學
‧
Na tiona
l Ch engchi University
當 StateReceiveBolt 開始將 StateCenter 算好的即時市場狀態交給 SignalCalculationBolt 後,SignalCalculationBolt 裡的 SuperStrategy 機制就 會開始交收這些市場狀態並分派給相對應的策略模型去計算出信號,在依 不同策略的權重值得出一個唯一的信號加總,並以這個信號來準備進場。
2. SignalCalculationBolt 之內部實作
為了要能實現上述的策略分層機制,必須要有一套系統邏輯來處理每 一層策略的佈署以及即時分派市場狀態來計算信號,並且要在極短的時間 內完成運算。SignalCalculationBolt 背後的運作邏輯便是在處理此項工作,
以下將會說明其內部之運作。
圖 18 SignalCalculationBolt 背後之邏輯架構
SignalCalculationBolt:
策略流:
負責接收上方傳來的 tuple,tuple 包含由 SimulationBolt 打包好的 一個 simulation,將送往後方佈署。
訊息流:
由 StateReceiveBolt 傳來某支商品的市場狀態,找出對該商品進行 模擬的 simulation,透過 sendStateMap()交到後方去分派給眾策略,並
‧
接收由 SimulationCase 所回傳回來一次時間點的最終信號,再將其傳 給 TradeHandleBolt。
校準流:
當一次交易結束後,會接收前一個 Bolt 傳來之交易結果來決定預 測成功與否,並將結果向下送至 SimulationCase。
SimulationCase:
策略流:
接收 SignalCalculationBolt 傳來的 simulation 並將其中的參數交給 SuperStrategy 去佈署。之後便會為該 simulation 產生一個 PredictCenter 以記錄預測結果。
訊息流:
將 SignalCalculationBolt 傳來的 stateMap 再往下傳送,並接收由下 方 SuperStrategy 回傳的信號。
校準流:
若接到交易結果則將結果送至 PredictCenter 以進行準確度紀錄。
若 PredictCenter 返回欲校準之 map 不為空,則將其傳至 SuperStrategy 準備向下去校準欲修改策略之權重。
PredictCenter 策略流:
從 SimulationCase 接到請求後,PredictCenter 會產生出 SimulationPredict 實體
校準流:
若接到交易結果則將結果送至 PredictCenter 以進行準確度紀錄。
SimulationPredict 返回欲校準之 map 不為空,則將其再返回至 SimulationCase 準備針對欲修改策略之權重進行校準。
SimulationPredict 策略流:
SimulationPredict 會根據該 simulation 內的中策略,建立一紀錄預 測力之表格,等待交易結果傳來並寫入。
‧
SuperStrategy 策略流:
從 SimulationCase 接到參數後, 會將做多與做空兩種不同的策略 map 分別交給下方 MidStrategyBundle 去產生做多與做空的中策略 bundle。
訊息流:
將 SimulationCase 傳來的 stateMap 再往下傳送,並接收由下方 MidStrategyBundle 回傳的做多與做空信號,與投資人設定之門檻值做 比對,將結果交給 SimulationCase。
校準流:
將校準 map 傳至 MidStrategyBundle 準備向下去校準欲修改策略之 權重。
MidStrategyBundle 策略流:
分為做多與做空兩個 bundle,做多的 bundle 內全為做多的中策略 模型,做空亦然。此處會取得中策略的演算法類別及編號,送至 MidStrategy 去佈署中策略。
訊息流:
將由 SuperStrategy 傳來的 stateMap 分派給每一個中策略,以及接 收中策略加權過後之信號並加總,回傳至 SuperStrategy。
校準流:
依策略名稱找出欲調整之策略,對其呼叫 adaptWeight()去修改其 權重。
MidStrategy 策略流:
佈署中策略,並將其中的小策略依序交至 SmallStrategy 去佈署。
‧
接到 stateMap 後,運用 subscribeForm 將市場狀態分給相對應的小 策略去計算信號,並接收小策略的結果進行投票,超過半數則將信號 加權後像上傳至 MidStrategyBundle。
校準流:
修改權重。
SmallStrategy 策略流:
SmallStrategy 為 interface,能夠以多種不同的演算法來實現。
訊息流:
接到小策略需要的市場狀態後,立即運算出該時間點的小策略信 號,並將信號回傳至 MidStrategy 準備進行投票。
(二) 出場信號之優化 1. 流程簡介
當 SignalCalculationBolt 產生信號後,SignalCalculationBolt 會將信號用 tuple 傳給 TradeHandleBolt。TradeHandleBolt 為發送訂單的單位,負責將 設定好的訂單送至 OrderReportCenterBolt,OrderReportCenterBolt 會判斷 這筆訂單為模擬訂單或者為真實交易訂單,若為模擬訂單則送往
SimulatedExchangeCenterBolt 去模擬下單並等待搓和,若為實際訂單則送 往本研究與之合作的金融單位下單介面,到證期交所下單。
下單的結果則利用 Kafka 訊息傳遞機制將搓和後的訂單與成交金額傳 給 OrderStateBuffer。OrderStateBuffer 為一個集中管理所有訂單的緩衝區,
所有搓和完畢的訂單皆會存放於此,並依該訂單的不同狀態來決定出場時 機,當出場時機點發生時,便立刻呼叫 TradeHandleBolt 送出出場訂單,
搓合完的結果亦會透過 Kafka 回傳給 OrderStateBuffer。若發生一段時間後 訂單仍沒搓和成功的情形,OrderStateCenter 即會通知 TradeHandleBolt 送 出取消該訂單的請求,並立刻以市價認賠售出。透過上述一次買進後在短 時間內即刻賣出的流程,完成一筆交易。
‧ 國
立 政 治 大 學
‧
Na tiona
l Ch engchi University
圖 19 出場信號優化時序圖 2. 情境假設與理論上之獲利試算
情境假設一:市場報價於一小段時間持續穩定成長之狀態,使用做多且 k 值為 1 之策略進行模擬。
‧
價金額。此時又接到 SignalCalculationBolt 傳來信號,表示第二秒的後一 秒價格仍然會上漲,系統便不將限價單送出,且限價金額再加 1 元。此外 因為有接獲信號,所以仍會送出一張買進之市價單。時間來到第二秒,在第一秒下的市價單會以 101 元成交,同樣將成交 價加上 1 元設為限價金額。此時 SigalCalculationBolt 又送來信號,預測第 三秒後的下一秒仍會上漲,於是便不送出限價單,且限價金額加 1,此外
(second)
1st 2nd 3rd
買入時間 (second)
1st 1st 2nd 1st 2nd 3rd
第三秒鐘時因 SignalCalculationBolt 沒有信號傳來,表示下一秒過後漲 幅即將結束,便不再調整限價金額,並將三張限價單依其限價金額去下單
‧
order of 1st sec. order of 2nd sec. order of 3rd sec.
0 1 2 3 4
order of 1st sec. order of 2nd sec. order of 3rd sec.
‧
價金額。此時又接到 SignalCalculationBolt 傳來信號,表示第二秒的後五 秒內價格仍然會上漲,系統便不將限價單送出,且限價金額再加 1 元。此 外因為有接獲信號,所以仍會送出一張買進之市價單。時間來到第二秒,在第一秒下的市價單會以 99 元成交,同樣將成交 價加上 1 元設為限價金額。此時 SigalCalculationBolt 不再送信號來,表示 模型預測第三秒後的下五秒內跌幅較漲幅明顯,於是便將兩張限價單送出,
等待下一秒搓合。以下表格為整理到信號停止送來前之訂單狀態。
表 2 情境二信號停止送來前每秒鐘的訂單狀態表 時間
(second)
1st 2nd
買入時間 (second)
1st 1st 2nd
‧
模擬交易所(Simulated Exchange Center)為本研究自行建置的搓和中 心,目的在於使得投資人於正式買賣之前,能有測試模型效益的環境。模
order of 1st sec. order of 2nd sec.
0 1 2 3 4
order of 1st sec. order of 2nd sec.
‧ 國
立 政 治 大 學
‧
Na tiona
l Ch engchi University
賣單:限價金額 <= 市場報價,則以市價成交。
透過簡單的機制來模擬市場搓和,雖然考量因素未能全面,但仍然能 大略反映出模型的準確度,投資人可根據模擬交易結果來調整策略直到滿 足需求後,再由金融機構之下單介面正式進行買賣交易。
‧
SignalCalculationBolt 傳至 TradeHandleBolt,再傳給 OrderReportCenterBolt,再交給模擬交易所下單,在 Storm 架構下 bolt 與 bolt 間的傳輸僅需花費一毫
小策略運算使用之 Bolt SignalCalculationBolt
(二) 實驗數據