4 điểm bởi GN⁺ 2023-07-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một dự án cá nhân xây dựng bot giao dịch bán lẻ bằng Go, theo dõi theo thời gian thực hơn 5.500 cổ phiếu niêm yết trên NYSE và NASDAQ và thực hiện giao dịch tự động
  • Ban đầu chỉ ở mức nhanh chóng thua lỗ, nhưng sau nhiều năm thử sai đã phát triển đến mức hòa vốn, đôi khi tiến hóa đến giai đoạn có lãi
  • Gồm ba thành phần cốt lõi: nhà cung cấp dữ liệu, ứng dụng Go và broker; xử lý trong bộ nhớ hơn 60.000 sự kiện mỗi giây khi thị trường mở cửa/đóng cửa
  • Các bài học thực chiến là trọng tâm, như kiểm thử hệ thống bằng mua ngẫu nhiên, tự tạo candlestick dựa trên tick bar, chuyển sang xử lý in-memory
  • Một ví dụ cho thấy độ phức tạp thực tế và tiềm năng của việc xây dựng nền tảng giao dịch cá nhân ở giao điểm của tài chính, lập trình và phân tích dữ liệu

Bối cảnh và động lực dự án

  • Xuất phát từ ý tưởng theo xu hướng: tự động thực thi và quản lý khoảng 500 giao dịch ngắn hạn trên toàn bộ thị trường chứng khoán, thu lợi nhuận nhỏ từ mỗi giao dịch
  • Bắt đầu tự động hóa do các giới hạn của giao dịch thủ công
    • Rủi ro khi đầu tư toàn bộ tiền vào một mã duy nhất là cực kỳ cao, nhưng việc đồng thời theo dõi hàng chục đặt cược ngắn hạn vượt quá khả năng con người
    • Chỉ có thể vào/thoát nhanh ở các cổ phiếu có thanh khoản cao, và cần mua khối lượng nhỏ để khớp lệnh nhanh
  • Quản lý vị thế cũng là thách thức lớn; việc căn đúng thời điểm vào/thoát với hơn 25 đặt cược đồng thời rất phức tạp
  • Tồn tại vấn đề mở rộng: quy mô vốn càng lớn thì số lượng đặt cược cũng phải tăng
  • Cần nhanh chóng tính toán chi phí giao dịch như spread, phí giao dịch, slippage, phí API, thuế để đánh giá tính hợp lý của giao dịch

Cấu trúc giải pháp

  • Phát triển trong nhiều năm một công cụ tự động theo dõi theo thời gian thực hơn 5.500 cổ phiếu trên NYSE và NASDAQ để đưa ra quyết định giao dịch nhanh
  • Chạy trên hệ thống gaming hiệu năng cao trong môi trường Linux: 16 nhân, 128GB RAM, 8TB lưu trữ NVMe, Internet 1Gbps
  • Ba thành phần cốt lõi

    • Data Provider (Massive.com): Bao phủ dữ liệu lịch sử và thời gian thực của toàn thị trường, cung cấp API và tài liệu thân thiện với lập trình viên, trực quan. Mô hình giá đơn giản cho phép truy cập mọi dữ liệu thị trường mà không có giới hạn nhân tạo
    • Ứng dụng Go: Engine cốt lõi thu thập và diễn giải feed dữ liệu, đưa ra các quyết định giao dịch đã tính toán rồi gửi lệnh mua/bán tới API của broker
    • Broker (Interactive Brokers): Cung cấp API đơn giản và đảm nhiệm thực thi lệnh
  • Lý do chọn ngôn ngữ Go

    • Ngành hedge fund dựa vào C++ và Python, nhưng tác giả đã dùng Go nhiều năm và chọn Go vì nó cho thấy sự phù hợp vượt trội với xử lý luồng dữ liệu và tích hợp API

Các chức năng chính của ứng dụng Go

  • Data Ingestion Loop

    • Liên tục thu thập dữ liệu thời gian thực của hơn 5.500 cổ phiếu thông qua Massive.com
    • Ban đầu thử lưu vào cơ sở dữ liệu, nhưng không xử lý nổi hơn 60.000 sự kiện mỗi giây khi thị trường mở/đóng cửa, nên chuyển hoàn toàn sang cách làm in-memory
  • Build Our View Of The Stock Market

    • Xây dựng góc nhìn in-memory theo thời gian thực về toàn bộ thị trường từ dữ liệu thu thập được (theo dõi giá, spread, hoạt động giao dịch, v.v.)
    • Có thể phát hiện và giao dịch cơ hội trước tin tức chính thống
    • Có thể truy cập hoạt động giao dịch premarket, phiên chính thức, after-hours
  • BUY Signal Loop

    • Khi phát hiện cơ hội, gửi yêu cầu lệnh mua tới API của broker
    • Không chỉ là trigger đơn giản; thực hiện các tính toán trước như ước tính lợi nhuận dựa trên spread, quyết định số cổ phiếu cần mua, phản ánh phí và thuế
    • Bao gồm logic cho các tình huống như biến động giá, khớp lệnh một phần, hủy lệnh
  • Position Tracking System

    • Một loop liên tục theo dõi các vị thế đang nắm giữ, so sánh bảng vị thế với giá hiện tại theo thời gian thực để theo dõi lãi/lỗ
    • Có thể kiểm tra qua GUI lý do kích hoạt giao dịch, trạng thái hiện tại và thời điểm bán
    • Đóng vai trò then chốt trong việc tinh chỉnh logic BUY/SELL
  • SELL Signal Loop

    • Khi phát hiện lợi nhuận tốt hoặc thua lỗ quá mức, thực thi lệnh bán qua API của broker
    • Bao gồm logic phức tạp như cập nhật giá của các cổ phiếu biến động nhanh, xử lý khớp lệnh một phần

Giao diện web và ảnh chụp màn hình

  • Thông qua giao diện web tích hợp, có thể duyệt mọi cấu trúc dữ liệu, trực quan hóa dữ liệu, kiểm tra lý do kích hoạt giao dịch và trạng thái hiện tại
  • Màn hình tổng quan toàn thị trường hiển thị giá, spread, v.v. của hơn 5.500 ticker
  • Trang symbol riêng lẻ (ví dụ: Tesla TSLA) hiển thị tick bar và thông tin liên quan
  • Giao diện hiển thị tỷ lệ thắng/thua và các vị thế đang mở hiện tại (phiên ví dụ ghi nhận khoảng lỗ -900 USD)
  • Màn hình hiển thị metadata và biểu đồ của giao dịch thời gian thực (đánh dấu điểm mua bằng đường màu cam)
  • Màn hình console log ghi lại sự kiện thời gian thực (lệnh mua/bán)

Phát triển chiến lược và backtesting

  • Xem ứng dụng Go, chiến lược và backtesting là ba yếu tố cốt lõi riêng biệt
  • Phần lớn thảo luận tập trung vào chiến lược (mean reversion, trend following, linear regression, v.v.) và backtesting, nhưng thực tiễn triển khai chiến lược và logistics trong giao dịch intraday thời gian thực thường bị bỏ qua
  • Tận dụng dữ liệu giao dịch và báo giá lịch sử rộng lớn của Massive.com để khám phá chiến lược và backtesting bằng Python (lý do sử dụng lưu trữ NVMe 8TB)
  • Backtesting được ví như “lái xe tiến về phía trước trong khi nhìn gương chiếu hậu”, nhưng là phương tiện kiểm chứng có giá trị để làm căn cứ phán đoán về spread, thuế, phí, điểm vào/thoát
  • Insight thu được từ phát triển chiến lược và backtesting được chuyển hóa thành logic của BUY Signal Loop

Ví dụ mã

  • Bao gồm mã giả cấp cao và mẫu mã Go thực tế (ứng dụng thật có quy mô khoảng 7.000 dòng)
  • Các cấu trúc dữ liệu chính: TrackedSymbols (map toàn bộ symbol, cờ kích hoạt giao dịch, global lock), Symbol (dữ liệu giao dịch/báo giá thô, Aggregate, Position, v.v.), TradeEvent, QuoteEvent, Aggregate, Position
  • Cấu trúc main loop
    • Thu thập dữ liệu giao dịch/báo giá qua kết nối websocket và parse sự kiện
    • Lưu vào map symbol rồi hợp nhất dữ liệu giao dịch + báo giá thành Aggregate
    • Truyền tín hiệu tới logic mua/bán qua Go channel
    • Cung cấp chức năng tra cứu toàn bộ symbol, vị thế, watchlist tùy chỉnh qua HTTP server

Bài học cốt lõi (Lessons Learned)

  • Hiểu các lớp trừu tượng

    • NYSE và NASDAQ không phải một hệ thống đơn lẻ, mà là hệ thống phân tán quy mô lớn gồm hơn 19 sàn giao dịch
    • Dữ liệu candlestick là một lớp trừu tượng khổng lồ được tạo ra từ dữ liệu giao dịch thô (tick), và việc hiểu sâu điều này là thiết yếu
    • Các quy tắc khác nhau được áp dụng theo từng khung giờ giao dịch của thị trường như premarket, phiên chính thức, after-hours
  • Quản lý lệnh

    • Không chỉ gửi lệnh mua/bán đơn giản; định cỡ vị thế trước, khả năng mua bán nhanh, quản lý đồng thời hơn 25 vị thế, tính thuế/phí, quản lý slippage, theo dõi trạng thái lệnh, v.v. đều góp phần vào giao dịch thành công
  • Edge case

    • Có vô số edge case như thực thi, theo dõi, sửa đổi, hủy lệnh, khớp lệnh một phần, tạm ngừng giao dịch trên thị trường; bỏ sót sẽ gây thiệt hại tiền bạc
    • Bắt buộc kiểm thử bằng paper trading (mô phỏng) thay vì tiền thật
    • Từng trải nghiệm mua một cổ phiếu tăng 40% trong premarket ngay tại đỉnh rồi rơi mạnh, lỗ 40% trong vài phút do thất bại khi điều chỉnh lệnh bán. Premarket và after-hours có quy tắc khác với phiên chính thức, nên biến động cực đoan có thể xảy ra rất nhanh
  • Tận dụng mua ngẫu nhiên

    • Việc kiểm thử chức năng cốt lõi của hệ thống quan trọng hơn phát hiện chiến lược bí mật
    • Nếu thực hiện 1.000 lệnh mua cổ phiếu ngẫu nhiên mỗi ngày trong một tuần, có thể kiểm chứng hiệu quả logic mua/bán, quản lý khớp lệnh một phần, logic hủy lệnh và hệ thống theo dõi vị thế
    • Tích hợp mua ngẫu nhiên vào quy trình kiểm thử trên tài khoản paper trading là cách hiệu quả để đồng thời kiểm chứng nhiều khía cạnh của hệ thống
  • Tick bar vs time bar

    • Candlestick bar do broker cung cấp bao phủ khung thời gian cố định (ví dụ: 30 giây), nhưng khi thị trường biến động mạnh, trong cùng một khoảng thời gian có thể lẫn lộn 100 giao dịch và hàng nghìn giao dịch
    • Dùng dữ liệu tick/báo giá thô để xây dựng bar riêng dựa trên số lượng giao dịch, cung cấp độ phân giải cao hơn nhiều trong các giai đoạn hoạt động mạnh như mở/đóng cửa thị trường, đồng thời có thể thêm các metric tùy chỉnh như spread
  • Chuyển sang in-memory

    • Cách làm cơ sở dữ liệu ban đầu không chịu nổi các spike hoạt động lớn khi thị trường mở/đóng cửa
    • Chuyển hoàn toàn sang cách làm in-memory bằng map lớn có áp dụng mutex lock, giải quyết vấn đề mở rộng
    • Lưu bằng cách dump struct chứa toàn bộ dữ liệu thành file gob nén, có thể reload khi khởi động lại. Trong một ngày, dữ liệu tăng lên hơn 40GB, và cần patch bản build Go để hỗ trợ dump gob ở kích thước này
    • Sau trải nghiệm mất toàn bộ dữ liệu trạng thái đang chạy do mất điện, việc trang bị bộ lưu điện (UPS) trở thành bắt buộc
  • Độ phức tạp và cảm giác cô độc

    • Đây là dự án thách thức và tốn thời gian hơn nhiều so với dự kiến, phát triển từ một thú vui nhỏ thành nỗi ám ảnh thực sự
    • Có thể rất cô độc vì mục tiêu cuối cùng chỉ là tăng số dư tài khoản, đồng thời đi kèm những cung bậc cảm xúc cực đoan
  • Kết hợp Go và Python

    • Hệ thống giao dịch được viết bằng Go, còn khám phá dữ liệu tận dụng hệ sinh thái thư viện khoa học dữ liệu rộng lớn của Python theo cách tiếp cận hybrid
  • Tận dụng PC cá nhân

    • Desktop PC hiện đại, nếu được tối ưu đủ tốt, đủ mạnh để xử lý theo dõi thời gian thực toàn bộ thị trường chứng khoán
  • Tận dụng ChatGPT

    • Thay vì cách trước đây là dựa vào tìm kiếm và đọc tài liệu khi chưa biết cách giải quyết vấn đề, chuyển sang mô tả vấn đề cho ChatGPT, hỏi cách giải quyết và yêu cầu tạo mã, cảm nhận năng suất tăng gấp 3 lần

Trải nghiệm sự kiện thị trường

  • Có thể phát hiện bằng hệ thống riêng và xác nhận trước tin tức nhiều hiện tượng bất thường khác nhau trên thị trường như sự kiện meme stock, các IPO lớn, thị trường bùng nổ/sụp đổ, tin tức Fed và tăng lãi suất
  • Trải nghiệm giống như có hàng ghế đầu để chứng kiến các sự kiện thị trường diễn ra ngay trước mắt

1 bình luận

 
GN⁺ 2023-07-01
Ý kiến trên Hacker News
  • Tôi đã làm trong HFT một thời gian, và toàn bộ lĩnh vực này thực sự rất thú vị; thật vui khi tác giả bài gốc cũng cảm thấy sự hấp dẫn tương tự
    Bản thân nền tảng thường bị bỏ qua trong các cuộc thảo luận, vì giao dịch là lĩnh vực nơi công nghệ cao, độ phức tạp, quản lý chặt chẽ và cạnh tranh khốc liệt dồn lại cùng một chỗ
    Việc xây dựng hệ thống nhập lệnh, hệ thống quản trị rủi ro, hệ thống theo dõi vị thế đã là một thành tựu lớn, nhưng từ góc nhìn của công ty giao dịch thì đó gần như chỉ là chi phí để được tham gia cuộc chơi
    Vì thế mọi người nói về chiến lược. Nền tảng cơ bản thì ai cũng đã có, và giờ là giai đoạn tìm cách kiếm tiền với nó
    Hơn nữa, những người tham gia thị trường cũng không chơi cùng một trò. Trong HFT, người ta cạnh tranh để bào từng nano giây trên FPGA cho alpha tồn tại vài giây, và cắt bớt từng micro giây trên mạng không dây ở New Jersey; trong khi đó, các ngân hàng lại quan tâm đến bầu cử và địa chính trị hơn là thời tiết ở Carteret. Nếu trời mưa thì hôm đó mạng vi ba không hoạt động
    Ở giữa còn có vô số chiến lược nhắm tới alpha kéo dài từ vài giờ đến vài tuần, nên ngay cả việc nói cùng một ngôn ngữ trên diễn đàn công khai cũng khó. Dù vậy đây là một thế giới thú vị, thỉnh thoảng tôi vẫn nhớ nó

    • Nền tảng không chỉ là chi phí tham gia cuộc chơi, mà còn là phần thẳng thắn, trực diện hơn để xây dựng. Ngay cả ở tuyến đầu về độ trễ, phần lớn thời gian cũng chỉ là đẩy tới giới hạn ngân sách chứ không phải khám phá ra điều gì hoàn toàn mới
      Ngược lại, chiến lược mới là nơi cần có khám phá. Vẫn có một vài chiến lược nổi tiếng mà đến nay còn sinh lời, nhưng phần lớn đã rơi vào tay các công ty lớn nhất; còn lại là quá trình tìm tòi. Có chiến lược chỉ có lời trong một chế độ thị trường rất ngắn
      Tôi cũng thỉnh thoảng nhớ nó, nhưng vì đã hợp nhất quá nhiều nên giờ về cơ bản đây là thế giới của các công ty lớn
    • Nói thật thì nó còn có vẻ vô nghĩa hơn cả tiền mã hóa
    • Chỉ là một mẫu duy nhất thôi, nhưng sau khi làm ở một công ty giao dịch theo hợp đồng 2 năm, tôi nhận ra để vận hành doanh nghiệp thì không chỉ có năng lực kỹ thuật
    • Tôi thực sự đồng ý 100%. Tôi đã đọc gần như mọi cuốn sách sờ được bằng tay, nhưng chẳng ai nói về nền tảng, và góc nhìn này rất hợp lý
      Có vẻ như phần lớn những thứ này đều bị cô lập bên trong từng công ty và không được nói ra bên ngoài
      HFT đang chơi một trò hoàn toàn khác. Tôi đã đọc về kiến trúc sàn giao dịch và cả hệ thống đấu dây thực tế; tôi thì nhận dữ liệu từ SIP còn HFT thì kết nối trực tiếp vào sàn giao dịch [1]
      Tôi giao dịch theo đơn vị giây, còn HFT như đã nói là theo đơn vị micro giây nên không thể so sánh. Ở một góc độ nào đó, việc không cạnh tranh trực tiếp với họ lại là điều tốt. Hoặc cũng có thể là vẫn đang cạnh tranh, nhưng dù sao vẫn kiếm được chút tiền
      [1] https://www.researchgate.net/figure/Latencies-in-the-Electro...
    • Tôi đang ở phía giao dịch tần suất trung bình. Tôi tính toán nhiều điều kiện thị trường và cùng lắm chỉ gửi vài lệnh mỗi phút. Tôi muốn hiểu thêm về thế giới HFT
      Về cơ bản tôi đang thắc mắc liệu đó có phải là làm giao dịch tần suất trung bình nhanh hơn hay không, hay là có những lợi thế cụ thể như giành quyền ưu tiên trong hàng đợi lệnh
  • Nếu có câu hỏi về dự án này thì tôi có thể trả lời. Nó bắt đầu như một side project rồi sau đó tôi hoàn toàn bị cuốn vào
    Bản thân hệ thống không có quá nhiều thứ bí mật; điểm cốt lõi là có một nền tảng vững chắc để cắm chiến lược vào
    Có lẽ tôi cũng sẽ open source nó, nhưng trước tiên phải dọn dẹp đống hack tôi đã nhét vào đã

    • Có thể bạn sẽ thấy cái này thú vị: https://www.techtrader.ai/#wall
      Tech Trader được giới thiệu là một hệ thống giao dịch hoàn toàn tự động đã chạy giao dịch thật hơn 10 năm mà không cần con người can thiệp hay cập nhật
      Điểm khác với các hệ thống thuật toán truyền thống là nó không theo kiểu định lượng, statistical arbitrage hay high-frequency, mà được mô tả là nhìn cổ phiếu theo cách con người nhìn, nhưng tận dụng tính kỷ luật lạnh lùng và sự tập trung vô hạn của máy móc
      Từ khi ra mắt vào tháng 12 năm 2012, nó đã giao dịch hoàn toàn tự động bằng vốn thật, và người tạo ra được nói là chỉ là một lập trình viên tự học duy nhất dùng nickname game là pftq
    • Bài viết rất hay. Tôi cũng đang làm một dự án tương tự bằng Go, nhưng chỉ dùng dữ liệu nến theo phút thay vì tick thời gian thực
      Tôi muốn biết liệu bạn có thể chia sẻ cách tiếp cận để cắm nhiều chiến lược vào không. Hệ thống chiến lược kiểu plugin có thể trải qua nhiều lớp nên nhanh chóng trở nên rắc rối
      Tôi cũng muốn biết trong backtest bạn có lưu toàn bộ dữ liệu bid/ask và tick để phát lại không, hay chỉ dùng dữ liệu tổng hợp lịch sử
    • Tôi đã làm giao dịch thuật toán như side project vài năm nay, nhưng tất cả đều thông qua TD Ameritrade. Tôi nhận báo giá và các dữ liệu khác miễn phí nhờ tài khoản, và cũng dùng riêng một số nguồn dữ liệu miễn phí khác
      Đọc bài này xong tôi định thử dựng WebSocket với Polygon, nhưng thấy gói đầu tiên có WebSocket là 29 đô la, còn gói Advanced có dữ liệu thời gian thực là 200 đô la mỗi tháng
      Dữ liệu thời gian thực với số lần gọi API không giới hạn trông khá hấp dẫn, nhưng chiến lược của tôi với quy mô vốn thông thường chỉ có tỷ lệ thắng tối đa khoảng 78%, nên khó biện minh cho 200 đô la mỗi tháng
      Tôi muốn biết bạn đang dùng gói nào, và ưu nhược điểm của gói đó là gì. Nếu muốn trả lời qua email thì địa chỉ có trong hồ sơ của tôi
    • Không biết bạn có email không. Tôi đã xây một hệ thống tương tự bằng F# khá lâu rồi nên muốn kết nối thử
    • Nếu kết nối vào TWS API của IB, và việc khớp lệnh cũng chỉ thực hiện ở đó, thì có phải cũng có lựa chọn nhận giá thời gian thực từ IB API và hoàn toàn không dùng polygon.io hay không
      Tôi không biết IB có gửi feed giá theo thời gian thực hay không. Màn hình TWS vẫn cập nhật liên tục nên có vẻ là dữ liệu được gửi thời gian thực, nhưng tôi thắc mắc không biết sổ lệnh có được cung cấp qua API không
      Tôi biết bài này được đăng trên blog của polygon.io, nhưng tôi tò mò liệu cấu trúc chỉ với IB/TWS API thôi có đủ để chạy hay không
  • Một trong những khái niệm dễ bị hiểu sai nhất trong giao dịch thuật toán là, ở đa số hệ thống, tốc độ không phải yếu tố mang tính quyết định
    Các mô hình như hệ thống của tôi https://grizzlybulls.com/models/vix-ta-macro-mp-extreme đã vượt thị trường đáng kể trong giao dịch thực hơn 3 năm qua, nhưng trung bình chỉ giao dịch khoảng một lần mỗi 18 ngày giao dịch và tín hiệu cũng chỉ được tạo ra gần các mốc phân chia theo giờ
    18 tháng vừa qua kém hơn giai đoạn đầu vì những thay đổi cấu trúc lớn như lạm phát cao và lãi suất tăng nhanh, nhưng từ khi ra mắt trang vào tháng 1/2022 vẫn đạt lợi nhuận +14.11% trong khi SPX là -7.83%
    Việc này đạt được mà không dùng đòn bẩy, và trong cùng giai đoạn mức sụt giảm tối đa cũng chỉ là -16.48%, thấp hơn SPX là -27.57%

    • Việc đưa vào biểu đồ thứ trông giống dữ liệu backtest bắt đầu từ 2009 có vẻ không được thành thật cho lắm. Điểm bắt đầu hoàn toàn tùy ý, và vì bạn nói đã bắt đầu từ 3 năm trước nên đó không phải hiệu suất thực tế
      Cách trình bày này khiến mô hình trông như đã thực sự vượt thị trường rất mạnh. Nếu bạn thật sự có một mỏ vàng chưa được khai phá thì quá ấn tượng, nhưng cá nhân tôi khó tin vì có vài dấu hiệu rủi ro
    • Tôi cũng tò mò các mô hình này dùng dữ liệu bên ngoài ở mức nào, hoặc có bao nhiêu đầu vào của con người hay mức tinh chỉnh định kỳ được đưa vào
  • Nếu quan tâm đến giao dịch thuật toán thì Collective2 là nơi đáng xem. Đây là nơi các kỹ sư cung cấp tín hiệu mua/bán theo hình thức thu phí đăng ký
    Nó giống như một giải hạng dưới của giao dịch thuật toán và khá thú vị
    Hệ thống theo dõi lãi lỗ nên khó gian dối trong báo cáo hiệu suất, và nếu bạn cho phép Collective2 truy cập tài khoản Interactive Brokers thì họ có thể thực thi tín hiệu giao dịch thay bạn
    Dịch vụ này đã tồn tại ít nhất 10 năm nên cũng có thể xem hiệu suất dài hạn, nhưng đa số hệ thống không sống được lâu như vậy
    https://collective2.com/leader-board
    Ngay cả các hệ thống đang đứng top hiện nay cũng hiếm khi trụ được lâu, thường chỉ khoảng 1~2 năm. Điều đó cho thấy alpha của đa số hệ thống biến mất khá nhanh
    Đường cong lợi nhuận cũng lên xuống thất thường, và thường chỉ một vài giao dịch tạo ra phần lớn lợi nhuận

  • Khi phát triển hệ thống giao dịch tự động, các trục quan trọng là luồng dữ liệu và thu thập, tạo đặc trưng, tạo tín hiệu, giao dịch thực tế và quản lý lệnh cũng như điều phối toàn bộ
    Dữ liệu nguồn hiếm khi được dùng trực tiếp để ra quyết định, và tạo đặc trưng tốt thường là yếu tố chính dẫn đến thành công. Đường trung bình động là một ví dụ, nhưng ngày nay chỉ như vậy thì gần như không còn hiệu quả
    Bài viết này cho thấy khía cạnh kỹ thuật của việc xử lý dữ liệu và quản lý lệnh cùng toàn bộ pipeline, nhưng sẽ hay hơn nếu có thêm chi tiết về mở rộng giải pháp và cách triển khai bất đồng bộ
    Đặc biệt là khi dùng Go thì có cấu trúc channel rất phù hợp cho mục đích đó, nên tôi càng tò mò hơn
    Tôi hiểu đó không phải trọng tâm bài viết, nhưng sẽ hữu ích nếu có thêm thông tin tổng quát về logic giao dịch, cách cắm chiến lược mới vào và cách tham số hóa chiến lược hiện có
    Link ở cuối bài khá thú vị, và tôi đang phát triển một bot giao dịch thông minh dựa trên machine learning và feature engineering (https://github.com/asavinov/intelligent-trading-bot), nên những bài như thế này có thể rất quan trọng

    • Đồng ý. Đó là phần tôi đã bỏ sót
      Cấu trúc thì đơn giản, các thành phần giao tiếp với nhau bằng goroutine và channel, rồi khóa bằng một mutex lớn duy nhất
      Khi có dữ liệu mới đi vào, nó tạo các giá trị tổng hợp cần thiết, tức là candlestick dựa trên tick, và dữ liệu đó kích hoạt vòng lặp logic BUY. Nếu phát hiện điều gì đó thì sẽ phát lệnh qua IB API
      Rất đơn giản, không có gì phức tạp. Tôi từng theo dõi hơn 100 vị thế cùng lúc mà nó vẫn chạy ổn, nên không phải đụng nhiều vào logic bất đồng bộ phức tạp
      Các tham số thực ra được hardcode ngay trong vòng lặp BUY. Nghe có thể hơi kỳ, nhưng với cấu hình nhỏ thì chúng không thay đổi thường xuyên đến vậy
      Cách làm là chạy giao dịch vài lần, điều chỉnh giá trị, khởi động lại rồi kiểm thử lại. Trong môi trường enterprise thì có thể sẽ có ngôn ngữ chính quy hoặc hot loading, nhưng với trường hợp của tôi thì hardcode là đủ tốt
  • Bản thân Go hay bất kỳ ngôn ngữ nào cũng không mang lại lợi thế lớn. Thứ tạo ra lợi thế là thuật toán giao dịch, và thứ đó thì luôn khó tìm
    Đã mất vài tháng để tìm các tham số tối ưu, nhưng cuối cùng chúng chỉ hoạt động trên dữ liệu quá khứ, còn thực tế thì hoàn toàn khác
    Nếu thuật toán và chiến lược hoàn hảo, thì dùng Visual Basic cũng có thể tốt hơn Go, Rust hay bất kỳ ngôn ngữ nào khác. Ngôn ngữ chỉ là công cụ
    Dùng Go thì tốt, nhưng tiêu đề hơi dễ gây hiểu nhầm. Mọi người có thể xem đó như một kiểu lợi thế, nhưng thực ra không phải vậy
    Và với HFT, tôi không nghĩ ngôn ngữ có garbage collector là lựa chọn tốt

    • Cuối cùng thì vẫn phải quyết định mua hay bán, với khối lượng bao nhiêu, và quyết định đó sẽ cạnh tranh với những quyết định khác dựa trên các logic khác nhau
      Vì việc phát triển thủ công loại logic đó, tức chiến lược, đương nhiên là khó, nên tôi đã tạo ra một bot giao dịch thông minh để suy ra chiến lược giao dịch từ dữ liệu quá khứ
      https://github.com/asavinov/intelligent-trading-bot
      Hiện tại nó chạy trên tiền mã hóa nhưng cũng có thể áp dụng cho các thị trường khác
      https://t.me/intelligent_trading_signals
      Chỉ hoạt động tốt trên dữ liệu quá khứ nhưng khác với thực tế là tình huống rất điển hình. Điều quan trọng là tạo ra chiến lược vẫn hoạt động được trên dữ liệu tương lai chưa từng thấy
      Thuật toán backtest cũng phải được thiết kế để dữ liệu tương lai không bị rò rỉ về quá khứ
    • Tôi là người viết bài này, và đúng là tôi đã làm nó bằng Go. Lý do là vì Go là ngôn ngữ lập trình tôi dùng chính
      Trong ngành thì C++ và Python được dùng nhiều hơn, nên việc dùng Go có thể còn là một bất lợi, nhưng đó là ngôn ngữ tôi biết dùng
      Tôi không có ý gây hiểu nhầm. Go khá hợp để nhận và xử lý dữ liệu cũng như gọi API từ xa, nên thực tế nó hoạt động tốt
      Tuy nhiên, nếu bạn định dựa vào cái này để tìm việc thì có lẽ sẽ không giúp được nhiều
    • Nếu viết code không phát sinh cấp phát gì cả thì ngôn ngữ có garbage collector vẫn có thể dùng cho HFT
      Có những nơi dùng Java và cấp phát sẵn toàn bộ bộ nhớ cần thiết ngay từ lúc khởi động. Jane Street cũng nổi tiếng là dùng OCaml
    • Còn tùy trường hợp. Tôi từng nghe có nơi dùng Java bằng cách tạo heap lớn và giảm số lần cấp phát xuống gần như 0, rồi khởi động lại ứng dụng theo chu kỳ trước khi heap đầy
      Làm vậy thì hiệu năng khá tốt, đồng thời không phải lo về lỗi bộ nhớ
    • Đó là overfitting. Không chỉ tối ưu hóa bằng máy tính mà ngay cả con người tự tối ưu cũng có thể gặp phải
      Sau khi thử nghiệm một thời gian trên dữ liệu quá khứ, giá trị hữu ích của chính dữ liệu đó sẽ giảm đi
  • Tôi đang làm bot bằng TypeScript vì đó là ngôn ngữ tôi biết, và bằng Python vì có nhiều công cụ
    Đây là công việc quá choáng ngợp và cô độc. Những dự án khác tôi từng làm đều luôn theo nhóm, và dù là nhóm rất nhỏ, công việc có tự chủ đến đâu thì đôi lúc vẫn có họp và standup
    Còn việc này thì tôi đã làm một mình suốt 6 tháng, đến mức từng nghĩ sẽ rủ một người bạn tham gia chỉ để không phải ở một mình

    • Tôi cũng thuộc nhóm đang tự mình phát triển algo trading. Kết nối với nhau để trao đổi cũng hay đấy
    • Bài này đến rất đúng lúc. Tôi đang định lấy cớ theo dõi quyền chọn để học thêm vài công nghệ khác
      Vì là side project nên có thể tôi sẽ không tiến xa được lắm, nhưng lúc nào cũng sẵn sàng trò chuyện
    • Tôi tò mò không biết bạn kỳ vọng cạnh tranh với dân chuyên như thế nào. Khó mà nhanh hơn họ, và nếu không có vài người tầm tiến sĩ toán thì khả năng tạo ra thuật toán tốt hơn họ cũng thấp
      Cách duy nhất tôi nghĩ ra là có được dữ liệu mà họ không có
  • Tôi thấy bài này hoàn toàn vô nghĩa và mang tính câu click. Tóm lại chỉ là: “dữ liệu thị trường thì có thể dùng polygon.io, nhưng algo trading thì dù sao cũng khó nên hiện chưa có gì đáng để chia sẻ”

    • Tôi là người viết bài này, và tôi rất tiếc khi bạn cảm thấy như vậy
      Cá nhân tôi muốn chia sẻ cấu trúc cấp cao khi tự xây hệ thống của riêng mình. Khi tôi bắt đầu chui vào cái hang thỏ này, tôi đã ước có một bài như vậy
      Nếu bạn cho biết nên bổ sung điều gì để bài tốt hơn, tôi rất sẵn lòng cập nhật
  • Hãy tìm những người thích vòng phản hồi thuần túy giữa code, chiến lược và tiền bạc mà trading mang lại
    Tôi đã nghiên cứu timing và tương quan giữa cổ phiếu và chỉ số như một nguồn alpha, và cũng đạt được chút kết quả
    Giờ tôi đang cố tự động hóa quy trình đó, và thật sự rất thích chính công việc này
    Tôi không định làm market maker, cũng không định liên tục nhảy từ mã này sang mã khác. Tôi tập trung mài giũa các mô hình chính xác để kiếm lời thật tốt trên một vài mã
    Các công cụ hữu ích gồm có TradingView và các chỉ báo/chiến lược Pinescript, mô hình Excel dùng dữ liệu xuất ra cho backtest, Python và Go cho machine learning phía backend, và ChatGPT để lặp thử code mới nhanh hơn
    Nếu quan tâm thì tôi muốn trao đổi qua trading @ dianazink.com

  • Bài viết hay, phần giải thích cụ thể rất tốt và đặc biệt là các ảnh chụp màn hình
    Tôi hiểu việc không đi sâu vào chiến lược, nhưng muốn hỏi liệu giao dịch có hoàn toàn dựa trên phân tích kỹ thuật hay bạn còn dùng dữ liệu bên ngoài hoặc các luồng dữ liệu thay thế
    Nói cách khác, đây có phải là một hệ thống gần như khép kín chỉ có đầu vào từ Polygon và đầu ra qua API của IB, hay là một cấu hình rộng hơn có cả các feed dữ liệu tùy chỉnh như trang tin, Twitter, Reddit
    Nếu là trường hợp sau thì tôi cũng tò mò bạn cân bằng việc đó với backtest quá khứ như thế nào, nhất là khi độ bao phủ dữ liệu lịch sử của một số nguồn chỉ mang tính từng phần

    • Dữ liệu của tôi đều đến từ polygon.io và không có dữ liệu bên ngoài
      Gần đây tôi đang xem xét cách dùng bảng tra cứu các giá trị lịch sử đã tính sẵn để phát hiện bất thường, chẳng hạn như “hoạt động này ở mã này có bình thường không”
      BXRX hôm nay là một ví dụ hay [1]
      Tôi cũng đang xem hoạt động giao dịch quyền chọn để thử dùng làm tín hiệu
      [1] https://www.google.com/search?q=BXRX