สำหรับ execution process นี้เป็นส่วนหนึ่งของระบบ Execution Management System (EMS) เวอร์ชั่นแรกที่ผมออกแบบโดยเน้นความเรียบง่าย เพื่อให้สามารถใช้เทรดได้ทุก symbol และทุกตลาด แต่ในความเรียบง่ายนี้ก็มีข้อจำกัดบ้างคือ 1 bot / 1 trade model / 1 symbol / 1 position / 1 microservice ในอนาคตผมจะออกแบบและพัฒนาระบบ execution ใหม่ๆ ขึ้นมาอีก เพื่อให้รองรับรูปแบบของบอทและกลยุทธ์การเทรดที่หลากหลายขึ้น
อธิบายหลักการ Two Trading States Processing ซึ่ง state แรกอาจเรียกว่า passive state หรือจังหวะทำ passive prediction และ state ที่สองอาจเรียกว่า active state หรือจังหวะทำ active prediction
ข้อสังเกตเพื่อให้จำง่ายๆ คือ state แรกไม่ต้องใช้ข้อมูลสถานะบัญชี, พอร์ตโฟลิโอ, positions, trades, orders แต่ใน state ที่สองจำเป็นต้องใช้ ดังนั้นใน state แรกจึงใช้แค่ข้อมูลราคาและ fundamental ก็พอ จึงสามารถประมวลผลแบบ vectorize ได้ทำให้รันได้เร็วประหยัดเวลา แต่ state ที่สองข้อมูลสถานะต่างๆ มีค่าเปลี่ยนไปเรื่อยๆ ตามเวลาที่เปลี่ยนไป จึงเหมาะกับการประมวลผลแบบ interval หรือแบบ loop มากกว่า ซึ่งใช้เวลามากกว่าการประมวลผลแบบ vectorize
ขณะบอทรัน ตอนที่ feed ข้อมูลราคาให้บอท ตามเลือกว่าจะ feed ข้อมูลพอร์ตฯ ข้อมูลบัญชี ข้อมูลออร์เดอร์ที่ค้างอยู่ ฯลฯ ให้พร้อมกันไปด้วยมั้ย
ภาพรวมของ DeepQuant Algorithmic System Architecture คือ มีชุดโรบอทกระจายไปเทรดในหลาย cloud instance เพื่อเทรดในหลายตลาด ซึ่งสามารถติดตามการทำงานและการลงทุนได้ผ่าน mobile app โดยมีรายละเอียดดังนี้

*NOTE: กลไกตัวนี้เลิกใช้แล้ว เนื่องจากเวอร์ชั่นปัจจุบันได้แยกโมเดล ML/DL/RL ออกไป โดยมี REST API มาครอบ เพื่อความสะดวกในการจัดการโมเดล ML/DL/RL มากขึ้น แต่บทความนี้ผมไม่ได้ลบ เนื่องจากเก็บไว้ให้ศึกษา และเผื่อนำบางส่วนมาใช้หรือพัฒนาต่อยอดได้ในอนาคต

กลไกส่วน distributed data pipeline using asynchronous messaging, dataset mapping และสรุป use case ของการใช้ data คร่าวๆ ทั้งส่วน price, indicators, features, trade dataกลไกนี้สามารถรันแบบ local บนเครื่องเดียวกับ frontend robot (MT4/5, cTrader, Amibroker) และ backend robot (Python) ได้ หรือจะแบ่งส่วนกระจายรันหลายเครื่องก็ได้
เวลาออกแบบสถาปัตยกรรมระบบ ผมชอบกำหนด ‘ข้อต่อ’ ไว้หลายจุดเพื่อใช้เป็นจุดเชื่อมต่อส่วนต่างๆ ในโครงสร้างสถาปัตยกรรม ไม่ให้มี coupling ต่อกันโดยตรง
เช่น ระหว่างเลเยอร์กับเลเยอร์, ระหว่าง subsystem กับ subsystem, ระหว่างระบบกับระบบ, ระหว่าง domain กับ domain โดยเฉพาะสิ่งที่อยู่กันคนละ boundary แล้วต้อง interoperate กัน ก็จะไม่ให้มันคุยกันตรงๆ ต้องคุยกันผ่าน ‘ข้อต่อ’ เท่านั้น (ยอมช้านิดแต่ยืดหยุ่น)
ผมชอบเรียกจุดข้อต่อนี้ว่า ‘joint’ เช่น จุดที่ใช้ pattern พวก Adapter, Proxy, Facade, Front Controller, Proactor, Reactor, Gateway, DAO, Interceptor,…
Domain Model ในส่วน Strategy Robot กับ Trading Robot ไม่รวมส่วน Execution Management กับ Portfolio Management
=========================
Domain Model มีประโยชน์ในการ capture องค์ความรู้หลัก (domain knowledge) ของระบบงานออกมา อธิบายโครงสร้างและความสัมพันธ์ระหว่างกัน แบ่งองค์ประกอบสำคัญออกเป็นส่วนๆ เพื่อช่วยให้เข้าใจภาพรวม และใช้ขับเคลื่อนการออกแบบสถาปัตยกรรมระบบและบริหารระบบ
=========================

แบ่งออกเป็น 4 โดเมนหลักได้แก่
Architectural Driver คือ ปัจจัยขับเคลื่อนการออกแบบและการทำงานในส่วนสถาปัตยกรรมระบบ เน้นที่ Quality Attribute หรือ คุณภาพระบบ
คุณภาพของสถาปัตยกรรมระบบที่ออกแบบขึ้น มุ่งเน้นไปที่คุณภาพหลักดังนี้: Reliability, Availability, Modifiability, Usability, Interoperability, Testability, Manageability, Performance
parallel computing กับ distributed computing ต่างกันยังไง? และใช้ร่วมกันได้ยังไง?

เราใช้ influxdb (https://www.influxdata.com/products/influxdb-overview/) ในระบบเรา (รันอยู่ใน docker) ในการเก็บข้อมูลประเภท time series data เช่น ราคา, trade action, trade statistics, trade position ฯ

ส่วนเหตุผล (design rationale) ที่ผมเลือกใช้ InfluxDB คือ

Software Product Line เน้นเรื่องการสร้าง reusable asset เพื่อจะได้ประหยัดเวลา ค่าใช้จ่าย และหยาดเหงื่อ ในการพัฒนาระบบ (โปรดักต์) ใหม่ๆ
ระบบ algorithmic trading ของเรา ผมจึงผสาน software product line architecture เข้าไปด้วย…. เพราะเป้าหมายส่วนตัวของผมเอง ผมจะสร้างโรบอทหลายสิบ หรือกว่าร้อยตัว จึงต้องเน้นคุมโครงสร้างโรบอทให้มีเอกภาพ เพื่อจะให้มี resilient สูง (ยืดหยุ่นสูง) จะได้ปรับปรุงและสร้างโรบอทเพิ่มได้ง่ายในอนาคต