Tiếp nối ba bài viết trước về mã thực giao dịch theo chương trình:
Hàng khô lõi cứng - chi tiết và suy nghĩ về giao dịch tự động theo thời gian thực của hệ thống giao dịch định lượng (1. Vấn đề và khó khăn)
Hệ thống giao dịch định lượng - Chi tiết và suy nghĩ về lời đề nghị của công ty tự động (2. Mục đích của lời đề nghị của công ty)
Hệ thống giao dịch định lượng - Chi tiết và suy nghĩ về ưu đãi thực tế tự động (3. Kỹ năng xử lý)
Ở đây chúng ta sẽ tiếp tục nói về hệ thống giao dịch đa chiến lược và trung tâm thị trường trong cấu trúc tổng thể của mã ưu đãi thực.
Lời nói đầu
Trong ngành thương mại, đặc biệt là các hợp đồng tương lai, thỉnh thoảng sẽ xuất hiện một số bậc thầy giao dịch có đòn bẩy cao và số tiền gốc 100.000 nhân dân tệ có thể dễ dàng biến thành hàng chục triệu. Tuy nhiên, gần như tất cả những người này đều giống như những thiên thạch bay ngang qua bầu trời đêm, sau một khoảnh khắc chói lóa ngắn ngủi, họ lặng lẽ biến mất.
Mặt khác, một nhóm thương nhân kỳ cựu khác đã kinh doanh lâu năm lại phục tùng suốt ngày, nói về tương lai không thể biết trước, lo sợ thị trường và thiên nga đen đến bất cứ lúc nào. đòn bẩy rất thấp để mở các vị thế và cố gắng phạm sai lầm. Hướng đi giống như cỏ trên tường, lắc lư sang trái và phải, không có sự quyết tâm và dũng cảm của bậc thầy. Nhưng vì lý do nào đó, nhóm người này đã hoạt động tích cực trên thị trường. Mặc dù đòn bẩy thấp nhưng vị thế của họ không hề nhỏ.
Trong bản chất con người của thế giới giao dịch, các ngôi sao rất dễ xuất hiện nhưng các ngôi sao sinh nhật thì khó tìm.
Là một nhà giao dịch định lượng còn sống sót, tôi nghĩ một trong những điểm quan trọng hơn trong giao dịch là nhận ra sự cần thiết của nhiều chiến lược. Việc thực hiện đa chiến lược trong giao dịch chủ quan vẫn còn khó khăn vì nhân lực còn hạn chế (trừ khi thuê nhiều nhà giao dịch như tổ chức) và thị trường hoạt động 24/7 và rất dễ bỏ sót điểm vào lệnh. Tuy nhiên, giao dịch theo chương trình tương đối dễ thực hiện. Lập trình làm mất đi khả năng của bộ não và đôi mắt con người trong việc xác định các mô hình xu hướng giá, nhưng nó có sức mạnh thực thi mạnh hơn và khả năng sao chép chiến lược và phân tán vị trí mạnh hơn, điều này có những ưu điểm và nhược điểm.
Với đa mục tiêu, đa chiến lược và đa thông số, vị thế vốn được phân tán một cách tự nhiên. Không còn việc mở và đóng một khoản lãi hoặc lỗ thú vị nữa mà là theo đuổi việc làm phẳng đường cong vốn càng nhiều càng tốt.
Tổng quan
Hình bên dưới là sơ đồ kiến trúc chung của một bộ code thật của tôi.

Toàn bộ kiến trúc được chia thành hai phần. Một là trung tâm thị trường độc lập và một là chương trình giao dịch chịu trách nhiệm thực hiện logic chiến lược.
Thông thường, tôi bắt đầu chương trình với một tài khoản và các tham số chính sách cũng như khóa tài khoản của chúng được phân biệt bằng các tệp cấu hình để mã có thể được chia sẻ hoàn toàn và phiên bản mã dễ quản lý hơn. Một số thông số của chiến lược có thể hơi khác một chút, chủ yếu là để sắp xếp xen kẽ các hoạt động nhất định để chúng không đột ngột chạy cùng lúc.
Trước đây khi có ít chiến lược, tôi bắt đầu chương trình Python với từng chiến lược phụ, nhưng sau đó tôi nhận thấy rằng bộ nhớ máy chủ không đủ. Vì chỉ riêng một chương trình Python đã chiếm khoảng 60M bộ nhớ nếu có nhiều chiến lược và được sao chép sang nhiều tài khoản sẽ nhanh chóng chiếm rất nhiều bộ nhớ. Mặc dù bạn có thể trả nhiều tiền hơn cho một máy chủ mạnh hơn nhưng việc quản lý và bảo trì cũng gặp rắc rối. Cuối cùng, nó đã được thay đổi thành hiện tại. Dựa trên các tài khoản, các chiến lược tương tự trên các loại tiền tệ khác nhau (nhiều loại tiền tệ và nhiều thông số) được nhóm thành một nhóm và sau đó một nhóm chiến lược là một ứng dụng Python. Sau khi chạy nó, tôi cảm thấy mô hình kết hợp này rất tốt cho việc bố trí nhiều tài khoản và nhiều chiến lược. Nó rất thuận tiện cho việc quản lý mã cũng như vận hành và bảo trì theo thời gian thực.
Ưu điểm của một chiến lược phụ cho một ứng dụng Python là mã có thể đơn giản hơn nhiều. Tuy nhiên, hãy tưởng tượng, nếu chiến lược của bạn chạy trên 40 đồng tiền chính hàng đầu và sau đó chạy 3 chiến lược khác nhau trên mỗi đồng tiền thì sẽ là 120 chiến lược phụ. Nếu bạn thêm ba tài khoản nữa, đó sẽ là 360 chiến lược phụ. chiến lược. Mô hình này sẽ không bền vững.
Khi có ít ứng dụng, trước tiên bạn có thể sử dụng thiết bị đầu cuối như tmux để xuất thông tin nhật ký theo thời gian thực, rất thuận tiện cho việc giám sát trong giai đoạn đầu vận hành chương trình. Sau khi mã ổn định ở giai đoạn sau, phần mềm vận hành và bảo trì như pm2 sẽ được sử dụng để quản lý. Chỉ cần phân tích tệp nhật ký thường xuyên trong tương lai.
Trong trường hợp có nhiều mục tiêu, nhiều chiến lược thì phải có trung tâm thị trường độc lập. Thông tin thị trường khác nhau thu được có thể được chia sẻ giữa nhiều chương trình giao dịch, tức là các mô-đun chiến lược ở phía bên trái của hình trên.
Trung tâm báo giá
Hình ảnh dưới đây là hình ảnh chi tiết hơn về mô-đun trung tâm thị trường.

Trước hết, bạn có thể đặt các ký hiệu dòng k sẽ nhận được thông qua tệp cấu hình để dễ dàng thay đổi loại hơn trong tương lai.
Nếu là nhiều khoảng thời gian, thì bạn có thể lấy dòng k khoảng thời gian ước chung của chúng và sau đó mỗi chiến lược có thể lấy mẫu lại theo nhu cầu riêng của mình.
Nếu bạn muốn đơn giản hóa mọi thứ một lần và mãi mãi, thì tốt nhất bạn nên lấy trực tiếp đường K 15 phút, vì về cơ bản, các chiến lược tần số trung bình và tần số thấp, đặc biệt là theo xu hướng, với chu kỳ dưới 15 phút, là khó kiếm tiền về lâu dài.
Ví dụ: nếu bạn có chiến lược 15 phút, 1 giờ hoặc 4 giờ thì trung tâm thị trường chỉ cần có đường K 15 phút. Nếu độ dài dòng k của khoảng thời gian lớn sau khi lấy mẫu lại không đủ thì bạn phải lưu thêm k dòng 15 phút trong cơ sở dữ liệu khi khởi động.
Vì websocket chỉ đẩy thông tin k-line cập nhật mới nhất nên nếu chiến lược của bạn sử dụng chu kỳ k-line tương đối lớn và thời gian xem lại dài, chẳng hạn như 4 giờ ma150, thì sẽ là 600 giờ (25 ngày) dữ liệu, 15 Nếu cần một k dòng mỗi phút thì cần 2.400. Điều này phụ thuộc vào việc mua lại một lần và lưu thông qua api còn lại khi trung tâm thị trường được khởi động, làm cơ sở cho các bản cập nhật liên tục tiếp theo.
Tôi chia toàn bộ trung tâm thị trường thành hai ứng dụng. Trên thực tế, nó cũng có thể được kết hợp thành một ứng dụng, nhưng việc tách chúng ra sẽ mạnh mẽ hơn. Trước tiên hãy nói về Kế hoạch B phụ.
Kế hoạch B
Như đã đề cập trong một số bài viết trước, điều này chủ yếu là để ngăn chặn websocket của PlanA bị ngắt kết nối. Nó được sử dụng như một bản sao lưu tạm thời, đặc biệt là tại thời điểm thoát của chiến lược, để tránh giá đã đi một khoảng nhất định theo hướng ngược lại. vị thế thoát lệnh chưa được thoát ra gây thêm tổn thất ngoài dự kiến.
PlanB rất đơn giản. Nó chủ yếu sử dụng hàm public_get_ticker_price để lấy giá mới nhất của tất cả các hợp đồng vĩnh viễn cùng một lúc. Đây cũng là thông tin giá mới nhất do chính B An tổng hợp.
Hiện tại, B'an có hơn 200 hợp đồng vĩnh viễn. Nếu chúng tôi lấy từng mức giá mới nhất, chúng tôi phải đảm bảo rằng giá của mỗi sản phẩm được cập nhật cứ sau 3 giây. API sẽ được gọi hơn 4.000 lần trong một phút. phải vượt quá giới hạn số có thể. Tuy nhiên, trọng lượng api của hàm được đề cập trước đó chỉ là 2. Nếu nó được sử dụng 3 giây một lần, nó sẽ chỉ tiêu tốn 40 hạn ngạch api mỗi phút. Không cần phải lo lắng về việc vượt quá hạn ngạch.
Sau thử nghiệm của tôi, về cơ bản, Binance tổng hợp giá của tất cả các hợp đồng một lần trong khoảng 1 đến 2 giây, vì vậy đối với giá dự phòng của các chiến lược tần suất trung bình và thấp, độ trễ khoảng 5 giây là hoàn toàn đủ.
Nếu yêu cầu của bạn không cao, thậm chí bạn có thể sử dụng nó để tổng hợp các dòng K thô cho tất cả các hợp đồng, tránh hoàn toàn việc sử dụng websocket. Ngay cả khi loại đường K này không thể được sử dụng để giao dịch, nó cũng có thể được sử dụng để quét toàn bộ thông tin thị trường và sau đó cung cấp điểm vào cho các nhà giao dịch chủ quan dựa trên thuật toán chiến lược được thiết kế riêng của họ, chẳng hạn như phân kỳ và hội tụ trung bình động, nhận dạng mẫu đơn giản, v.v. Tín hiệu. Bằng không làm sao có thể nhìn thấy nhiều tiền như vậy? Nếu bạn có một ngày giao dịch tốt, công cụ này có thể hữu ích để hỗ trợ giao dịch. Tôi đã viết các công cụ tương tự cho người khác trước đây. Nó thực sự tốt khi thị trường tốt, nhưng thị trường gần đây không tốt.
Tất nhiên, giải pháp này chỉ có tác dụng thực tế khi giao dịch nhiều coin. Nếu không, tốt hơn là bạn nên trực tiếp lấy giá BBO handicap của từng loại.
Cũng lưu ý rằng thông tin về giá dự phòng phải được sử dụng thường xuyên trong mã chính. Ví dụ: nó được sử dụng để tính toán số tiền pháp định tương ứng với vị thế và tỷ lệ lãi lỗ gần đúng, không yêu cầu dữ liệu quá chính xác. Bởi vì những đoạn mã và thông tin không được sử dụng thường xuyên có thể đã bị hỏng từ lâu và thậm chí bạn có thể không biết cho đến khi sử dụng. Bất cứ ai đã viết nhiều mã đều biết rằng loại mã phụ lục này có thể dễ dàng bị thay đổi một cách vô tình mà không nhận ra.
Kế hoạch A
Mã chính của trung tâm thị trường. Ứng dụng này có 4 chức năng chính.
Nhận nến cơ sở lịch sử. Như đã đề cập trước đó trong bài viết, mỗi khi bắt đầu, bạn phải đảm bảo rằng mọi dòng K mà tất cả các chiến lược yêu cầu đều có mặt.
quản lý websocket. Mô-đun này phức tạp hơn một chút và cần xử lý các tình huống ngắt kết nối, kết nối lại khác nhau, v.v. Mỗi khi trao đổi đẩy dữ liệu k-line mới, dữ liệu của thanh k-line mới nhất trong cơ sở dữ liệu sẽ được cập nhật.
Ngoài dữ liệu K-line, tôi còn đưa thông tin cập nhật chính xác của từng loại vào trung tâm thị trường. Nghĩa là, hàm public_get_exchangeinfo thu được các mức giá đặt hàng khác nhau và độ chính xác tối thiểu của số lượng đặt hàng, sau đó chuyển đổi chúng thành một loại từ điển thuận tiện. Bằng cách này, tất cả các chiến lược có thể được chia sẻ.
Bước cuối cùng là kiểm tra, kiểm tra độ tỉnh táo đơn giản là đủ. Kiểm tra xem các dòng K thu được có liên tục và không có thiếu sót hay không, sau đó thường xuyên so sánh chúng từng dòng một với các dòng K mà api còn lại thu được, xem khoảng cách giá với giá mà PlanB thu được có quá lớn hay không, v.v. Tóm lại chỉ là vấn đề so sánh, kiểm tra để có thể phát hiện sớm sai sót.
Đây có lẽ là cấu trúc cốt lõi của thị trường chiến lược tần số trung bình đến thấp của tôi. Nếu cần, thông tin cập nhật tài khoản cũng có thể được lấy thông qua websocket. Nhưng điều này rắc rối hơn một chút và hầu như không được sử dụng.