Tài nguyên đang được tải lên... tải...

Các giao dịch định lượng vòng đồng xu trông rất mới mẻ - đưa bạn đến gần với việc định lượng vòng đồng xu.

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2021-04-19 14:16:21, Cập nhật: 2023-09-24 19:30:05

img

Các giao dịch định lượng vòng đồng tiền mới nhìn thấy đưa bạn đến gần vòng đồng tiền định lượng ((2))

Trong bài viết trước, chúng tôi đã nói về kịch bản giao dịch lập trình. Trong thực tế, chiến lược giao dịch là một kịch bản giao dịch, bài viết chủ yếu nói về kịch bản giao dịch cần có một máy tính (nơi mà chương trình chạy), kịch bản giao dịch có thể được viết bằng ngôn ngữ lập trình máy tính (đề danh ba ngôn ngữ lập trình được sử dụng trên nền tảng giao dịch định lượng của nhà phát minh, tất nhiên, tự thực hiện giao dịch lập trình có thể sử dụng bất kỳ ngôn ngữ lập trình nào để thực hiện chiến lược).

Script giao dịch lập trình

  • Loại chiến lược giao dịch Những người mới bắt đầu giao dịch lập trình, giao dịch định lượng có thể bị vướng mắc bởi các thuật ngữ như chiến lược xu hướng, chiến lược lựa chọn, chiến lược tần số cao, chiến lược lưới, trong khi các loại chiến lược phổ biến như giao dịch lập trình, giao dịch định lượng chỉ đơn giản là theo một vài hướng.

    • Chiến lược bảo hiểm lợi nhuận Nói một cách đơn giản, về cơ bản, một chiến lược như giữ nhiều vị trí nhìn và giữ một vị trí nhìn có thể được phân loại là chiến lược ưu đãi. Có rất nhiều loại cụ thể, giao dịch qua thị trường hiện tại, giao dịch qua kỳ hạn, giao dịch qua thời hạn, giao dịch qua các loại giao dịch.
    • Chiến lược xu hướng Nói một cách đơn giản, đó là một chiến lược theo dõi xu hướng, hai đường ngang, MACD và các chiến lược khác.
    • Chiến lược quay trở lại Ví dụ, chiến lược lưới, lấy lợi nhuận từ biến động giá trong thị trường bất ổn.
    • Chiến lược tần số cao Nói một cách đơn giản, đó là một chiến lược giao dịch tần suất cao bằng cách phát hiện các cấu trúc, quy tắc, cơ hội và các thuật toán vi mô của thị trường.

    Trên đây là phân chia từ quan điểm chiến lược giao dịch, và từ quan điểm thiết kế chiến lược trên nền tảng giao dịch định lượng của nhà phát minh, các chiến lược có thể được chia thành:

    • Chiến lược một giống Điều này có nghĩa là chiến lược này chỉ vận hành một loại, chẳng hạn như giao dịch BTC hoặc giao dịch ETH.
    • Chiến lược đa dạng Nói một cách đơn giản, điều đó là điều hành nhiều giống theo một logic chiến lược.
    • Chiến lược đa tài khoản Nói một cách đơn giản là cấu hình nhiều đối tượng giao dịch trên thực tế (các khái niệm về giao dịch đã được giới thiệu trong bài viết trước đây, cấu hình các đối tượng giao dịch API KEY đại diện cho một tài khoản giao dịch). Ví dụ như một số chính sách theo dõi, nhiều tài khoản cùng làm theo các hoạt động (có thể là cùng một sàn giao dịch, cũng có thể là các sàn giao dịch khác nhau), nói chung là quản lý nhiều đối tượng giao dịch trên thực tế (tài khoản).
    • Chiến lược đa logic Ví dụ như một thực đơn cùng một lúc thiết kế chiến lược MACD, chiến lược đường thẳng, chiến lược lưới, v.v. ((Tất nhiên, là điều hành các đối tượng giao dịch khác nhau, điều hành các đối tượng giao dịch tương tự để xem các chiến lược cụ thể có xung đột hợp lý hay không)
  • giao dịch API Các chương trình giao dịch kịch bản làm thế nào để vận hành tài khoản sàn giao dịch? Câu trả lời là giao diện API mở thông qua sàn giao dịch. Vậy giao diện mở của sàn giao dịch có những loại giao diện nào? Trong bài viết trước đây, chúng tôi đã nói về giao dịch REST, Websocket giao diện. Ở đây chúng tôi bổ sung một chút khái niệm từ mức độ chương trình chính sách.

    • Không cần xác minh giao diện Thông thường được gọi là các nút giao diện công cộng, các giao diện này không cần phải được xác minhAPI KEYCác giao diện này thường là giao diện thị trường, ví dụ như truy vấn thị trường sâu, truy vấn dữ liệu đường K, truy vấn tỷ lệ vốn, truy vấn thông tin liên quan đến loại giao dịch, truy vấn thời gian máy chủ sàn giao dịch, v.v. Nói một cách đơn giản, một giao diện không liên quan gì đến tài khoản của bạn có thể xác định một cách gần như là một giao diện công cộng (không cần xác minh).
      Trên nền tảng giao dịch định lượng của nhà phát minh, khi gọi các hàm API không xác minh (các giao dịch không xác minh giao diện, giao diện công cộng) dữ liệu được trả về giao diện có thể được lấy lại một cách bình thường ngay cả khi cấu hình API KEY là sai.

    • Giao diện cần xác minh Nói một cách đơn giản, các giao diện cần được xác thực (được xác minh bằng API KEY) được gọi là giao diện riêng. Các giao diện này thường liên quan đến một số hoạt động hoặc thông tin của tài khoản của bạn, chẳng hạn như truy vấn tài sản tài khoản, truy vấn lưu trữ tài khoản, truy vấn kết nối, chuyển tiền đơn, chuyển tiền, điều chỉnh đòn bẩy, thiết lập chế độ lưu trữ, v.v. Những hoạt động này phải được xác minh. Trên nền tảng giao dịch định lượng của nhà phát minh, khi gọi các hàm API cần xác minh (các giao dịch được gói gọn cần xác minh giao diện, giao diện riêng tư), nếu API KEY được cấu hình sai, nó sẽ báo lỗi khi gọi giao diện và trả về giá trị trống.

    Vậy làm thế nào để các giao diện này được sử dụng trên nền tảng giao dịch định lượng của nhà phát minh?

    Các nền tảng giao dịch định lượng của các nhà phát minh bao gồm các hành vi giao dịch, các giao diện xác định phù hợp (ví dụ: giao diện đường K, giao diện giao dịch sâu, giao diện truy vấn tài sản hiện tại, giao diện đặt hàng đơn lẻ, giao diện thu hồi đơn hàng, v.v.) được gọi là các chức năng API của nền tảng giao dịch định lượng của nhà phát minh, có thể được truy cập bằng cách truy vấn tài liệu API.https://www.fmz.com/api )。

    Vì vậy, một số giao diện giao dịch không có định nghĩa thống nhất về hành vi sẽ được sử dụng như thế nào trên nền tảng giao dịch định lượng của nhà phát minh?

    Các giao diện giao dịch này có thể khác nhau về chức năng và chi tiết sử dụng, vì vậy các giao diện này được thông qua trên nền tảng giao dịch định lượng của nhà phát minh.exchange.IOCác chi tiết về chức năng này có thể được xem trong tài liệu API của nhà phát minh:https://www.fmz.com/api#exchange.io..Một số chiến lược ví dụ về IO cũng có trên quảng trường chiến lược sàn giao dịch định lượng của nhà phát minh.

    Có phải tất cả các hàm API trong tài liệu API của nhà phát minh sẽ tạo ra các yêu cầu mạng?

    Nếu giao dịch API có giới hạn về tần suất truy cập (ví dụ: 5 lần một giây), truy cập không thể quá thường xuyên nếu không sẽ báo cáo lỗi HTTP 429 và bị từ chối truy cập (hầu hết các sàn giao dịch đều báo cáo 429) thì giao dịch API được gọi trên nền tảng giao dịch định lượng của nhà phát minh cũng có giới hạn này, không có giới hạn này đối với các chức năng API không tạo yêu cầu mạng trên nền tảng giao dịch định lượng của nhà phát minh. Không phải tất cả các hàm API của các nền tảng giao dịch định lượng của các nhà phát minh đều tạo ra các yêu cầu mạng, một số hàm API của các nhà phát minh chỉ thay đổi một số cài đặt cục bộ, chẳng hạn như đặt cặp giao dịch hiện tại, đặt mã hợp đồng, tính toán chỉ số, lấy tên đối tượng giao dịch, v.v. Về cơ bản, từ chức năng sử dụng, bạn có thể xác định xem có yêu cầu mạng hay không, miễn là truy cập dữ liệu sàn giao dịch, hoạt động đối với tài khoản sàn giao dịch, v.v. đều tạo ra yêu cầu mạng, các giao diện này cần phải chú ý tần số cuộc gọi.

    • Sau đây là một vài câu hỏi và kinh nghiệm thường gặp khi các nhà phát minh sử dụng các chức năng API cho các nền tảng giao dịch định lượng.

      • Nhận sai Đây là một trong những lỗi phổ biến nhất, gây khó khăn cho vô số người mới, thường xuyên chiến lược kiểm tra lại tốt mọi thứ đều ổn, tại sao thực chạy trong một thời gian ((có thể kích hoạt bất cứ lúc nào) thực đĩa bị treo ~

        img

        Khi viết chính sách, chúng ta cần phải xác minh dữ liệu được trả về giao diện, ví dụ như truy cập thị trường trên nền tảng giao dịch định lượng của nhà phát minh (cũng giống như viết chương trình của riêng bạn để truy cập trực tiếp vào giao diện giao dịch):var ticker = exchange.GetTicker()Nếu chúng ta cần sử dụng nó,tickerCác biến (xem cấu trúc mà hàm GetTicker trả về)Last(Giá gần đây) Dữ liệu này, chúng ta cần sử dụngvar newPrice = ticker.LastĐiều này giúp bạn có được dữ liệu ((newPrice là gì?new: mới nhất,Price: giá, đúng! kết hợp!)GetTicker()Chức năng này trả về dữ liệu bình thường, nhưng sẽ gây ra nếu có sự chậm trễ của yêu cầu, lỗi mạng, việc cắt dây điện của sàn giao dịch, cắt cáp, bé gấu kéo cắm điện, v.v.GetTicker()Phương thức trả vềnull❖ Tại thời điểm nàytickerVà giá trị của nó lànullTôi sẽ ghé thăm nó một lần nữaLastNếu bạn có một vấn đề liên quan đến chính sách, bạn có thể làm việc một cách bất thường và khiến các chương trình chính sách bị dừng lại. Do đó, sự thất bại của cuộc gọi giao diện (GetTicker call failure returns null) không phải là nguyên nhân trực tiếp gây ra chính sách dừng ổ đĩa thực.nullChất tính của biến), báo cáo lỗi không thành công khi gọi giao diện sẽ không gây ra sự dừng lại của ổ đĩa thực (đánh dấu trọng tâm). Vì vậy, chúng ta có thể làm gì để ngăn chặn sự ngừng hoạt động của ổ đĩa thực? Câu trả lời là để xử lý dữ liệu được trả về bởi giao diện, rất đơn giản chỉ bằng cách đánh giá dữ liệu được trả về là hay không.null(Lời ví dụ về ngôn ngữ JavaScript, các ngôn ngữ khác cũng tương tự) Viết một đoạn mã nhỏ để giải thích ((Đây chỉ là một hướng dẫn, chạy trực tiếp là một trò chơi khó khăn!))

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("打印最新价格:", newPrice)
        } else {
            // 数据为null,不做操作就不会出问题
        }
        

        Không chỉGetTickerCác giao diện cần phải chấp nhận lỗi, và các giao diện có yêu cầu mạng cũng cần phải chấp nhận lỗi về giá trị trả về (nếu bạn sử dụng giá trị trả về của hàm) Có rất nhiều cách để chấp nhận sai lầm._C()Các hàm (xem tài liệu API FMZ), tự viết các hàm chấp nhận lỗi, tự thiết kế các cơ chế chấp nhận lỗi, logic. Về_C()Nếu bạn sử dụng các hàm, rất nhiều học sinh mới có thể sẽ sử dụng chúng sai._C()Các tham số của hàm là tham chiếu hàm, chứ không phải gọi hàm._C(funcName, param1, param2), gọi đúng, funcName không có dấu ngoặc nhỏ, param1, param2 là các tham số được truyền cho chức năng funcName._C(funcName(param1, param2))Trong khi đó, một số ứng dụng khác của FMZ cũng có lỗi gọi, thường là các tài liệu API của FMZ không được xem xét kỹ lưỡng.

      • Số lượng đơn đặt hàng theo giá thị trường hiện tại Số lượng đơn đặt hàng theo giá thị trường hiện tại cũng rất dễ bị nhầm lẫn, như đã được đề cập trong bài viết trước, số lượng đơn đặt hàng theo giá thị trường hiện tại thường là số tiền (các sàn giao dịch khác nhau có thể là các thiết lập khác, thường các sàn giao dịch đặc biệt trên FMZ sẽ được giải thích trong tài liệu API FMZ), ví dụ như tôi đã thử nghiệm bằng OKEX V5: Các cặp giao dịch được thiết lập như sau:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
            exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
        }
        

        Do các sàn giao dịch thường có giới hạn về số tiền đặt hàng, các đơn đặt hàng nhỏ hơn giới hạn sẽ không được đặt hàng trước (ví dụ: Binance Cash yêu cầu mỗi đơn đặt hàng lớn hơn 5USDT để đặt hàng thành công). Vì vậy, đặt hàng sẽ trả lại lỗi:

        错误	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
        
      • Định hướng giao dịch tương lai Trong khi đó, các nhà phát minh cũng có những vấn đề liên quan đến việc viết các chiến lược trên các nền tảng giao dịch định lượng. Trước tiên, chúng ta hãy xem mô tả trong tài liệu API:https://www.fmz.com/api#exchange.setdirection...

        img

        Vì các hàm đơn giản chỉ cóBuy,SellTuy nhiên, tương lai (không có vấn đề gì, chỉ có giao dịch hiện tại) có nhiều, rẻ, mở, không, các hướng này, thì rõ ràng là mua / bán không thể biểu thị nhiều hướng hoạt động, khi đó bạn cần phải giới thiệu các hướng giao dịch tương lai.exchange.SetDirection()❖ Trên FMZexchange.SetDirection("buy")(định hướng trước) vàexchange.BuyNếu sử dụng cùng nhau, thì biểu hiện đơn vị dưới đây là đơn đặt hàng mở nhiều cổ phiếu. Một số người nói rằng:exchange.SetDirection("sell")exchange.SellNếu được sử dụng cùng nhau, thì biểu thị đơn vị dưới đây là đơn đặt hàng kho trống.exchange.SetDirection("closebuy")exchange.SellNếu sử dụng cùng nhau, thì biểu thị đơn vị dưới đây là đơn đặt hàng bán hàng nhiều hàng.exchange.SetDirection("closesell")exchange.BuyNếu sử dụng cùng nhau, thì biểu thị các đơn vị dưới đây là đơn đặt hàng không chứa. Thường xuyên gặp gỡexchange.SetDirection("sell")exchange.BuyCó thể sử dụng hợp tác, hoặc một sự kết hợp khác của lỗi. Và sau đó báo cáo sai (thử lặp lại có thể không báo cáo sai, nhưng điều này rõ ràng là một sai lầm logic, OCD không thể chịu đựng được...). Một sai lầm khác của Liu Xiaobo

        function main() {
            exchange.SetContractType("quarter")   // 设置当前合约为季度合约
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
            exchange.Sell(-1, 1)
        }
        

        img
        Nhìn vào đây, bạn sẽ hỏi: sao tôi có cổ phiếu và closebuy và sell cũng được sử dụng cùng nhau, làm thế nào để báo cáo sai, không thể ngang hàng được? Một trường hợp khác có thể xảy ra là: định hướng giao dịch được đặt đúng, sử dụng hàm đơn giản cũng đúng, và giữ giao dịch theo hướng này, nhưng vẫn báo cáo lỗi này. Nguyên nhân là có thể chương trình của bạn đã đặt hàng nhiều lần, đơn đặt hàng ban đầu không được giao dịch, đơn đặt hàng tròn đang treo trên mặt hàng chờ giao dịch, khi chương trình tiếp tục giao dịch, sẽ gợi ý lỗi vượt quá vị trí giao dịch.

      • Xuất bản nhật ký, hiển thị thông tin giao dịch Thiết kế viết chương trình hóa, định lượng chiến lược giao dịch từ không mở dữ liệu hiển thị các con số, các cửa sổ hoạt động của con số, đầu ra các con số, v.v. thiết kế tương tác máy. Thông thường sử dụng ngôn ngữ lập trình bản địa để viết kịch bản đĩa thực, các chương trình chính sách. Ví dụ: pythonprint❖ Javascriptconsole.log❖ Golangfmt.Println()❖ Sử dụng C++cout

        Ngoài ra, thông tin trên nền tảng FMZ cho thấy rằng trên nền tảng giao dịch định lượng của nhà phát minh, có hai vị trí chính để hiển thị thông tin.

        • Bảng trạng thái Sau khi chạy ổ đĩa thực, trang của ổ đĩa thực sẽ như sau:

          img

          Hiển thị một phần thông tin về thanh trạng thái, thanh trạng thái chủ yếu là để hiển thị một số dữ liệu thay đổi trong thời gian thực (vì thay đổi trong thời gian thực cần được quan sát trong thời gian thực và không thể in vào nhật ký mỗi lần, nên dữ liệu như vậy có thể được hiển thị trong thanh trạng thái, nếu mỗi thanh in nhật ký sẽ có nhiều dữ liệu lặp đi lặp lại vô nghĩa, ảnh hưởng đến truy vấn). Hiển thị sử dụng dữ liệu trên thanh trạng tháiLogStatusCác chức năng, cụ thể hơn, có thể được xem trong tài liệu API của FMZ.

        • Đồ nhật ký Trong khi đó, trên trang web thực, hình ảnh cho thấy:

          img

          Một phần hiển thị là các cửa sổ nhật ký, cửa sổ nhật ký chủ yếu là để ghi lại vĩnh viễn một số dữ liệu tại một thời điểm, hoặc ghi lại một số hoạt động trong chính sách tại một thời điểm. Các nhật ký được chia thành nhiều loại: 1, Lưu trữ thông thường, sử dụng hàm Log để xuất trong chính sách của FMZ, in trong chính sách nhật ký.

          img

          2, sử dụng trong các chiến lược của FMZexchange.Sell/exchange.BuyBạn sẽ tự động xuất bản các bản ghi trong nhật ký.

          img

          3, sử dụng trong các chiến lược của FMZexchange.CancelOrderTrong khi đó, một số ứng dụng khác cũng được sử dụng.

          img

          4, lỗi nhật ký, chính sách của FMZ sẽ tự động xuất lỗi nhật ký trong nhật ký khi chạy, khi giao diện thực hiện yêu cầu mạng gặp lỗi gọi, khi ném bất thường (ví dụ như câu nói như ném).

          img

        Các hàm API của FMZ, có thể tạo ra các hàm đầu ra nhật ký như Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id)) và các hàm đầu ra khác có thể được thêm vào các tham số đầu ra sau các tham số cần thiết, chẳng hạn như: exchange.CancelOrder ((orders[j].Id, orders[j]) như vậy khi hủy lệnh orders[j], thông tin đầu ra được thêm vào.

        function main() {
            Log("数据1", "数据2", "数据3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
            exchange.CancelOrder(id, "附带数据1", data2, "...")
            LogProfit(100, "附带数据1", data2, "...")
        }
        
      • Sử dụng hàm chỉ số Trước khi nói về các hàm chỉ số, chúng ta hãy hiểu những gì chỉ số là, đơn giản là đường ngang, MACD, ATR, v.v. Hỏi: Những chỉ số này đến từ đâu? Đáp: Tất nhiên là tính toán. Câu hỏi: Điều đó dựa trên những gì? Đáp: Được tính theo dữ liệu đường K. Hỏi: Một ví dụ nào? A: Ví dụ đơn giản nhất là chỉ số đường trung tuyến, nếu chúng ta sử dụng đường K ngày (tức là một đường mặt trời hoặc đường âm đạo đại diện cho một ngày) như là nguồn dữ liệu để tính toán chỉ số. Các tham số chỉ số đường trung tuyến là 10, thì chỉ số đường trung tuyến được tính toán là đường trung tuyến 10 ngày. Câu hỏi: Nếu số lượng K-line BAR là chưa đầy 10 bit, bạn có thể tính chỉ số đường trung tuyến không? Đáp: Không chỉ các chỉ số đường trung tuyến không thể tính toán được, bất kỳ chỉ số nào cũng không thể tính toán được giá trị chỉ số hiệu quả khi số lượng dữ liệu BAR trên đường K không đáp ứng các tham số chu kỳ chỉ số.JavaScriptCác công cụ ngôn ngữ sẽ hiển thị dữ liệu chỉ số khi innull

        Có một ví dụ về việc dạy ở Quảng trường chính sách:https://www.fmz.com/strategy/125770Để kiểm tra lại các chiến lược trong bài học này, bạn có thể thấy biểu đồ được tạo ra bởi hệ thống kiểm tra lại và đường trung bình của 10 chu kỳ:

        img

        Các chiến lược tùy chỉnh đồ họa, đường K được vẽ và biểu đồ đường ngang:

        img

        Hỏi: Nếu tôi muốn 10 giờ đồng hồ thì sao? Đáp: Dữ liệu đường K có thể sử dụng dữ liệu đường K theo chu kỳ giờ.

        Nói chung, các đường K mà chúng ta thấy, sau khi chúng ta dữ liệu hóa nó là một mảng (không hiểu khái niệm mảng, bạn có thể đi xuống), trong đó mỗi phần tử là một cột đường K, được sắp xếp theo thứ tự, phần tử đầu tiên của mảng là cách xa nhất với thời gian hiện tại, và phần tử cuối cùng của mảng là gần nhất với thời gian hiện tại. Thông thường, cột cuối cùng của dữ liệu đường K là cột đường của chu kỳ hiện tại, thay đổi trong thời gian thực, chưa hoàn thành. Các chỉ số được tính toán cũng tương ứng với các cột đường K, ví dụ trên có thể thấy một chỉ số có giá trị tương ứng với một cột đường K. Lưu ý rằng cột đường K cuối cùng là thay đổi trong thời gian thực, và các chỉ số được tính toán cũng sẽ thay đổi theo sự thay đổi của cột đường K.

        Trên nền tảng giao dịch định lượng của nhà phát minh, bạn có thể sử dụng thư viện TA (một thư viện được thực hiện trên nền tảng FMZ, tích hợp trên máy chủ và có thể sử dụng trực tiếp các ngôn ngữ khác nhau) hoặc sử dụng thư viện talib (thư viện chỉ số cũ của talib, tích hợp JS, C ++, Python cần tự cài đặt). Ví dụ như trong ví dụ trên, tính toán đường trung bình: Sử dụng TA:

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // 打印均线
        }
        

        Sử dụng Talib Library:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // 打印均线
        }      
        

        Dữ liệu chỉ số được tính toán ma là một mảng, mỗi phần tử tương ứng với một mảng K-line (records), tức làma[ma.length -1]tương ứngrecords[records.length - 1]Những người dân ở đây rất quan tâm đến vấn đề.

        Các chỉ số phức tạp khác cũng tương tự, cần chú ý đến các chỉ số như MACD.

        var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
        

        Macd là một ma trận hai chiều (không hiểu khái niệm có thể là Baudouin), một ma trận hai chiều đơn giản là một ma trận mà mỗi phần tử của nó cũng là một ma trận. Câu hỏi: Tại sao dữ liệu chỉ số macd là một mảng hai chiều? Đáp: Bởi vì chỉ số macd bao gồm hai đường (đường dif, đường dea) và một tập hợp các cột lượng (đường macd, trong thực tế dữ liệu cột lượng cũng có thể được xem là một đường). Vì vậy, các biến macd có thể được chia thành:

        var dif = macd[0]
        var dea = macd[1]
        var macdColumn = macd[2]
        

        Đây cũng là một ví dụ về một bài học sẵn có, một nghiên cứu thú vị:https://www.fmz.com/strategy/151972

        img


Có liên quan

Thêm nữa