Cách Xây Dựng và Backtest Các Chiến Lược Giao Dịch Hệ Thống với AWS Batch và Airflow

Tác giả: Jacky Wu, Ken Cho, Melody Lin, và Charlie Chiu
Ngày phát hành: 09 JAN 2026
Chuyên mục: Amazon Simple Storage Service (S3), Amazon VPC, Financial Services, Industries

Đây là bài blog thứ hai trong chuỗi bài viết của chúng tôi về mô hình hóa yếu tố. Trong bài blog đầu tiên về mô hình hóa yếu tố, chúng tôi đã phát triển một khung làm việc để nhanh chóng khai thác các yếu tố mới bằng cách sử dụng Amazon Bedrock, AWS Batch và Step Functions từ dữ liệu thay thế. Đọc thêm về phương pháp đó. Sau khi khám phá các yếu tố hiệu quả, bước tiếp theo tự nhiên là tích hợp các yếu tố này vào các chiến lược giao dịch hệ thống.

1. Giới thiệu

Các nhà nghiên cứu và nhà phát triển định lượng của quỹ phòng hộ phải đối mặt với những thách thức đáng kể khi phát triển và backtest các chiến lược giao dịch hệ thống. Những thách thức này bao gồm xử lý khối lượng lớn dữ liệu thị trường lịch sử, đáp ứng các yêu cầu tính toán chuyên sâu và quản lý việc điều phối công việc phức tạp.

Bài blog này trình bày cách các giải pháp AWS gốc trên đám mây biến đổi quy trình phát triển chiến lược cho các nhà định lượng, làm cho nó có thể mở rộng và linh hoạt. Chúng tôi sẽ chỉ cho bạn cách triển khai, backtest và phân tích một chiến lược cổ phiếu long-short sử dụng các yếu tố được xác định thông qua quy trình khai thác yếu tố trước đây của chúng tôi. Tìm mã mẫu trong kho lưu trữ GitHub.

2. Kiến trúc Giải pháp

Giải pháp kết hợp một số dịch vụ AWS để tạo ra một khung làm việc mạnh mẽ, có thể mở rộng cho việc phát triển chiến lược định lượng:


Hình 1: Kiến trúc backtesting tổng thể

Các thành phần cốt lõi của kiến trúc bao gồm:

  • AWS Batch cung cấp tài nguyên tính toán có thể mở rộng cho các công việc backtesting chuyên sâu, cho phép thực thi song song nhiều kết hợp tham số.
  • Amazon Managed Workflows for Apache Airflow (MWAA) điều phối toàn bộ quá trình thực thi backtesting với AWS Batch.
  • ClickHouse trên Amazon Elastic Compute Cloud (Amazon EC2) lưu trữ và xử lý khối lượng lớn dữ liệu thị trường và kết quả backtest.
  • Ứng dụng Streamlit trên Amazon EC2 cung cấp cả giao diện cấu hình tương tác để kích hoạt backtest và các bảng điều khiển toàn diện để phân tích kết quả hiệu suất chiến lược.

Kiến trúc này mang lại một số lợi ích:

  • Sức mạnh tính toán gần như không giới hạn: Mở rộng lên đến hàng nghìn lõi trong các giai đoạn backtesting chuyên sâu và thu nhỏ khi không cần thiết.
  • Hiệu quả chi phí thông qua mô hình trả tiền theo mức sử dụng: Chỉ trả tiền cho các tài nguyên tính toán bạn sử dụng, loại bỏ nhu cầu về phần cứng nhàn rỗi đắt tiền.
  • Xác thực chiến lược nhanh chóng: kiểm tra nhiều biến thể chiến lược đồng thời để xác định các phương pháp tiếp cận đầy hứa hẹn nhanh hơn.
  • Trải nghiệm người dùng được tối ưu hóa: Trừu tượng hóa sự phức tạp của cơ sở hạ tầng thông qua giao diện thân thiện với người dùng, cho phép các nhà nghiên cứu định lượng tập trung vào phát triển chiến lược thay vì cơ sở hạ tầng đám mây.

3. Nguyên tắc Thiết kế và Cách sử dụng

Khung làm việc cung cấp một giải pháp toàn diện để phát triển và kiểm tra các chiến lược giao dịch hệ thống. Dưới đây là cách sử dụng và thiết kế đằng sau nó.

3.1 Khung phát triển và Backtest chiến lược
Trong khung làm việc giao dịch yếu tố này, Backtrader đóng vai trò là công cụ backtesting để xác thực tính khả thi của các chiến lược giao dịch. Backtrader là một khung Python phổ biến để backtesting vì tính linh hoạt và dễ sử dụng của nó. Các khung backtesting nổi tiếng khác bao gồm ZiplinePyAlgoTrade. Ưu điểm của Backtrader bao gồm API trực quan (như lớp BaseStrategy), tài liệu phong phú và hỗ trợ cộng đồng tích cực. Nó cũng cung cấp các nguồn cấp dữ liệu CSV hoặc tùy chỉnh, khả năng vẽ biểu đồ và hỗ trợ các số liệu hiệu suất khác nhau. Tuy nhiên, các nhà định lượng có thể chọn khung làm việc ưa thích của họ dựa trên nhu cầu riêng. Một số có thể chọn tạo các giải pháp backtesting tùy chỉnh để kiểm soát tối đa và chức năng phù hợp.

Trong khung Backtrader, hãy triển khai chiến lược của riêng bạn như sau:

  1. Mở rộng lớp BaseStrategy
  2. Triển khai các phương thức cần thiết để tạo tín hiệu
  3. Cấu hình các tham số quản lý rủi ro (chốt lời, cắt lỗ, thời gian chờ, v.v.)

Ví dụ về triển khai chiến lược cổ phiếu long-short đơn giản long_short_equity.py được bao gồm trong kho lưu trữ GitHub:

from strategies.base_strategy import BaseStrategy
class LongShortEquityStrategy(BaseStrategy):
def generate_signals(self, data, factors, date):
# Your signal generation logic here, s

Trước khi triển khai lên AWS, hãy backtest chiến lược của bạn trong local_backtest.py trên máy tính của bạn, cho phép các nhà phát triển kiểm tra logic giao dịch trên quy mô nhỏ cục bộ.

3.2 Backtesting với AWS Batch
AWS Batch là một giải pháp mạnh mẽ để backtesting song song, cung cấp khả năng mở rộng và hiệu quả chi phí trong việc quản lý tài nguyên tính toán quy mô lớn. Nó tự động xử lý việc cung cấp và quản lý sức mạnh tính toán cần thiết, cho phép bạn chạy nhiều backtest đồng thời mà không gặp rắc rối khi duy trì máy chủ. Phương pháp này giảm thời gian thực thi backtest và loại bỏ chi phí quản lý cơ sở hạ tầng. Bằng cách sử dụng AWS Batch, bạn tập trung vào việc phát triển và tinh chỉnh các chiến lược giao dịch của mình thay vì lo lắng về các vấn đề cơ sở hạ tầng.

Trong khung làm việc giao dịch yếu tố này, hãy tối ưu hóa việc thực thi backtest với AWS Batch như sau:

  1. Sử dụng dockerfile mẫu của chúng tôi để xây dựng một image container với mã chiến lược của bạn.
  2. Đẩy image này lên Amazon ECR.
  3. Tạo một định nghĩa công việc AWS Batch chỉ định image ECR.
  4. Thiết lập môi trường tính toán Batch và hàng đợi công việc.
  5. Gửi các công việc backtest thông qua AWS Console, CLI hoặc SDK.

3.3 Backtesting với Apache Airflow
Apache Airflow là một nền tảng điều phối quy trình làm việc mã nguồn mở nổi bật trong việc quản lý các đường ống dữ liệu phức tạp thông qua Đồ thị Chu trình Hướng (DAGs). Nó cung cấp một khung làm việc mạnh mẽ và linh hoạt để định nghĩa, lên lịch và giám sát các quy trình làm việc, làm cho nó lý tưởng để điều phối các backtest chiến lược giao dịch. Bộ tính năng phong phú của Airflow, bao gồm các phụ thuộc tác vụ, thử lại và giám sát, đảm bảo thực thi đáng tin cậy các đường ống backtesting. Sử dụng AWS Managed Workflows for Apache Airflow (MWAA) giảm chi phí vận hành bằng cách cung cấp một môi trường Airflow được quản lý hoàn toàn.

Tích hợp Apache Airflow với AWS Batch tạo ra một kiến trúc tối ưu cho backtesting chiến lược giao dịch. Sự kết hợp này tận dụng khả năng điều phối quy trình làm việc tinh vi của Airflow với tài nguyên tính toán có thể mở rộng của Batch, cho phép gửi công việc động và thực thi song song nhiều kịch bản backtesting. Airflow có thể được sử dụng để định nghĩa quy trình làm việc backtesting, bao gồm chuẩn bị dữ liệu, thực thi chiến lược và phân tích kết quả, trong khi AWS Batch xử lý tính toán thực tế. Thiết lập này cho phép sử dụng tài nguyên hiệu quả, dễ dàng mở rộng backtest và quản lý tập trung toàn bộ quy trình backtesting.

Giải pháp sử dụng kiến trúc ba lớp của Airflow và Batch để đơn giản hóa backtesting:

  1. Lớp Cấu hình: Lớp BacktestConfig xử lý quản lý, xác thực và kết hợp tham số, vì vậy bạn cần định nghĩa các tham số chiến lược của mình; mô-đun sẽ xử lý phần còn lại.
  2. Lớp Điều phối: Lớp BacktestDAGFactory tạo Airflow DAG với AWS Batch Operator, cung cấp cho bạn một giao diện trừu tượng để tạo DAG backtest chỉ bằng cách truyền các cấu hình.
  3. Lớp Thực thi: Sau đó, DAG sẽ kích hoạt công việc AWS Batch cho các công việc backtest thực tế song song.

Ví dụ sử dụng:

from airflow_backtest_framework.config import BacktestConfig
from airflow_backtest_framework.dag_factory import BacktestDAGFactory
# Defines strategy parameters, date range, initial capital, factors, and parameter grid for optimization.
config = BacktestConfig(
strategy_class='LongShortEquityStrategy',
start_date='2022-01-01',
end_date='2024-12-31',
initial_capital=1000000.0,
factors=['DebtToEquity', 'PriceToEarnings'],
param_grid={
'take_profit_pct': [5.0, 10.0, 15.0], #use your own parameters and values
'stop_loss_pct': [3.0, 5.0, 8.0],
'rebalance_period': [1, 5, 10]
},
batch_job_queue='your-batch-queue',
batch_job_definition='your-batch-job-definition',
s3_bucket='your-results-bucket'
)
# Creates an Airflow DAG with the tasks for backtesting.
dag = BacktestDAGFactory.create_dag(
config=config,
dag_id='my_strategy_backtest',
tags=['backtest', 'trading'],
description='My trading strategy backtest',
validate_data_fn=validate_market_data,
analyze_results_fn=analyze_backtest_results
)

Sau khi tạo tệp DAG của bạn bằng mã khung làm việc, hãy tải nó lên S3 DAG bucket của MWAA (Amazon Simple Storage Service (Amazon S3)) bằng cách sử dụng script 4.deploy_dag.sh được cung cấp. Tiếp theo, thiết lập các biến Airflow cần thiết:

  • batch_job_queue: Tên hàng đợi công việc AWS Batch
  • batch_job_definition: Định nghĩa công việc AWS Batch
  • trading_strategies_bucket: S3 bucket để lưu trữ kết quả
  • Các biến kết nối cơ sở dữ liệu: db_host, db_port, v.v.

Sau khi các biến được cấu hình, hãy kích hoạt DAG từ giao diện người dùng Airflow, giám sát quá trình thực thi của nó và kiểm tra nhật ký khi cần.

Airflow DAG dashboard

Hình 2: Bảng điều khiển Airflow DAG

Airflow DAG event log

Hình 3: Nhật ký sự kiện Airflow DAG

3.3.1 Backtesting với Apache Airflow
Mặc dù khung làm việc hỗ trợ tạo DAG trực tiếp cho người dùng nâng cao, chúng tôi cũng đã phát triển một giao diện người dùng thân thiện, trừu tượng hóa sự phức tạp của việc viết mã Airflow DAG. Giao diện này, được xây dựng như một trang bổ sung trong ứng dụng Streamlit của chúng tôi, cho phép các nhà nghiên cứu và nhà phát triển định lượng:

  1. Cấu hình các tham số chiến lược thông qua giao diện biểu mẫu đơn giản
  2. Chọn các yếu tố và phạm vi ngày để kiểm tra
  3. Định nghĩa lưới tham số để tối ưu hóa
  4. Kích hoạt thực thi backtest chỉ bằng một cú nhấp chuột

Giao diện người dùng giao tiếp với Airflow thông qua API của nó, tự động tạo cấu hình DAG dựa trên đầu vào của người dùng.

Phương pháp này mang lại một số lợi thế:

  1. Trải nghiệm người dùng đơn giản hóa: Các nhà nghiên cứu có thể tập trung vào các tham số chiến lược thay vì chi tiết cơ sở hạ tầng
  2. Giảm đường cong học tập: Không cần hiểu cú pháp Airflow DAG hoặc cấu hình AWS Batch
  3. Thực thi nhất quán: Cấu hình backtest tiêu chuẩn hóa ngăn ngừa các lỗi phổ biến
  4. Khả năng tự phục vụ: Các nhóm định lượng có thể chạy backtest độc lập mà không cần sự trợ giúp của DevOps

3.4 Ứng dụng Streamlit để Quản lý và Trực quan hóa Backtest
Streamlit là một thư viện Python để tạo các ứng dụng web. Nó rất tuyệt vời cho các bảng điều khiển backtesting tương tác, mang lại sự đơn giản và phát triển nhanh chóng. Các nhà định lượng nhanh chóng xây dựng và triển khai các ứng dụng để trực quan hóa kết quả backtest và hiệu suất chiến lược.

Factor Trading Frontend

Hình 4: Ứng dụng Streamlit Backtesting

Ứng dụng Streamlit của chúng tôi đóng vai trò là giao diện thống nhất cho toàn bộ quy trình làm việc backtesting, cung cấp hai chức năng chính: Quản lý Backtest và Trực quan hóa Kết quả.

3.4.1 Quản lý Backtest
Trang Quản lý Backtest cung cấp một giao diện trực quan để cấu hình và thực thi backtest mà không cần viết mã DAG hoặc tương tác trực tiếp với Airflow:

Backtesting management in Streamlit

Hình 5: Quản lý Backtesting trong Streamlit

Các tính năng chính bao gồm:

  1. Cấu hình Chiến lược: Chọn loại chiến lược và định nghĩa các tham số thông qua giao diện biểu mẫu đơn giản
  2. Định nghĩa Lưới Tham số: Dễ dàng thiết lập nhiều kết hợp tham số để tối ưu hóa
  3. Tích hợp AWS MWAA: Triển khai và kích hoạt backtest chỉ bằng một cú nhấp chuột
  4. Giám sát thời gian thực: Theo dõi tiến độ và trạng thái hoàn thành của backtest

Phương pháp này trừu tượng hóa sự phức tạp của cơ sở hạ tầng bên dưới, cho phép các nhà nghiên cứu định lượng tập trung vào phát triển chiến lược thay vì các hoạt động đám mây.

3.4.2 Trực quan hóa Kết quả
Các bộ phân tích tích hợp của Backtrader tạo ra các số liệu hiệu suất backtesting toàn diện bao gồm lợi nhuận, mức sụt giảm tối đa (maximum drawdown), tỷ lệ Sharpe và thống kê giao dịch. Khung làm việc lưu trữ các kết quả này trong cả S3 và ClickHouse, sau đó được trực quan hóa trong ứng dụng Streamlit.

Backtesting visualization in Streamlit

Hình 6: Trực quan hóa Backtesting trong Streamlit

Bảng điều khiển trực quan hóa cung cấp:

  1. Tổng quan hiệu suất: So sánh nhiều backtest trên các số liệu khác nhau
  2. Các chiến lược hoạt động tốt nhất: Xác định các kết hợp tham số tối ưu dựa trên các tiêu chí khác nhau


Hình 7: Các backtest hiệu suất tốt nhất theo tiêu chí khác biệt

Chúng ta cũng có thể đi sâu vào tất cả các lệnh và giao dịch của một backtest cụ thể như dưới đây. Điều này rất hữu ích để chúng ta hiểu bản chất của chiến lược và kỳ vọng đúng đắn về các giao dịch sau khi chiến lược đi vào hoạt động.

Figure 7: Backtesting performance details

Hình 8: Chi tiết hiệu suất Backtesting

Khả năng trực quan hóa toàn diện này giúp các nhà nghiên cứu nhanh chóng xác định các biến thể chiến lược và kết hợp tham số đầy hứa hẹn, tăng tốc đáng kể quá trình tinh chỉnh chiến lược.

4. Triển khai

Thông thường nhất, nghiên cứu định lượng sẽ phát triển chiến lược của riêng họ theo các bước của Khung phát triển và Backtest chiến lược và quyết định các tham số và giá trị backtest. Dưới đây là cách triển khai giải pháp lên AWS sau khi hoàn thành phát triển chiến lược.

Tìm hiểu thêm chi tiết trong tệp README.md của kho lưu trữ GitHub.

4.1 Điều kiện tiên quyết

  • Python 3.12
  • Docker đã được cài đặt và đang chạy
  • AWS CLI được cấu hình với các quyền thích hợp
  • Một Amazon Virtual Private Cloud (VPC) hiện có với cả subnet công cộng và riêng tư, trong đó các subnet riêng tư có NAT Gateway để truy cập internet.
  • Kết nối ClickHouse có thể truy cập được cho AWS Batch backtesting và ứng dụng Trực quan hóa trên Amazon EC2

4.2 Các bước triển khai

  1. Clone kho lưu trữ GitHub: git clone https://github.com/aws-samples/sample-tech-for-trading.git
  2. Cài đặt các phụ thuộc và bootstrap CDK: cd factor-trading cd cdk pip install -r requirements.txt cdk bootstrap aws://YOUR_ACCOUNT_NUMBER/YOUR_REGION
  3. Cấu hình nguồn dữ liệu của bạn trong tệp .env # ClickHouse connection settings CLICKHOUSE_HOST=x.x.x.x CLICKHOUSE_PORT=9000 CLICKHOUSE_USER=default CLICKHOUSE_PASSWORD=your-secret-password CLICKHOUSE_DATABASE=factor_modeling # strategy strategy=LongShortEquityStrategy RESULTS_BUCKET=trading-strategies-results-unique-name
  4. Container hóa các chiến lược giao dịch đã phát triển ./scripts/1.test_docker_build.sh ./scripts/2.build_and_push_ecr.sh --repo YOUR_AWS_ACCOUNT.dkr.ecr.REGION.amazonaws.com/YOUR_REPO
  5. Triển khai Cơ sở hạ tầng AWS, bao gồm AWS Batch và MWAA # Deployment with existing Amzon VPC, such as vpc-123 ./scripts/3.deploy_batch_mwaa.sh --image-uri YOUR_AWS_ACCOUNT.dkr.ecr.REGION.amazonaws.com/YOUR_REPO:latest --existing-vpc vpc-123
  6. Tru cập giao diện người dùng Airflow để cấu hình các biến Airflow của bạn và kích hoạt DAG backtest của bạn. { "batch_job_queue": "Used by BatchOperator of Airflow ", "batch_job_definition": "Used by BatchOperator of Airflow", "trading_strategies_bucket": "RESULTS_BUCKET", "db_host": "DB_HOST", "db_port": "DB_PORT", "db_user": "DB_USER", "db_password": "DB_PASSWORD", "db_database": "DB_DATABASE" }
  7. Cấu hình ứng dụng frontend thống nhất trong src/frontend/.env. # AWS Configuration (for Backtest Management) AWS_REGION=us-east-1 AWS_PROFILE=your-aws-profile-name MWAA_ENVIRONMENT_NAME=TradingStrategiesMwaaEnvironment S3_DAGS_BUCKET=your-mwaa-dags-bucket AIRFLOW_WEBSERVER_URL=https://your-mwaa-webserver-url # ClickHouse Configuration (for Results Visualization) CLICKHOUSE_HOST=x.x.x.x CLICKHOUSE_PORT=9000 CLICKHOUSE_USER=default CLICKHOUSE_PASSWORD=your-secret-password CLICKHOUSE_DATABASE=factor_modeling # Streamlit Configuration STREAMLIT_PORT=8502 STREAMLIT_HOST=0.0.0.0
  8. Triển khai Bảng điều khiển Frontend thống nhất # Deploy with existing VPC and IP whitelist for dashboard access ./scripts/5.deploy_frontend.sh vpc-xxxxxxxxx 1.2.3.4

4.3 Truy cập Ứng dụng

Sau khi triển khai, hãy truy cập ứng dụng frontend thống nhất tại http://INSTANCE_IP:8502, cung cấp:

  • Trang Quản lý Backtest: Tạo, triển khai DAGs lên MWAA và giám sát các backtest chiến lược giao dịch
  • Trang Trực quan hóa Kết quả: Phân tích và so sánh kết quả backtest

Ứng dụng cung cấp một quy trình làm việc hoàn chỉnh từ triển khai DAG đến thực thi backtest và phân tích kết quả.

4.4 Dọn dẹp tài nguyên

Sau khi đánh giá khung làm việc và để tránh các khoản phí không cần thiết, hãy điều hướng đến thư mục triển khai của bạn và chạy:

cdk destroy --all

Hoặc bạn có thể xóa các stack được tạo bởi CDK deploy trong AWS CloudFormation.

5. Kết luận

Bằng cách tận dụng các dịch vụ AWS như MWAA và AWS Batch, chúng tôi đã giải quyết các thách thức chính về quy mô tính toán và điều phối tác vụ trong phát triển chiến lược định lượng. Phương pháp này giảm đáng kể thời gian đưa ra thị trường cho các chiến lược mới, cho phép kiểm tra nhiều biến thể chiến lược hơn và giảm chi phí cơ sở hạ tầng thông qua tự động mở rộng quy mô. Chúng tôi mời bạn khám phá kho lưu trữ GitHub của chúng tôi và bắt đầu tăng tốc nghiên cứu định lượng của riêng bạn ngay hôm nay.

Về tác giả

Jacky Wu

Jacky Wu

Jacky Wu là Kiến trúc sư Giải pháp FSI cấp cao tại AWS với gần 20 năm kinh nghiệm trong lĩnh vực công nghệ và thị trường vốn. Anh đã phát triển các hệ thống giao dịch tự động và giao dịch tần số cao cho tạo lập thị trường, cổ phiếu long-short, chênh lệch thống kê, v.v. Jacky có chứng chỉ Quản lý Rủi ro Tài chính (FRM). Ngoài công việc, Jacky duy trì lối sống năng động thông qua việc chạy 10km thường xuyên.

Ken Cho

Ken Cho

Ken Cho là Kiến trúc sư Giải pháp FSI tại AWS ở Hồng Kông, tập trung vào khách hàng thanh toán, cho vay và quỹ phòng hộ. Với hơn một thập kỷ kinh nghiệm về mạng và được chứng nhận CISSP, Ken chuyên về di chuyển đám mây an toàn và triển khai Amazon EKS. Ken giúp các tổ chức tài chính đạt được sự linh hoạt và đổi mới lớn hơn thông qua chuyển đổi đám mây gốc, hiện thực hóa toàn bộ lợi ích của điện toán đám mây.

Melody Lin

Melody Lin

Melody Lin là Kiến trúc sư Giải pháp FSI tại AWS với hơn 10 năm kinh nghiệm trong ngành CNTT và dịch vụ tài chính. Trước khi gia nhập AWS, cô từng là nhà phát triển và kiến trúc sư đám mây, chuyên về phân tích dữ liệu và kích hoạt giải pháp đối tác. Chuyên môn của cô giúp các tổ chức tài chính tận dụng công nghệ đám mây để thúc đẩy đổi mới và đạt được kết quả kinh doanh.

Charlie Chiu

Charlie Chiu

Charlie Chiu là Kiến trúc sư Giải pháp tại AWS Hồng Kông với động lực chính trong sự nghiệp là niềm đam mê mang các công nghệ khác nhau vào các ngành và khách hàng khác nhau để giải quyết vấn đề của họ. Anh có kinh nghiệm hỗ trợ việc cung cấp các hệ thống quan trọng cho các tổ chức lớn, đặc biệt trong lĩnh vực dịch vụ tài chính. Sở thích hiện tại của anh bao gồm khả năng quan sát hệ thống và các giải pháp liên quan đến dữ liệu.