Phát triển chiến lược CTA từ giao dịch định lượng đến quản lý tài sản để thu được lợi nhuận tuyệt đối

Tác giả: , Tạo: 2019-06-26 10:27:41, Cập nhật: 2023-10-30 20:30:50

[TOC]

img

Lời mở đầu

Tại sao bạn nên học bài học này?Những gì bạn sẽ học được từ bài học này? Đầu tiên, bài học này dựa trên ngôn ngữ lập trình JavaScript và Python, ngôn ngữ chỉ là một công nghệ, cuối cùng chúng ta cũng sẽ áp dụng công nghệ này cho một ngành công nghiệp.

Nếu bạn đang chuẩn bị bước vào lĩnh vực giao dịch định lượng, bạn cũng sẽ được giúp đỡ nếu bạn là một người đam mê đầu tư cổ phiếu hoặc tương lai, thì giao dịch định lượng hoàn toàn có thể hỗ trợ giao dịch chủ đề của bạn, phát triển chiến lược giao dịch để có thể kiếm lợi nhuận trên thị trường tài chính, cũng như mở rộng kênh và nền tảng đầu tư tài chính cho chính mình.

Trước đây, tôi sẽ nói về kinh nghiệm giao dịch cá nhân của tôi, tôi không phải là một chuyên gia tài chính, tôi học chuyên ngành thống kê. Tôi bắt đầu kinh doanh cổ phiếu chủ quan từ khi còn là sinh viên, sau đó tình cờ trở thành một chuyên gia giao dịch định lượng của quỹ tư nhân trong nước, chủ yếu làm nghiên cứu chiến lược và phát triển chiến lược.

Trong vòng giao dịch này, trước và sau hơn một chục năm, tôi đã phát triển nhiều loại chiến lược. Ý tưởng đầu tư của tôi là: kiểm soát rủi ro trên tất cả, tập trung vào lợi nhuận tuyệt đối. Chủ đề khóa học của chúng tôi là: Từ giao dịch định lượng đến quản lý tài sản để phát triển chiến lược CTA với lợi nhuận tuyệt đối.

Một, chiến lược CTA tương lai và logic để kiếm tiền

1.1 Nhận thức về CTA tương lai

Có thể ai đó sẽ hỏi CTA là gì? CTA là gì? CTA được gọi là cố vấn giao dịch hàng hóa ở nước ngoài và thường được gọi là người quản lý đầu tư trong nước. CTA truyền thống là tập trung tiền của các nhà đầu tư lớn, sau đó ủy thác cho các tổ chức đầu tư chuyên nghiệp, và cuối cùng thông qua cố vấn giao dịch (tức là CTA) đầu tư vào tương lai chứng khoán, tương lai hàng hóa, tương lai trái phiếu quốc gia.

Nhưng thực tế, với sự phát triển và phát triển của thị trường tương lai toàn cầu, khái niệm của CTA cũng ngày càng mở rộng, rộng hơn nhiều so với tương lai truyền thống. Nó không chỉ có thể đầu tư vào thị trường tương lai, mà còn đầu tư vào thị trường lãi suất, thị trường chứng khoán, thị trường ngoại hối và thị trường tùy chọn, v.v.

Trước những năm 1980, công nghệ đĩa điện tử chưa phát triển, khi đó hầu hết các nhà giao dịch chỉ định xu hướng tương lai của các hợp đồng tương lai hàng hóa bằng cách vẽ theo tay các chỉ số kỹ thuật như chỉ số William, KDJ, RSI, MACD, CCI. Sau đó, các nhà giao dịch đã thành lập các quỹ CTA chuyên dụng để giúp khách hàng quản lý tài sản.

Sự thay đổi quy mô quản lý quỹ CTA img Đơn vị: 1 tỷ USD

Nhìn vào biểu đồ trên, đặc biệt là với sự gia tăng của giao dịch định lượng, quy mô của quỹ CTA toàn cầu đã tăng từ 130,6 tỷ USD năm 2005 lên hơn 300 tỷ USD vào năm 2015.

Trong khi đó, chỉ số CTA của CTA đã tăng cùng với tỷ lệ tăng trưởng của quỹ CTA, và chỉ số CTA của CTA là chỉ số đại diện của các nhà tư vấn giao dịch hàng hóa trên toàn thế giới. Từ cuối năm 1979 đến cuối năm 2016, chỉ số CTA của CTA đã đạt mức lợi nhuận tích lũy lên đến 28.95 lần, tỷ lệ lợi nhuận hàng năm là 9.59%, tỷ lệ Sharpe là 0.37, và mức thu hồi tối đa là 15.66%.

Vì trong danh mục đầu tư, các chiến lược CTA thường có mức độ tương quan rất thấp với các chiến lược khác. Như trong hình dưới, trong thời kỳ đợt thị trường chứng khoán toàn cầu giảm từ 2000-2002 và cuộc khủng hoảng cho vay toàn cầu năm 2008, chỉ số quỹ CTA của Barclays không chỉ không giảm mà còn đạt được lợi nhuận tích cực, CTA có thể cung cấp lợi nhuận mạnh mẽ khi thị trường chứng khoán và thị trường trái phiếu xảy ra khủng hoảng.

img

Sự phát triển của CTA ở Trung Quốc chỉ gần một thập kỷ, nhưng đà phát triển rất mạnh, phần lớn là do lợi ích của môi trường giao dịch tương lai hàng hóa trong nước mở hơn, ngưỡng vốn giao dịch thấp hơn, sử dụng hệ thống tiền bảo hiểm cho phép giao dịch hai chiều, chi phí giao dịch thấp hơn, kiến trúc công nghệ của sàn giao dịch tiên tiến hơn so với cổ phiếu và dễ giao dịch hơn.

Kể từ năm 2010, quỹ CTA chủ yếu tồn tại dưới dạng quỹ tư nhân. Với chính sách trong nước mở rộng dần phạm vi đầu tư của các quỹ độc quyền, quỹ CTA bắt đầu tồn tại dưới dạng quỹ độc quyền, cách hoạt động công khai và minh bạch hơn cũng trở thành công cụ cần thiết để phân bổ tài sản của nhiều nhà đầu tư hơn.

img

Như biểu đồ trên cho thấy, bất kể từ mức độ dễ tiếp cận, ngưỡng vốn, cách thực hiện chiến lược giao dịch và giao dịch API, chiến lược CTA cũng phù hợp hơn với các nhà giao dịch cá nhân so với các chiến lược giao dịch khác. Các hợp đồng tương lai trong nước rất nhỏ, chẳng hạn như một số nghìn đô la cho một món ngô hoặc đậu nành, có thể được giao dịch, hầu như không có ngưỡng vốn, và một phần khác của chiến lược CTA có nguồn gốc từ phân tích kỹ thuật truyền thống, vì vậy nó vẫn dễ dàng hơn so với các chiến lược khác.

img

Quá trình thiết kế chiến lược CTA cũng tương đối đơn giản, trước tiên xử lý dữ liệu lịch sử trước khi nhập vào mô hình định lượng, mô hình định lượng bao gồm các công cụ như mô hình toán học, thiết kế lập trình và các chiến lược giao dịch được hình thành để tạo ra tín hiệu giao dịch bằng cách phân tích dữ liệu này.

1.2 Các loại chiến lược CTA tương lai

Từ chiến lược giao dịch, chiến lược CTA cũng đa dạng: nó có thể là chiến lược xu hướng hoặc chiến lược hợp lý; có thể là chiến lược đường dài trong chu kỳ lớn hoặc chiến lược đường ngắn trong ngày; chiến lược logic có thể dựa trên phân tích kỹ thuật hoặc phân tích cơ bản; có thể là giao dịch chủ quan hoặc giao dịch hệ thống.

Chiến lược CTA có các phương pháp phân loại khác nhau, theo phương pháp giao dịch, có thể được chia thành: giao dịch chủ quan và giao dịch hệ thống, ngoại quốc CTA chiến lược phát triển tương đối tiên tiến, giao dịch hệ thống CTA chiến lược đã gần 100%. Theo phương pháp phân tích, có thể được chia thành: phân tích cơ bản và phân tích kỹ thuật. Theo nguồn thu nhập, có thể được chia thành: giao dịch xu hướng và giao dịch lung lay.

Nhìn chung, các chiến lược CTA chiếm khoảng 70% thị trường giao dịch toàn bộ, chiến lược xu hướng chiếm khoảng 25% và chiến lược ngược xu hướng hoặc đảo chiều xu hướng chiếm khoảng 5%. Trong số đó, các chiến lược xu hướng chiếm tỷ lệ lớn nhất, tùy theo chu kỳ nắm giữ, có thể được chia thành: giao dịch tần suất cao, giao dịch trong ngày, giao dịch ngắn trung bình, giao dịch dài trung bình.

Chiến lược thành phố thường xuyênHiện nay, thị trường có hai chiến lược giao dịch tần số cao phổ biến, một là chiến lược giao dịch tần số cao và một là chiến lược giao dịch tần số cao. Chiến lược giao dịch tần số cao là cung cấp thanh khoản trong thị trường giao dịch, nghĩa là trong thị trường giao dịch có các nhà giao dịch, một người muốn mua bán giao dịch, nhà giao dịch phải đảm bảo giao dịch của mình có thể được thực hiện. Nếu thị trường không đủ thanh khoản, dẫn đến việc không thể giao dịch, nhà giao dịch phải mua bán đối thủ của người khác.

Chiến lược ưu đãi tần số caoPhương pháp tính toán của ETF cho phép tính toán giá mong đợi của một ETF theo cùng một phương pháp. Giá của chỉ số ETF có thể được chiết khấu giá mong đợi của ETF, có thể có một chênh lệch, thường chênh lệch này sẽ hoạt động trong một kênh giá, nếu chênh lệch vượt qua kênh, bạn có thể giao dịch chênh lệch này, chờ đợi sự trở lại của chênh lệch và kiếm lợi nhuận từ đó.

Chiến lược nội bộNếu theo nghĩa đen, miễn là không nắm giữ hàng đêm, nó có thể được gọi là chiến lược giao dịch trong ngày. Vì thời gian nắm giữ giao dịch trong ngày ngắn hơn và thường không thể kiếm được lợi nhuận ngay lập tức sau khi tham gia thị trường, họ sẽ nhanh chóng rời khỏi thị trường. Do đó, rủi ro thị trường của phương pháp giao dịch này thấp hơn.

Chiến lược đường dàiVề lý thuyết, các chu kỳ nắm giữ dài hơn, khối lượng chiến lược lớn hơn, tỷ lệ lợi nhuận rủi ro thấp hơn. Đặc biệt trong giao dịch tổ chức, vì khối lượng chiến lược ngắn hạn, vốn lớn không thể đi vào và ra trong thời gian ngắn, nên sẽ có nhiều chiến lược dài trung gian hơn. Thông thường chu kỳ nắm giữ là vài ngày, vài tháng hoặc thậm chí lâu hơn.

Dữ liệu chiến lược CTAThông thường, các chiến lược CTA được nghiên cứu bằng dữ liệu phút, giờ và ngày, bao gồm: giá mở, giá cao nhất, giá thấp nhất, giá đóng, khối lượng giao dịch, v.v.; chỉ một số ít các chiến lược CTA sử dụng dữ liệu Tick, chẳng hạn như dữ liệu sâu về giá mua, giá bán, giá mua, khối lượng bán trong dữ liệu L2.

img

Các ý tưởng cơ bản của chiến lược CTA, chúng tôi bắt đầu dựa trên các chỉ số kỹ thuật truyền thống, vì có nhiều tài liệu tham khảo công khai hơn, logic thường khá đơn giản, phần lớn dựa trên các nguyên tắc thống kê. Ví dụ: các chỉ số kỹ thuật mà mọi người đều quen thuộc: MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, v.v.

Có một số mô hình giao dịch cổ điển trên thị trường, có thể được sử dụng và cải thiện, bao gồm: đa đường dây, DualThrust, R-Breaker, giao dịch biển, giao dịch lưới, v.v.

Đây là các chiến lược giao dịch dựa trên phân tích kỹ thuật truyền thống, quá trình này là dựa trên dữ liệu lịch sử và ý tưởng giao dịch đúng, tinh chế các yếu tố hoặc điều kiện mua bán có khả năng lợi thế và giả định thị trường vẫn tồn tại trong thời gian tương lai, cuối cùng thực hiện chiến lược giao dịch bằng mã và giao dịch tự động.

Lợi thế lớn nhất của chiến lược CTA là có thể thu được lợi nhuận tuyệt đối cho dù thị trường hiện tại có tăng hoặc giảm, đặc biệt là khi thị trường chuyển đổi nhanh chóng, hoặc xu hướng thị trường rõ ràng, lợi thế của chiến lược này là rất lớn.

1.3 Nguyên tắc lợi nhuận của chiến lược CTA tương lai

Các chiến lược CTA tương lai tạo ra lợi nhuận chủ yếu vì những điều sau:

  1. Động thái của giá là ngược lại, nó luôn luôn tiếp tục theo cách xu hướng. Khi các nhà đầu tư quan sát thấy giá tăng, họ sẽ mua theo gió, và kết quả là giá tăng thêm. Giá giảm cũng đúng như vậy. Vì các nhà đầu tư là hành vi phi lý hơn, đôi khi chúng ta sẽ thấy giá tăng theo cách kỳ quặc, giảm theo cách kỳ quặc.
  2. Sự khoan dung của mỗi nhà đầu tư đối với tỷ lệ lợi nhuận và tổn thất là không đối xứng và khả năng chịu rủi ro là khác nhau. Đối với hầu hết các nhà đầu tư bán lẻ, họ có xu hướng chọn phương pháp giao dịch theo xu hướng bảo thủ hơn và thị trường dễ dàng đi theo xu hướng.
  3. Sự hình thành giá cả được quyết định bởi giao dịch, đúng là sau đó giao dịch là tất cả những người thúc đẩy, nhưng bản chất của con người là khó thay đổi, điều này dẫn đến nguyên nhân của hình thức cố định lặp đi lặp lại, chiến lược có hiệu quả trong việc dự đoán lại dữ liệu lịch sử, nhưng cũng dự đoán tương lai có thể và sẽ có hiệu quả.

Ngoài ra, các giao dịch theo dõi xu hướng có đặc điểm là mất ít tiền khi không có thị trường và kiếm được nhiều tiền khi thị trường đến, nhưng những người đã giao dịch đều biết rằng thị trường thường bị biến động bởi thị trường, chỉ có một thời gian ngắn là thị trường xu hướng. Vì vậy, chiến lược theo dõi xu hướng có tỷ lệ thắng thấp trong giao dịch, nhưng tổng thể, tỷ lệ lợi nhuận và lỗ của mỗi giao dịch lớn hơn.

Do các chiến lược theo dõi xu hướng không ổn định về lợi nhuận, nhiều tổ chức đầu tư sẽ xây dựng một danh mục đầu tư với nhiều chiến lược đa dạng, trong đó cũng có một số chiến lược đảo ngược. Chiến lược đảo ngược là mối quan hệ tương quan với giá theo chuỗi thời gian có hệ số âm, tức là hút cao và hút thấp.

Sự liên quan của CTA với các tài sản truyền thống img

Chúng ta nhìn vào biểu đồ trên, theo lý thuyết, nhiều chiến lược có phong cách khác nhau hoặc tương quan thấp hơn sẽ tạo ra các tín hiệu giao dịch khác nhau trong khi đối mặt với các biến đổi giá cả thị trường cùng một lúc. Vì nhiều đường cong lợi nhuận chồng lên nhau, tạo nên sự bổ sung cho lợi nhuận tổng thể, đường cong lợi nhuận sẽ trở nên mịn màng hơn, làm giảm sự biến động của lợi nhuận.

Từ quan điểm trên, thay vì phát triển một chiến lược bậc bậc thầy, thì làm thế nào để kiểm soát các chiến lược này? Ở đây, chúng ta có thể dựa vào thuật toán rừng ngẫu nhiên trong học máy, rừng ngẫu nhiên không phải là một thuật toán độc lập mà là một khuôn khổ quyết định bao gồm nhiều cây quyết định. Tương đương với các chiến lược mẹ trên một cây quyết định.

Tiếp theo, cần thiết phải thiết kế một chiến lược chủ để đánh giá tính thanh khoản, lợi nhuận và tính ổn định của các giống trong thị trường tương lai toàn bộ hàng hóa, sàng lọc các loại hàng hóa tương lai có lợi nhuận có tỷ lệ biến động thấp, lọc trung lập ngành, giảm thêm tỷ lệ biến động tổng thể bằng cách phân bố các ngành của danh mục, và cuối cùng giao dịch bằng cách kết hợp giá trị thị trường để xây dựng các loại hàng hóa tương lai thực tế.

Mỗi giống cũng có thể cấu hình nhiều chiến lược tham số, có thể chọn các tổ hợp các tham số gần có hiệu suất tốt, khi xu hướng thị trường rõ ràng, nhiều chiến lược tham số thường hoạt động đồng bộ, tương tự như mua cổ phiếu; khi thị trường đang trong tình trạng biến động, nhiều chiến lược tham số thường hoạt động không đồng bộ, do đó, mỗi nhóm có nhiều hoặc ít để bảo hiểm rủi ro, tương tự như mua cổ phiếu; điều này có thể làm giảm thêm tỷ lệ tái đo lớn nhất trong danh mục đầu tư, trong khi vẫn giữ cho lợi nhuận tổng thể không thay đổi.

2, Trường hợp chiến lược CTA tương lai cổ điển

Newton đã từng nói: Nếu tôi thấy xa hơn người khác, đó là vì tôi đứng trên vai một người khổng lồ.

Các chiến lược CTA được công bố trên thị trường có các chiến lược đơn tuyến, chiến lược Brainstorming, chiến lược giao dịch biển, chiến lược động lực, chiến lược ưu đãi, v.v. Các chiến lược giao dịch định lượng đều có một đặc điểm là một cái chết nhanh chóng, một chiến lược một khi được công bố sẽ thất bại một cách chậm chạp. Nhưng điều đó không ảnh hưởng đến việc chúng ta học các chiến lược này, rút ra những yếu tố của chúng, để có thể nhìn thấy vấn đề trên vai của gã khổng lồ.

2.1 Phân tích cơ bản về tương lai (thông số, chênh lệch cơ bản, giá)

Phân tích cơ bản không cần phải quan tâm đến xu hướng giá ngắn hạn, tin rằng giá trị cuối cùng sẽ được phản ánh trên giá, mà là phân tích các yếu tố ảnh hưởng đến giá và quyết định giá trị của giống. Thông thường sử dụng phương pháp phân tích từ trên xuống: từ các yếu tố vĩ mô, các yếu tố giống và các yếu tố khác.

img

Chúng ta nhìn vào biểu đồ trên, có rất nhiều yếu tố ảnh hưởng đến giá hàng hóa, tổng cộng có hàng chục mục, thường được phân chia thành hàng chục mục khác, và dữ liệu này đang thay đổi liên tục. Một nhà bán lẻ đơn lẻ muốn có được những dữ liệu khổng lồ này đã là điều không thể làm được, đừng cần phân tích khách quan.

Trong thực tế, phân tích cơ bản của hợp đồng tương lai hàng hóa không phải là phân tích tất cả các yếu tố, chúng ta chỉ cần nắm bắt các yếu tố cốt lõi của phân tích cơ bản để có thể tìm ra các quy tắc trong thông tin phức tạp.

Các yếu tố vĩ môDữ liệu kinh tế vĩ mô rất phức tạp và thay đổi, mỗi ngày, từng phút, có rất nhiều dữ liệu kinh tế được công bố, từ các chính trị gia, ngân hàng trung ương, ngân hàng, chính thức và không chính thức. Ngoài cuộc khủng hoảng chính trị và kinh tế, phân tích vĩ mô là một tài liệu tốt để trò chuyện và không có nhiều tính thực tế. Chuyên gia quản lý quỹ nổi tiếng người Mỹ Peter Lynch đã đưa ra quan điểm: Tôi không dành nhiều hơn mười lăm phút mỗi năm để phân tích các diễn biến kinh tế lớn.

Các yếu tố đa dạngTrong phân tích cơ bản, phân tích đa dạng chủ yếu là phân tích nước tăng, nhu cầu cung, mối quan hệ hàng hóa, lợi nhuận công nghiệp, v.v.

Bạn bè làm tương lai đều biết rằng tương lai hàng hóa trong nước có thể đơn giản được chia thành: sản phẩm công nghiệp và nông sản. Phương pháp phân tích sản phẩm công nghiệp và nông nghiệp có sự khác biệt, chúng tôi giải thích từ cả hai khía cạnh cung và nhu cầu, trong sản phẩm công nghiệp, cung là tương đối ổn định, trừ khi có sự đột phá kỹ thuật lớn, năng lực sản xuất là ít có khả năng thay đổi đáng kể trong thời gian ngắn, vì vậy các yếu tố ảnh hưởng đến giá sản phẩm công nghiệp chủ yếu là nhu cầu. Trong sản phẩm nông nghiệp, nhu cầu tương đối ổn định, trong thời gian dài nhu cầu sản phẩm nông nghiệp có sự thay đổi, nhưng trong thời gian ngắn nhu cầu sản phẩm nông nghiệp có xu hướng ổn định, vì vậy các yếu tố ảnh hưởng đến giá sản phẩm nông nghiệp chủ yếu là cung cấp.

Do đó, theo luật kinh tế, giá hàng hóa cuối cùng được quyết định bởi mối quan hệ cung và cầu, và theo lý thuyết, giá hàng hóa tương lai có thể được xác định miễn là có thể có được dữ liệu về cung và nhu cầu. Đối với các sản phẩm công nghiệp, dữ liệu cung dễ dàng hơn để có được, nhưng khó khăn hơn để có được dữ liệu nhu cầu, đối với các sản phẩm nông nghiệp, dữ liệu nhu cầu dễ dàng hơn để có được, nhưng rất khó để có được dữ liệu cung.

Trong thực tế, chúng ta cũng có thể làm giảm thêm, kết quả của việc cung ứng và nhu cầu trong thị trường kinh tế là hàng tồn kho, chúng ta có thể đánh giá mối quan hệ mạnh yếu của cung ứng và nhu cầu trên thị trường thông qua dữ liệu hàng tồn kho. Nếu hàng tồn kho cao, điều đó cho thấy sức mạnh cung ứng trên thị trường lớn hơn nhu cầu, với điều kiện bên ngoài không thay đổi, giá hàng sẽ giảm. Nếu hàng tồn kho thấp, điều đó cho thấy sức mạnh nhu cầu trên thị trường lớn hơn nguồn cung, với điều kiện bên ngoài không thay đổi, giá hàng sẽ tăng.

Ngoài việc phân tích kho hàng hóa, cũng cần phân tích sự khác biệt giá giữa thị trường hiện tại và thị trường tương lai, hay cái gọi là chênh lệch giá. Nếu giá tương lai lớn hơn giá hiện tại, chúng ta gọi đó là tiền mặt tăng; nếu giá tương lai thấp hơn giá hiện tại, chúng ta gọi đó là tiền mặt tăng. Theo hệ thống giao dịch tương lai, vào ngày giao hàng tương lai, giá tương lai nên bằng giá hiện tại.

img

Dù là tăng giá hay giảm giá, do những hạn chế trong hệ thống giao dịch tương lai, về lý thuyết giá tương lai ngày giao hàng nên bằng giá hiện tại. Khi ngày giao hàng đến gần, giá hiện tại và giá tương lai sẽ có xu hướng phù hợp, một là giá tương lai quay trở lại hiện tại và một là giá hiện tại quay trở lại tương lai.

Theo nguyên tắc trên, chúng ta có thể dùng cả kho dự trữ và chênh lệch để đánh giá giá tương lai. Nếu một loại hàng hóa có lượng dự trữ thấp hơn và nếu giá tương lai thấp hơn giá hiện tại, thì chúng ta có thể đánh giá rằng: sức mạnh nhu cầu của thị trường hiện tại lớn hơn sức mạnh cung cấp, giá hiện tại trong tương lai có khả năng tăng cao hơn; và do hệ thống giao dịch tương lai, giá tương lai sẽ được bù đắp, ngang bằng với giá hiện tại, và giá tương lai có khả năng tăng cao hơn.

Cuối cùng, chúng ta xác định hướng xác suất của giá trong tương lai bằng cách sử dụng hàng tồn kho và tỷ lệ chênh lệch, nhưng không có điểm bán chính xác hơn, do đó cần hỗ trợ phân tích kỹ thuật để cung cấp các tín hiệu xuất nhập rõ ràng. Toàn bộ cấu trúc của phân tích cơ bản là: hàng tồn kho thấp + nước sâu + phân tích kỹ thuật nhiều tín hiệu đầu = làm nhiều; hàng tồn kho cao + nước tăng đáng kể + phân tích kỹ thuật tín hiệu đầu không = làm trống.

2.2 Luật giao dịch biển

Nói về chiến lược giao dịch, chúng ta phải nói về luật giao dịch biển đại diện. Luật giao dịch biển xuất phát từ một thí nghiệm nổi tiếng nhất trong lịch sử giao dịch, khi nhà đầu cơ hàng hóa Richard Dennis cố gắng tìm ra những nhà giao dịch vĩ đại có được sinh ra hay đã được phát triển.

Trong bốn năm tiếp theo, những con cá mập trung tâm đạt được lợi nhuận trung bình 80% mỗi năm. Dennis cũng chứng minh rằng một bộ hệ thống và quy tắc đơn giản có thể giúp những người có ít hoặc không có kinh nghiệm giao dịch trở thành những nhà giao dịch giỏi. Tuy nhiên, có những con cá mập bán các quy tắc giao dịch cá mập trên các trang web có lợi nhuận. Để ngăn chặn hành vi này, hai con cá mập ban đầu, Curtis Feith và Arthur Madock, quyết định đưa các quy tắc giao dịch cá mập trên trang web miễn phí cho công chúng.

Sau khi sự thật được tiết lộ, người ta đã phát hiện ra rằng luật giao dịch hải ly sử dụng kênh Dongchian được tối ưu hóa và sử dụng chỉ số ATR để quản lý vị trí. Sau nhiều thập kỷ thử nghiệm lịch sử, nó đã trở thành một phương pháp giao dịch dễ dàng kiếm tiền cho người bán lẻ thông thường và vẫn còn hiệu quả đối với một số giống.

Nguyên tắc cốt lõi của bãi biển

  • Có được lợi thế: Tìm ra một chiến lược giao dịch có giá trị mong đợi là tích cực, vì nó sẽ tạo ra lợi nhuận tích cực trong thời gian dài.
  • Quản lý rủi ro: Kiểm soát rủi ro, giữ vị trí, nếu không bạn có thể không chờ đợi ngày tạo ra kết quả.
  • Đứng vững: Chỉ khi bạn kiên quyết thực hiện chiến lược của mình, bạn mới có thể thực sự đạt được kết quả của hệ thống.
  • Một điều rất đơn giản: trong thời gian dài, một hệ thống đơn giản sẽ sống sót hơn một hệ thống phức tạp.

Sau đó, chúng ta hãy xem luật giao dịch biển nói gì? 1, Thị trường - mua gì bán, về cơ bản là thị trường nào để giao dịch, những người bán hàng tương lai, họ chỉ chọn thị trường có khối lượng giao dịch cao và có tính lỏng lẻo cao, bởi vì chọn thị trường không hoạt động sẽ làm tăng giá trượt thêm vào và ra và sẽ bỏ lỡ nhiều cơ hội xu hướng. 2, kích thước vị trí - mua bán bao nhiêu là một phần rất quan trọng của toàn bộ chiến lược, thường được hầu hết mọi người bỏ qua hoặc hiểu sai. Luật giao dịch ngoài khơi sử dụng ATR, hoặc chỉ số mức độ biến động thực tế trung bình, để tính vị trí mở, tín hiệu tăng giá, tín hiệu dừng lỗ. Đây là một thiết kế rất khéo léo, nhằm điều chỉnh kích thước vị trí thông qua mức độ biến động tuyệt đối của thị trường, giảm giữ khi thị trường biến động mạnh, tăng giữ khi thị trường biến động yếu. 3, Tham gia thị trường - Tham gia thị trường của hải tặc dựa trên kênh Dong Chi An, khi giá tăng vượt qua mức giá cao nhất của đường K 20 hoặc 55 đầu tiên, thì tham gia nhiều hơn, khi giá giảm xuống mức giá thấp nhất của đường K 20 hoặc 55 đầu tiên, thì tham gia trống. 4, dừng lỗ - giao dịch không dừng lỗ sẽ không thành công trong thời gian dài, nhưng hầu hết các nhà giao dịch đều nắm giữ các vị trí thua lỗ, cố gắng hy vọng thị trường sẽ đảo ngược. 5, dừng đà - dừng đà của biển có nghĩa là mất rất nhiều pha trôi, một phần mà nhiều nhà giao dịch cũng khó chấp nhận. Nếu hiện đang nắm giữ nhiều lệnh và giá giảm xuống đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn dẫn đường dẫn dẫn đường dẫn dẫn đường dẫn đường dẫn đường dẫn dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường dẫn đường

Từ đây, chúng ta có thể thấy rằng luật giao dịch biển có vẻ đơn giản, nhưng thực tế nó đã hình thành một hệ thống giao dịch có hình dáng đúng nghĩa, nó bao gồm tất cả các khía cạnh của một hệ thống giao dịch hoàn chỉnh, không để lại cho các nhà giao dịch sự lựa chọn chủ quan, điều này cho phép các lợi thế của hệ thống hoạt động theo quy trình được thực hiện. bao gồm: quy tắc vào và ra, quản lý tiền và kiểm soát gió, v.v.

Lợi thế lớn nhất của phương pháp giao dịch trên vịnh là nó giúp chúng ta xây dựng một phương pháp giao dịch hiệu quả, nó là một sự kết hợp giữa các chiến lược đặt hàng, dừng đè đè và theo dõi xu hướng thị trường, đặc biệt là việc sử dụng giá trị ATR và quản lý vị trí. Tất nhiên, nó cũng có một vấn đề chung về chiến lược theo dõi xu hướng, đó là nổi lên.

3. Chiến lược phát triển CTA tương lai thực tế

3.1 Phát triển chiến lược xu hướng CTA dựa trên tiếng Anh

Vào cuối thế kỷ qua, một phương pháp giao dịch kỳ diệu đã trở nên phổ biến trong lĩnh vực đầu tư tài chính ở Mỹ, sau khi hàng ngàn người thực hành, phương pháp này đã được phát hiện có hiệu quả và giá trị thực tế lớn, đồng thời được nhiều chuyên gia đầu tư và các nhà giao dịch chuyên nghiệp công nhận, cho đến nay vẫn có thể được áp dụng hoàn hảo cho hầu hết các lĩnh vực đầu tư tài chính, cho dù đó là ngoại hối, vàng, cổ phiếu, tương lai, dầu thô, chỉ số và trái phiếu.

Thuật ngữ hỗn loạn được sử dụng để mô tả trạng thái hỗn loạn của vũ trụ, với ý tưởng là: kết quả là chắc chắn, nhưng do kiến thức hiện có không thể tính toán kết quả, bởi vì tính toán tự nó cũng đang thay đổi kết quả, cuối cùng có thể có kết quả lớn nhất hoặc nhỏ nhất mà không có kết quả chắc chắn. Điều này rất giống với thị trường giao dịch, người tham gia phân tích thị trường và cũng thay đổi thị trường khi mua bán giao dịch.

Phương pháp thao tác hỗn loạn, là một bộ tư tưởng đầu tư, chiến lược giao dịch và tín hiệu đầu vào, được phát minh bởi Bill Williams. Hiện nay, nhiều nhà đầu tư quốc tế đang sử dụng phương pháp thao tác hỗn loạn để tham gia giao dịch thị trường, do sự phát triển của thị trường tài chính bị chậm trễ, và lý thuyết hỗn loạn cũng là một ý tưởng tương đối mới, vì vậy rất ít người nghiên cứu phương pháp thao tác hỗn loạn trong nước.

Theo tên gọi của nó, nền tảng lý thuyết của các phương pháp vận hành hỗn loạn là lý thuyết hỗn loạn, được đưa ra bởi nhà khí tượng học Edward Lorenz, một trong những phát hiện khoa học vĩ đại nhất vào cuối thế kỷ 20. Ông đã đưa ra hiệu ứng bướm nổi tiếng. Bill Williams đã sáng tạo áp dụng lý thuyết hỗn loạn cho lĩnh vực đầu tư tài chính và kết hợp các ngành như hình học phân tử, động lực phi tuyến tính để tạo ra một loạt các chỉ số phân tích kỹ thuật rất hiệu quả.

Toàn bộ phương pháp hoạt động của sự hỗn loạn được tạo thành từ năm chiều lớn (đặc biệt là các chỉ số kỹ thuật):

  • Dòng cá mập (Alligator)

  • The Fractal

  • Động lực (The Momentum)

  • Tăng tốc (Acceleration)

  • Đường cân bằng (The Balance Line)

    img

Chúng ta nhìn vào hình trên, các đường cá voi là một tập hợp các đường cân bằng sử dụng hình học phân hình và động lực phi tuyến tính, về bản chất là các đường truyền di chuyển gia trọng theo chỉ số mở rộng, thuộc về đường trung bình, chỉ là phương pháp tính toán hơi phức tạp hơn đường trung bình thông thường.

// 参数
N1:=11;
N2:=21;

// 定义价格中线
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;

// 鳄鱼线
Y^^SMA(REF(HL,N3),N4,1);
R:=SMA(REF(HL,N2),N3,1);
G:=SMA(REF(HL,N1),N2,1);

Trước tiên chúng ta xác định 2 tham số bên ngoài N1 và N2, sau đó tính trung bình của giá cao nhất và giá thấp nhất HL dựa trên các tham số bên ngoài, sau đó tính trung bình của HL với các tham số khác nhau, lần nữa là trung bình của chu kỳ nhỏ ở đường giữa đối với nụ hôn, răng là trung bình của chu kỳ giữa, mông là trung bình của chu kỳ lớn. Trong chiến lược này, chúng ta sử dụng mông.

Một khái niệm về phân hình được định nghĩa rất hình ảnh trong phương pháp hoạt động hỗn loạn, chúng ta có thể sử dụng một ví dụ: mở lòng bàn tay, ngón tay hướng lên, ngón tay giữa là phân hình trên, ngón tay cái và ngón tay không ở bên trái, ngón tay cái và ngón tay cái ở bên phải đại diện cho các đường K không sáng tạo cao. Một phân hình cơ bản được tạo thành từ 5 đường K này.

// 分形
TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2;
BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2;

TOP:=REF(H,TOP_N);
BOTTOM:=REF(L,BOTTOM_N);

MAX_YRG^^MAX(MAX(Y,R),G); 
MIN_YRG^^MIN(MIN(Y,R),G); 

TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP);
BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

Sau khi tính toán đường cá mập và phân tử, chúng ta có thể viết một chiến lược thao tác hỗn loạn đơn giản dựa trên hai điều kiện này, với một tập các chỉ số tăng trọng trung chuyển động như là giá chuẩn để tính toán đường cá mập và các chỉ số phân tử.

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);

// 如果收盘价跌破鳄鱼的下巴时,多头平仓
C<Y,SP(BKVOL);
// 如果收盘价升破鳄鱼的下巴时,空头平仓
C>Y,BP(SKVOL);

Để dễ hiểu hơn, tôi đã viết một chú thích chi tiết trực tiếp trong mã, và chúng ta có thể đơn giản liệt kê logic giao dịch của chiến lược này thành một vài điểm sau:

  • Mở nhiều lần: Nếu hiện tại không có nhiều đơn đặt hàng, và giá đóng cửa tăng vượt qua đường phân chia trên, và đường phân chia trên nằm trên đường cá mập.
  • Mở lỗ trống: Nếu hiện tại không có đơn hàng trống và giá đóng cửa giảm xuống đường phân chia dưới, và đường phân chia dưới dưới đường cá mập.
  • Một số nhà đầu tư đã nói rằng họ sẽ không có bất kỳ lợi ích nào nếu giá đóng cửa giảm xuống.
  • Bảng cổ phiếu trống: Nếu giá đóng cửa tăng, hàm cá mập sẽ bị gãy.

Tiếp theo, chúng ta hãy xem kết quả của chiến lược lặp lại của phương pháp hoạt động hỗn loạn đơn giản này là gì? Để làm cho lặp lại gần hơn với môi trường thực tế, ở đây đặt phí thủ tục là gấp đôi so với sàn giao dịch, mở giao dịch và đặt giao dịch cộng với 2 bước trượt. Các loại dữ liệu được lặp lại là chỉ số thép vít, các loại giao dịch là lực chính thép vít liên tục, cố định một lần mở giao dịch. Dưới đây là báo cáo về hiệu suất lặp lại ban đầu ở mức 1 giờ.

img img img

Từ đường cong vốn và dữ liệu hiệu suất kiểm tra lại, chiến lược này hoạt động tốt, đường cong vốn tổng thể đều tăng lên một cách ổn định. Tuy nhiên, từ cuối năm 2016, các đặc điểm của thị trường đã thay đổi, chuyển từ xu hướng một chiều trước đó của tỷ lệ biến động cao sang xu hướng lung lay rộng. Từ đường cong vốn, lợi nhuận từ năm 2017 đến nay là rất yếu.

Nói tóm lại, ý nghĩa của phương pháp kinh doanh hỗn loạn là tìm ra điểm chuyển đổi, không cần phải quan tâm đến thị trường, không cần phải quan tâm đến sự đột phá đúng và sai, nếu nó xảy ra, bạn sẽ trực tiếp tham gia.

3.2 Phát triển chiến lược CTA dựa trên ngôn ngữ JavaScript

Soros đã đưa ra một đề xuất quan trọng trong cuốn sách của ông, The Alchemist of Silicon Finance, năm 1987: Tôi tin rằng giá thị trường luôn sai trong ý nghĩa họ có xu hướng về tương lai. Ông cho rằng giả thuyết hiệu quả của thị trường chỉ là giả thuyết về mặt lý thuyết, thực tế là những người tham gia thị trường không phải lúc nào cũng hợp lý, và ở mỗi thời điểm, người tham gia không thể hoàn toàn có thể truy cập và giải thích khách quan tất cả các thông tin, và thậm chí cả khi đó là thông tin tương tự, mọi người đều có phản hồi khác nhau.

Theo nguyên tắc trên, chúng ta cũng biết rằng trong một thị trường tương lai không hiệu quả, các hợp đồng giao dịch tỷ lệ trong các thời gian khác nhau cũng không phải lúc nào cũng đồng bộ và giá của chúng cũng không hoàn toàn hiệu quả. Vì vậy, dựa trên giá giao dịch tỷ lệ trong các thời gian khác nhau của cùng một chỉ số giao dịch, nếu hai giá xuất hiện chênh lệch giá lớn hơn, bạn có thể đồng thời mua và bán các hợp đồng tương lai trong các thời gian khác nhau và tạo lợi nhuận qua thời gian.

Giống như các hợp đồng tương lai hàng hóa, tiền kỹ thuật số cũng có các hợp đồng giao dịch giá rẻ dài hạn liên quan; ví dụ như trên sàn giao dịch OkEX có: ETC trong tuần, ETC tuần sau, ETC quý. Ví dụ, giả sử chênh lệch giá giữa ETC trong tuần và ETC quý duy trì khoảng 5 trong thời gian dài. Nếu chênh lệch giá một ngày đạt 7, chúng ta dự đoán chênh lệch giá sẽ quay trở lại 5 vào một thời điểm nào đó trong tương lai.

Mặc dù sự chênh lệch giá này tồn tại, nhưng sự mất thời gian, độ chính xác kém và ảnh hưởng của sự thay đổi giá, tỷ lệ lợi nhuận nhân tạo thường có nhiều sự không chắc chắn. Đó là điều hấp dẫn của tỷ lệ lợi nhuận bằng cách nắm bắt cơ hội và xây dựng chiến lược giao dịch tỷ lệ lợi nhuận thông qua mô hình định lượng, và các thuật toán lập trình tự động gửi đơn đặt hàng giao dịch đến sàn giao dịch, nắm bắt cơ hội chính xác nhanh chóng, thu được lợi nhuận hiệu quả và ổn định.

Chương trình này sẽ hướng dẫn bạn cách sử dụng các sàn giao dịch định lượng và hợp đồng tương lai ETC trên sàn giao dịch OkEX trong giao dịch tiền kỹ thuật số, bằng một chiến lược đặt cược đơn giản, để chứng minh việc nắm bắt cơ hội đặt cược ngay lập tức, nắm bắt lợi nhuận có thể nhìn thấy được mỗi lần, đồng thời có khả năng rủi ro có thể xảy ra khi có rủi ro.

Tạo ra một chiến lược giao dịch tiền điện tử dài hạnKhó khăn: Trung bìnhMôi trường chiến lược

  • Địa chỉ giao dịch: ETH Classic (ETC)
  • Dữ liệu chênh lệch giá: ETC trong tuần - ETC quý ((trừ kiểm tra sự hợp nhất)
  • Chu kỳ giao dịch: 5 phút
  • 头寸匹配:1:1
  • Loại giao dịch: cùng giống

Logic chiến lược

  • Nếu tài khoản hiện tại không có cổ phiếu và giá chênh lệch thấp hơn boll, bạn sẽ mua ETC trong tuần và bán ETC trong quý.
  • Nếu tài khoản hiện tại không có cổ phiếu và giá chênh lệch lớn hơn boll trên đường, bạn sẽ bán ETC trong tuần và mua ETC trong quý.
  • Điều kiện đặt cược chênh lệch giá quá mức: Nếu tài khoản hiện tại có nhiều đơn đặt hàng ETC trong tuần và có nhiều đơn đặt hàng ETC hàng quý và giá chênh lệch giá lớn hơn boll trung gian, giá chênh lệch giá quá mức; tức là: bán ETC trong tuần, mua ETC hàng quý.
  • Điều kiện làm ngang giá chênh lệch: Nếu tài khoản hiện tại giữ ETC trong tuần và giữ nhiều đơn đặt hàng ETC hàng quý và giá chênh lệch ít hơn boll trung gian, giá chênh lệch ngang giá.

Dưới đây là một mô tả logic đơn giản về chiến lược giao dịch dài hạn cho tiền kỹ thuật số, vậy làm thế nào để thực hiện ý tưởng của mình trong chương trình? Chúng tôi đã cố gắng xây dựng khuôn khổ trước khi các nhà phát minh định lượng nền tảng giao dịch.

function Data() {}  // 基础数据函数
Data.prototype.mp = function () {}  // 持仓函数
Data.prototype.boll = function () {}  // 指标函数
Data.prototype.trade = function () {}  // 下单函数
Data.prototype.cancelOrders = function () {}  // 撤单函数
Data.prototype.isEven = function () {}  // 处理单只合约函数
Data.prototype.drawingChart = function () {}  // 画图函数

function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB);  // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks;  // 账户余额
    var boll = data.boll(dataLength, timeCycle);  // 计算boll技术指标
    data.trade();  // 计算交易条件下单
    data.cancelOrders();  // 撤单
    data.drawingChart(boll);  // 画图
    data.isEven();  // 处理持有单个合约
}

//入口函数
function main() {
    while (true) {  // 进入轮询模式
        onTick();  // 执行onTick函数
        Sleep(500);  // 休眠0.5秒
    }
}

Hãy tưởng tượng quá trình giao dịch của chúng ta trong giao dịch chủ thể như thế nào? Trong giao dịch hệ thống không có sự khác biệt về bản chất, chỉ là: thu thập dữ liệu, tính toán dữ liệu, giao dịch đặt hàng, xử lý sau khi đặt hàng. Điều đó cũng đúng trong chương trình, trước tiên chương trình sẽ thực hiện hàm main hàng thứ 20, một quy định đã được thông qua, khi chương trình thực hiện giao dịch chiến lược xử lý trước (nếu có) thì nó sẽ đi vào chế độ vòng vô hạn, tức là chế độ vòng tra, trong chế độ vòng tra, sẽ lặp đi lặp lại thực hiện hàm onTick.

Trong hàm onTick, đó là quá trình giao dịch mà chúng ta có trong giao dịch chủ quan: đầu tiên lấy dữ liệu giá cơ bản, sau đó lấy số dư tài khoản, sau đó tính toán chỉ số, sau đó bắt đầu tính toán điều kiện giao dịch và đặt hàng, cuối cùng là xử lý sau khi đặt hàng, bao gồm: rút hàng, vẽ đồ họa, xử lý các hợp đồng riêng lẻ.

Một khung chiến lược có thể dễ dàng được xây dựng bằng cách so sánh các ý tưởng chiến lược và quy trình giao dịch. Toàn bộ chiến lược có thể được đơn giản hóa thành ba bước:

  • Những người tham gia vào cuộc họp này nói rằng:
  • Nhận và tính toán dữ liệu.
  • Đặt đơn và xử lý tiếp theo.

Sau khi xây dựng khuôn khổ chiến lược giao dịch, cần phải điền mã chi tiết cần thiết trong khuôn khổ chiến lược dựa trên quy trình giao dịch thực tế và chi tiết giao dịch.

Một, xử lý trước giao dịch

1. Xác định các biến toàn cầu cần thiết

  • Xác định đối tượng chart của biểu đồ cấu hìnhvar chart = {}
  • Gọi hàm Chart, khởi tạo biểu đồvar ObjChart = Chart ( chart )
  • Thiết lập một mảng trống để lưu trữ chuỗi giá khác nhauvar bars = []
  • Ghi lại một biến timestamp trong dữ liệu lịch sửvar oldTime = 0

2. Các tham số bên ngoài của chính sách cấu hình

var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

3. Định nghĩa các hàm xử lý dữ liệu

  • Chức năng dữ liệu cơ bản: Data () Tạo một cấu trúc hàm Data và xác định thuộc tính bên trong của nó. Bao gồm: dữ liệu tài khoản, dữ liệu nắm giữ, thời gian k-line, giá mua / bán trên hợp đồng A / B, giá dương / ngược.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
  • Nhận hàm giữ:mp () Chuyển qua toàn bộ mảng giữ, trả về số lượng giữ theo hợp đồng, chỉ định hướng, nếu không trả về false
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}
  • Dòng K và hàm chỉ số:boll () Tạo ra một chuỗi K mới dựa trên dữ liệu chênh lệch giá dương / ngược; và trả về dữ liệu trên đường, giữa đường và dưới đường được tính toán bởi chỉ sốboll.
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}
  • Chức năng dưới:trade () Nhập tên hợp đồng đặt hàng và loại hợp đồng đặt hàng, sau đó đặt hàng theo giá đối lập và trả về kết quả đặt hàng. Vì cần phải đặt hai đơn hàng theo hai hướng khác nhau cùng một lúc, nên chuyển đổi giá mua / bán theo tên hợp đồng đặt hàng được thực hiện bên trong hàm.
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}
  • Hoãn đơn đặt hàng:cancelOrders () Lấy tất cả các mảng lệnh chưa hoàn thành và hủy một lần một lần. Và trả về false nếu có lệnh chưa hoàn thành, trả về true nếu không có lệnh chưa hoàn thành.
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}
  • Xử lý các hợp đồng duy nhất: isEven ()) Trong việc xử lý giao dịch lợi nhuận, có một tình huống một chân xảy ra, đây là việc xử lý tất cả các vị trí một cách đơn giản.
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组
            if (positionData[i].Type == 0) { // 如果是多单
                type = 10; // 设置下单参数
            } else if (positionData[i].Type == 1) { // 如果是空单
                type = -10; // 设置下单参数
            }
            // 平掉所有仓位
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}
  • Hình vẽ:drawingChart ()) Gọi phương pháp ObjChart.add () để vẽ các dữ liệu thị trường và các chỉ số cần thiết trên biểu đồ: tăng, giảm, tăng, giảm, chênh lệch giá dương / ngược.
Data.prototype.drawingChart = function (boll) {
    var nowTime = new Date().getTime();
    ObjChart.add([0, [nowTime, boll.up]]);
    ObjChart.add([1, [nowTime, boll.middle]]);
    ObjChart.add([2, [nowTime, boll.down]]);
    ObjChart.add([3, [nowTime, this.basb]]);
    ObjChart.add([4, [nowTime, this.sabb]]);
    ObjChart.update(chart);
}

Trong hàm đầu vào main (), thực hiện mã xử lý trước giao dịch, mã này chỉ chạy một lần sau khi chương trình khởi động; bao gồm:

  • Thông tin không quan trọng trong bộ lọcSetErrorFilter ( )
  • Thiết lập các loại tiền kỹ thuật số để giao dịchexchange.IO ( )
  • Biểu đồ được vẽ trước khi chương trình khởi độngObjChart.reset ( )
  • Thông tin về thanh trạng thái trước khi khởi động chương trìnhLogProfitReset ( )

Sau khi xác định quá trình xử lý trước giao dịch ở trên, bạn sẽ chuyển sang bước tiếp theo, vào chế độ tìm kiếm, lặp lại chức năng onTick (), và đặt thời gian ngủ trong quá trình tìm kiếm Sleep (), vì API của một số sàn giao dịch tiền điện tử có giới hạn truy cập trong một khoảng thời gian nhất định.

function main() {
    // 过滤控制台中不是很重要的信息
    SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP");
    exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种
    ObjChart.reset(); //程序启动前清空之前绘制的图表
    LogProfitReset(); //程序启动前清空之前的状态栏信息
    while (true) { // 进入轮询模式
        onTick(); // 执行onTick函数
        Sleep(500); // 休眠0.5秒
    }
}

2. Thu thập và tính toán dữ liệu

  1. Thu thập các đối tượng dữ liệu cơ bản, số dư tài khoản, dữ liệu chỉ sốboll để sử dụng cho logic giao dịch.
function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象
    var accountStocks = data.accountData.Stocks; // 账户余额
    var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据
    if (!boll) return; // 如果没有boll数据就返回
}

3. Đặt đơn và xử lý tiếp theo

  1. Theo logic chiến lược trên, thực hiện giao dịch mua bán. Đầu tiên, quyết định giá và các điều kiện chỉ số có phù hợp hay không, sau đó quyết định các điều kiện nắm giữ có phù hợp hay không, và cuối cùng thực hiện trade ().
// 价差说明
// basb = (合约A卖一价 - 合约B买一价)
// sabb = (合约A买一价 - 合约B卖一价)
if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨
    if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
        data.trade(tradeTypeA, "closebuy"); // 合约A平多
    }
    if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
        data.trade(tradeTypeB, "closesell"); // 合约B平空
    }
} else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨
    if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
        data.trade(tradeTypeA, "closesell"); // 合约A平空
    }
    if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
        data.trade(tradeTypeB, "closebuy"); // 合约B平多
    }
}
if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额
    if (data.basb < boll.down) { // 如果basb价差低于下轨
        if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单
            data.trade(tradeTypeA, "buy"); // 合约A开多
        }
        if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单
            data.trade(tradeTypeB, "sell"); // 合约B开空
        }
    } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨
        if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单
            data.trade(tradeTypeA, "sell"); // 合约A开空
        }
        if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单
            data.trade(tradeTypeB, "buy"); // 合约B开多
        }
    }
}
  1. Sau khi hoàn thành đơn đặt hàng, cần xử lý các trường hợp bất thường như đơn đặt hàng chưa hoàn thành, giữ một hợp đồng đơn lẻ và vẽ biểu đồ.
data.cancelOrders(); // 撤单
data.drawingChart(boll); // 画图
data.isEven(); // 处理持有单个合约

Trên đây, chúng tôi đã tạo ra một chiến lược giao dịch lãi suất dài hạn đơn giản với hơn 200 dòng.

// 全局变量
// 声明一个配置图表的 chart 对象
var chart = {
    __isStock: true,
    tooltip: {
        xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
    },
    title: {
        text: '交易盈亏曲线图(详细)'
    },
    rangeSelector: {
        buttons: [{
            type: 'hour',
            count: 1,
            text: '1h'
        }, {
            type: 'hour',
            count: 2,
            text: '3h'
        }, {
            type: 'hour',
            count: 8,
            text: '8h'
        }, {
            type: 'all',
            text: 'All'
        }],
        selected: 0,
        inputEnabled: false
    },
    xAxis: {
        type: 'datetime'
    },
    yAxis: {
        title: {
            text: '价差'
        },
        opposite: false,
    },
    series: [{
        name: "上轨",
        id: "线1,up",
        data: []
    }, {
        name: "中轨",
        id: "线2,middle",
        data: []
    }, {
        name: "下轨",
        id: "线3,down",
        data: []
    }, {
        name: "basb",
        id: "线4,basb",
        data: []
    }, {
        name: "sabb",
        id: "线5,sabb",
        data: []
    }]
};
var ObjChart = Chart(chart); // 画图对象
var bars = []; // 存储价差序列
var oldTime = 0; // 记录历史数据时间戳

// 参数
var tradeTypeA = "this_week"; // 套利A合约
var tradeTypeB = "quarter"; // 套利B合约
var dataLength = 10; //指标周期长度
var timeCycle = 1; // K线周期
var name = "ETC"; // 币种
var unit = 1; // 下单量

// 基础数据
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约
    this.accountData = _C(exchange.GetAccount); // 获取账户信息
    this.positionData = _C(exchange.GetPosition); // 获取持仓信息
    var recordsData = _C(exchange.GetRecords); //获取K线数据
    exchange.SetContractType(tradeTypeA); // 订阅套利A合约
    var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据
    exchange.SetContractType(tradeTypeB); // 订阅套利B合约
    var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据
    this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间
    this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价
    this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价
    this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价
    this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价
    // 正套价差(合约A卖一价 - 合约B买一价)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // 反套价差(合约A买一价 - 合约B卖一价)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}

// 获取持仓
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // 获取持仓信息
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}

// 合成新K线数据和boll指标数据
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // 临时对象
    // 正套价差和反套价差中间值
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // 对比两个深度数据时间戳
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // 根据指定时间周期,在K线数组里面传入价差数据对象
    if (bars.length > num * 2) {
        bars.shift(); // 控制K线数组长度
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标
    return {
        up: boll[0][boll[0].length - 1], // boll指标上轨
        middle: boll[1][boll[1].length - 1], // boll指标中轨
        down: boll[2][boll[2].length - 1] // boll指标下轨
    } // 返回一个处理好的boll指标数据
}

// 下单
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // 下单前先重新订阅合约
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // 如果是A合约下单
        askPrice = this.askA; // 设置askPrice
        bidPrice = this.bidA; // 设置bidPrice
    } else if (tradeType == tradeTypeB) { // 如果是B合约下单
        askPrice = this.askB; // 设置askPrice
        bidPrice = this.bidB; // 设置bidPrice
    }
    switch (type) { // 匹配下单模式
        case "buy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // 设置下单模式
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}

// 取消订单
Data.prototype.cancelOrders = function () {
    Sleep(500); // 撤单前先延时,因为有些交易所你懂的
    var orders = _C(exchange.GetOrders); // 获取未成交订单数组
    if (orders.length > 0) { // 如果有未成交的订单
        for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组
            exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单
            Sleep(500); //延时0.5秒
        }
        return false; // 如果取消了未成交的单子就返回false
    }
    return true; //如果没有未成交的订单就返回true
}

// 处理持有单个合约
Data.prototype.isEven = function () {
    var positionData = this.positionData; // 获取持仓信息
    var type = null; // 转换持仓方向
    // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // 遍历持仓数

Có liên quan

Thêm nữa

Dianwan99Học tập

Bố ơi.Học tập

xunfeng91Học tập