Cryptocurrency Quantitative Trading cho người mới bắt đầu - đưa bạn đến gần Cryptocurrency Quantitative (2)

Tác giả:Lydia., Tạo: 2022-07-27 16:34:41, Cập nhật: 2023-09-24 19:31:16

img

Cryptocurrency Quantitative Trading cho người mới bắt đầu - đưa bạn đến gần Cryptocurrency Quantitative (2)

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

Phiên bản giao dịch theo chương trình

  • Các 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 và giao dịch định lượng có thể bị nhầm lẫn bởi các thuật ngữ, chẳng hạn như các chiến lược xu hướng khác nhau, chiến lược tùy chọn nhị phân, chiến lược tần số cao, chiến lược lưới, v.v. Trên thực tế, các loại chiến lược phổ biến trong giao dịch lập trình và giao dịch định lượng chỉ đơn giản là một số hướng.

    • Chiến lược phòng ngừa rủi ro qua trọng tài Nói một cách đơn giản, một chiến lược nắm giữ một vị trí dài trong khi nắm giữ một vị trí ngắn về cơ bản có thể được phân loại là một chiến lược trọng tài. Có nhiều loại cụ thể, chẳng hạn như thị trường giao ngay, giao dịch tương lai giao ngay, giao dịch tương lai và giao dịch tùy chọn nhị phân, và giao dịch tùy chọn nhị phân.
    • Chiến lược xu hướng Nói một cách đơn giản, đó là chiến lược theo dõi xu hướng để đặt lệnh và giữ các vị trí, chẳng hạn như đường trung bình động kép, MACD và các chiến lược khác.
    • Chiến lược hồi quy Ví dụ, chiến lược lưới điện, kiếm lợi nhuận từ biến động giá trên thị trường biến động.
    • 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 số cao thông qua một số thuật toán để khám phá các cấu trúc vi mô, mô hình, cơ hội thị trường, v.v.

    Điều trên được chia thành các chiến lược giao dịch. Từ góc độ thiết kế chiến lược trên nền tảng giao dịch FMZ Quant, các chiến lược cũng có thể được chia thành:

    • Chiến lược một giống Đó là nói, chiến lược này chỉ hoạt động một loài, chẳng hạn như giao dịch BTC hoặc giao dịch ETH.
    • Chiến lược đa loài Nói một cách đơn giản, nó là để điều hành nhiều loài 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, nhiều đối tượng trao đổi được cấu hình trên một bot thực (khái niệm trao đổi đã được giới thiệu trong bài viết trước, và một đối tượng trao đổi với một API KEY được cấu hình đại diện cho một tài khoản trao đổi).
    • Chiến lược logic đa Ví dụ, chiến lược MACD, chiến lược trung bình động, chiến lược lưới vv được thiết kế cùng một lúc trong một bot thực (tất nhiên, nó là để vận hành các đối tượng trao đổi khác nhau, và hoạt động của cùng một đối tượng trao đổi phụ thuộc vào việc liệu chiến lược cụ thể có xung đột hợp lý hay không)
  • Giao diện API Exchange Làm thế nào để kịch bản giao dịch lập trình vận hành tài khoản sàn giao dịch? Vì vậy, những loại giao diện mở cho trao đổi? Trong bài viết trước, chúng tôi đã nói về trao đổi có giao diện REST và Websocket nói chung trong phần Exchange. Ở đây chúng tôi thêm một số khái niệm từ cấp độ thủ tục chiến lược.

    • Giao diện không cần xác minh Thông thường được gọi là công khai giao diện, loại giao diện này không yêu cầu xác minhAPI KEY(nếu bạn quên API KEY là gì, bạn có thể chuyển sang bài viết trước). Loại giao diện này là giao diện thị trường nói chung, chẳng hạn như truy vấn giá thị trường chuyên sâu, truy vấn dữ liệu đường K, truy vấn tỷ lệ tài trợ, truy vấn thông tin về các loại giao dịch, truy vấn dấu giờ máy chủ trao đổi, v.v. Nói một cách đơn giản, giao diện không liên quan đến tài khoản của bạn có thể được xác định gần như là giao diện công khai (không cần xác minh)
      Trên nền tảng giao dịch FMZ Quant, khi gọi một hàm API chưa xác minh (bao gồm giao diện không xác minh của sàn giao dịch, giao diện công cộng), ngay cả khi cấu hình API KEY không chính xác, dữ liệu được trả về bởi giao diện có thể được thu thập bình thường (vì không xác minh).

    • Các giao diện cần xác minh Nói một cách đơn giản, đó là giao diện cần được xác minh (thông qua API KEY), loại giao diện này được gọi là giao diện riêng tư. Nó 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 vị trí tài khoản, truy vấn lệnh đang chờ, truy vấn chuyển khoản, chuyển tiền, điều chỉnh đòn bẩy, thiết lập chế độ vị trí, v.v. Tất cả các hoạt động này phải được xác minh. Trên nền tảng giao dịch FMZ Quant, khi gọi chức năng API cần được xác minh (cổng giao diện cần được xác minh cho trao đổi được đóng gói, giao diện riêng), nếu API KEY được cấu hình không chính xác, sẽ báo cáo lỗi khi gọi giao diện và sẽ trả về giá trị null.

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

    Nền tảng giao dịch FMZ Quant bao gồm hành vi giao dịch và giao diện với các định nghĩa nhất quán (như giao diện đường K, giao diện thị trường chuyên sâu, giao diện truy vấn tài sản hiện tại, giao diện lệnh, giao diện hủy lệnh, v.v.), Các giao diện này được gọi là các chức năng API của nền tảng giao dịch FMZ Quant trên nền tảng giao dịch FMZ Quant, và có thể truy cập từ tài liệu API (https://www.fmz.com/api).

    Vậy làm thế nào để một số giao diện trao đổi với các hành vi và định nghĩa khác nhau được sử dụng trên nền tảng giao dịch lượng tử FMZ?

    Các giao diện trao đổi này bao gồm: chuyển giao tài sản, lệnh có điều kiện, đặt đơn đặt hàng hàng loạt, hủy đơn đặt hàng hàng loạt, sửa đổi đơn đặt hàng, vv Một số sàn giao dịch có giao diện này, một số không có và chức năng và chi tiết sử dụng của chúng có thể khá khác nhau, vì vậy các giao diện này có thể được truy cập thông quaexchange.IOchức năng trên nền tảng giao dịch lượng tử FMZ (đối với chi tiết, vui lòng tham khảo tài liệu API của nền tảng giao dịch lượng tử FMZ:https://www.fmz.com/api#exchange.io..Ngoài ra còn có một số chiến lược IO thực tế trên quảng trường chiến lược nền tảng giao dịch FMZ Quant.

    Có phải tất cả các chức năng API trên tài liệu FMZ Quant Trading Platform API tạo các yêu cầu mạng?

    Đầu tiên và quan trọng nhất, giao diện API của sàn giao dịch có hạn chế tần số truy cập (như 5 lần mỗi giây), và truy cập không thể quá thường xuyên, nếu không nó sẽ báo cáo lỗi http 429, và truy cập sẽ bị từ chối (hầu hết các sàn giao dịch báo cáo 429). Không phải tất cả các chức năng API của nền tảng giao dịch FMZ Quant sẽ tạo các yêu cầu mạng. Một số trong số đó chỉ sửa đổ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, chức năng tính toán chỉ số và lấy tên đối tượng trao đổi, v.v. Nói chung, nó có thể được đánh giá liệu một yêu cầu mạng có xảy ra từ mục đích của chức năng. Miễn là dữ liệu trao đổi, các hoạt động tài khoản trao đổi và vân vân là các yêu cầu mạng được tạo ra, các giao diện này cần phải chú ý đến tần số gọi.

    • Hãy nói về một số vấn đề phổ biến và kinh nghiệm khi sử dụng các chức năng API trên nền tảng giao dịch FMZ Quant

      • Khả năng chấp nhận lỗi Đây là lỗi phổ biến nhất, đã làm phiền vô số người mới bắt đầu. Tất cả các chiến lược backtesting thường là bình thường, tại sao bot thực chạy trong một thời gian (có thể được kích hoạt bất cứ lúc nào) và sau đó thất bại?

        img

        Khi viết một chiến lược, tất cả chúng ta cần đánh giá và xác minh dữ liệu được trả về bởi giao diện. ví dụ: dòng mã giá thị trường để có được trên nền tảng giao dịch FMZ Quant (tương tự như viết một chương trình để truy cập trực tiếp vào giao diện trao đổi bởi chính bạn):var ticker = exchange. GetTicker(), nếu chúng ta cần sử dụngLast(giá cuối cùng)tickerbiến (xem cấu trúc được trả về bởi chức năng GetTicker), chúng ta cần sử dụngvar newPrice = ticker.Lastđể có được dữ liệu như thế này (newPrice là gì? new: latest, Price: price, yes!GetTicker()chức năng trở lại dữ liệu bình thường, nó là OK, nhưng nếu có một yêu cầu thời gianout, lỗi mạng, trao đổi kéo cáp mạng, cáp bị cắt, đứa trẻ kéo công tắc điện, vv... nó sẽ gây raGetTicker()chức năng để trở lạinullTại thời điểm này, giá trị củatickernull, và nếu tôi truy cập vào nóLast, một ngoại lệ chương trình sẽ xảy ra và chương trình chiến lược sẽ dừng lại. Có vẻ như sự thất bại của cuộc gọi giao diện (call GetTicker thất bại và trả về null) không phải là lý do trực tiếp của việc dừng lại của chiến lược thực bot (lý do trực tiếp là một thuộc tính của mộtnullbiến được truy cập). Báo cáo lỗi của sự thất bại cuộc gọi giao diện sẽ không gây ra bot thực sự dừng lại (ghi chú). Vậy chúng ta có thể làm gì để tránh sự dừng lại bất thường của robot thực? Câu trả lời là thực hiện xử lý dung nạp lỗi trên dữ liệu được trả về bởi giao diện.null(một ví dụ về ngôn ngữ JavaScript, các ngôn ngữ khác thường giống nhau) Viết một đoạn mã ngắn để mô tả (đây chỉ là mô tả, bạn không thể chạy nó trực tiếp!)

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("Print the latest price:", newPrice)
        } else {
            // The data is null, there will be no problem if no operation is performed
        }
        

        Không chỉGetTickergiao diện cần phải chịu lỗi, nhưng giao diện với các yêu cầu mạng cần phải chịu lỗi cho giá trị trả về (nếu bạn sử dụng giá trị trả về của hàm) Có rất nhiều phương pháp chịu lỗi, bạn có thể sử dụng_C()chức năng (xem tài liệu API FMZ) để viết chức năng chịu lỗi và tự thiết kế cơ chế và logic chịu lỗi. Đối với việc sử dụng_C()Chú ý rằng các tham số của_C()function là một function reference, không phải là một function call._C(funcName, param1, param2), cuộc gọi là chính xác, funcName không có dấu ngoặc và param1 và param2 là các tham số được truyền cho hàm funcName._C(funcName(param1, param2)), cuộc gọi là không chính xác, thường được viết bởi những người mới bắt đầu không đọc các tài liệu FMZ API nghiêm túc.

      • Số lượng lệnh của lệnh mua thị trường giao ngay Số lượng lệnh của lệnh mua lệnh thị trường giao ngay cũng dễ bị nhầm lẫn bởi người mới bắt đầu, như đã đề cập trong bài viết trước, số lượng lệnh của lệnh mua lệnh thị trường giao ngay thường là số tiền (rất ít sàn giao dịch có thể là các thiết lập khác, nói chung, các thiết lập giao dịch đặc biệt này trên FMZ sẽ được giải thích trong tài liệu FMZ API), ví dụ: Tôi sử dụng OKEX V5 demo để kiểm tra: Cặp giao dịch được thiết lập như sau:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // Switch to the demo of OKEX exchange
            exchange.Buy(-1, 1)             // The price is -1, indicating that the order placed is a market order, and the quantity is 1, indicating that the order amount is 1USDT
        }
        

        Vì 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 (ví dụ, Binance Spot yêu cầu mỗi đơn đặt hàng lớn hơn 5USDT trước khi có thể được đặt thành công).Vì vậy, nó sẽ báo cáo lỗi nếu bạn đặt đơn đặt hàng như thế này:

        Error	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:]
        
      • Hướng dẫn đặt hàng trong tương lai Khi thực hiện các chiến lược tương lai, hướng đặt lệnh thường bị những người mới bắt đầu mắc sai lầm, dẫn đến vấn đề. Hãy xem mô tả trên tài liệu API đầu tiên:https://www.fmz.com/api#exchange.setdirection...

        img

        Vì chức năng thứ tự chỉ làBuy, SellTuy nhiên, tương lai (tất nhiên, không có vấn đề với chỗ, chỗ chỉ được mua và bán) có các hướng mở dài, đóng dài, mở ngắn và đóng ngắn, vì vậy nó là rõ ràng rằng mua / bán không thể thể hiện các hoạt động theo nhiều hướng.exchange.SetDirection(), định hướng giao dịch tương lai. Trên FMZ,exchange.SetDirection("buy")(đặt hướng đầu tiên) được sử dụng cùng vớiexchange.Buy, có nghĩa là lệnh được đặt là một lệnh để mở một vị trí dài. Và cứ thế:exchange.SetDirection("sell")được sử dụng cùng vớiexchange.Sell, có nghĩa là lệnh được đặt là một lệnh để mở một vị trí ngắn.exchange.SetDirection("closebuy")được sử dụng cùng vớiexchange.Sell, nó có nghĩa là lệnh được đặt là một lệnh để đóng một vị trí dài.exchange.SetDirection("closesell")được sử dụng cùng vớiexchange.Buy, có nghĩa là lệnh được đặt là lệnh đóng một vị trí ngắn. Người mới bắt đầu thường sử dụngexchange.SetDirection("sell")cùng vớiexchange.Buy, hoặc các kết hợp sai khác. sau đó một lỗi được báo cáo (đánh giá ngược có thể không báo cáo một lỗi, nhưng đây rõ ràng là một lỗi logic, rối loạn ám ảnh ép buộc không thể dung nạp...). Một sai lầm phổ biến khác của người mới bắt đầu

        function main() {
            exchange.SetContractType("quarter")   // Set the current contract as a quarterly contract
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("See my market order is placed and the transaction is completed, there is a position", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy is used in conjunction with Sell, yes~
            exchange.Sell(-1, 1)
        }
        

        img
        Ở đây bạn có thể hỏi: Tại sao tôi có một vị trí và closebuy và Sell cũng được sử dụng cùng nhau, tại sao tôi nhận được một lỗi và không thể đóng vị trí? Tôi sẽ trả lời: Bạn đã đóng sai hướng! Một trong những tình huống có thể xảy ra trong báo cáo lỗi trên là: hướng đóng được đặt chính xác, chức năng lệnh được sử dụng chính xác và vị trí theo hướng này cũng được giữ, nhưng lỗi vẫn được báo cáo. Lý do là chương trình của bạn có thể đã đặt nhiều lệnh, nhưng lệnh ban đầu chưa được thực hiện, và lệnh đóng đang chờ trên thị trường.

      • Log output, hiển thị thông tin giao dịch Thiết kế các chiến lược giao dịch được lập trình và định lượng là không thể tách rời khỏi thiết kế tương tác giữa con người và máy tính, chẳng hạn như hiển thị dữ liệu đầu ra nhật ký hoạt động . Chúng tôi thường sử dụng ngôn ngữ lập trình bản địa để viết kịch bản bot và chương trình chiến lược thực sự. Các chức năng đầu ra của ngôn ngữ hiện tại được sử dụng trực tiếp. Ví dụ: sử dụng pythonprint. sử dụng javascriptconsole.log. Sử dụng Golangfmt.Println(). Sử dụng C++cout

        Hãy nói về việc hiển thị thông tin trên nền tảng FMZ, trên nền tảng FMZ Quant Trading, có hai nơi chính mà thông tin được hiển thị.

        • Cột trạng thái Sau khi bot thực sự chạy, trang bot thực sự là như trong hình:

          img

          Phần hiển thị là thông tin cột trạng thái. Cột trạng thái chủ yếu được sử dụng để hiển thị một số dữ liệu thay đổi thời gian thực (vì thay đổi thời gian thực cần được quan sát trong thời gian thực, và nó không thể được in dưới dạng nhật ký mỗi lần, loại dữ liệu này có thể được hiển thị trong cột trạng thái. Dữ liệu hiển thị trên cột trạng thái sử dụngLogStatusĐể biết chi tiết, vui lòng tham khảo tài liệu FMZ API.

        • Cột nhật ký Ngoài ra cũng bị loại bỏ trên trang bot thực sự, như được hiển thị trong hình:

          img

          Phần hiển thị là cột nhật ký. Cột nhật ký chủ yếu được sử dụng để ghi lại một số dữ liệu nhất định tại một thời điểm nhất định vĩnh viễn, hoặc ghi lại một hoạt động của một chiến lược nhất định tại một thời điểm nhất định. Có nhiều loại gỗ:

          1. Common log, các chiến lược trên FMZ áp dụng chức năng Log để xuất ra và in nó trong log chiến lược.

            img

          2. Lịch đặt hàng, sử dụngexchange.Sell/exchange.Buytrong FMZs chiến lược sẽ ghi lại trong log đầu ra tự động.

            img

          3. Lịch hủy,exchange.CancelOrderđược sử dụng trong chiến lược FMZ, sẽ tự động xuất bản nhật ký hủy trong nhật ký.

            img

          4. Lịch lỗi, khi chiến lược trên FMZ đang chạy, một lỗi gọi xảy ra trên giao diện thực hiện yêu cầu mạng, một ngoại lệ được ném (chẳng hạn như một tuyên bố ném), nhật ký lỗi được xuất ra trong nhật ký tự động.

            img

        Các chức năng API trên FMZ, các chức năng có thể tạo ra đầu ra nhật ký như Log ((...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id), vv, tất cả chúng đều có thể được theo sau bởi một số tham số đầu ra bổ sung sau các tham số cần thiết, chẳng hạn như: exchange. CancelOrder ((order[j].Id, orders[j]), đây là để đầu ra thông tin đơn đặt hàng khi thứ tự đơn đặt hàng[j] bị hủy bỏ.

        function main() {
            Log("data1", "data2", "data3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "Attached data1", data2, "...")
            exchange.CancelOrder(id, "Attached data1", data2, "...")
            LogProfit(100, "Attached data1", data2, "...")
        }
        
      • Sử dụng các chức năng chỉ số Trước khi nói về chức năng chỉ số, hãy hiểu một chỉ số là gì trước tiên. đơn giản, nó là một đường, chẳng hạn như đường trung bình động, MACD và ATR. Hỏi: Những chỉ số này đến từ đâu? Đáp: Tất nhiên là được tính toán. Hỏi: Cơ sở tính toán là gì? A: Tính toán dựa trên dữ liệu đường K. Hỏi: Hãy đưa ra một ví dụ? A: Lấy chỉ số chỉ số trung bình động đơn giản nhất làm ví dụ, nếu chúng ta sử dụng dữ liệu đường K hàng ngày (tức là đường dương hoặc âm đại diện cho một ngày) làm nguồn dữ liệu để tính toán chỉ số. Hỏi: Chỉ số trung bình động có thể được tính nếu số lượng K-line BAR nhỏ hơn 10 không? A: Không chỉ chỉ số trung bình động không thể được tính toán, nhưng bất kỳ chỉ số nào cũng không thể tính toán giá trị chỉ số hiệu quả khi số lượng dữ liệu K-line BAR không đáp ứng tham số thời gian chỉ số, và vị trí tương ứng của mảng tính toán sẽ được lấp đầy với các giá trị trống, ví dụ:JavaScriptchiến lược ngôn ngữ sẽ hiển thịnullkhi in dữ liệu chỉ số được tính toán.

        Nó xảy ra rằng có một ví dụ hướng dẫn trong hình vuông chiến lược:https://www.fmz.com/strategy/125770Backtest chiến lược ví dụ hướng dẫn, chúng ta có thể thấy biểu đồ được tạo ra bởi hệ thống backtesting và trung bình động 10 giai đoạn:

        img

        Chiến lược vẽ tùy chỉnh, vẽ K-line cũng như biểu đồ trung bình động.

        img

        Q: Nếu tôi muốn một đường trung bình động 10 giờ thì sao? A: Sử dụng dữ liệu đường K với dữ liệu đường K theo thời gian hàng giờ sẽ ổn.

        Nói một cách đơn giản, đường K mà chúng ta thấy là một mảng sau khi chúng ta số hóa nó (bạn có thể hỏi Baidu nếu bạn không hiểu khái niệm mảng), 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 trong mảng là phần xa nhất từ thời gian hiện tại, và phần tử cuối cùng của mảng là phần gần nhất với thời gian hiện tại. Thông thường, thanh cuối cùng của dữ liệu đường K là thanh của giai đoạn hiện tại, thay đổi theo thời gian thực và không hoàn thành (bạn có thể quan sát các thay đổi bằng cách đăng nhập vào trang trao đổi và quan sát đường K). Các chỉ số được tính toán cũng tương ứng với các thanh đường K. Trong ví dụ trên, chúng ta có thể thấy rằng một giá trị chỉ số tương ứng với một thanh đường K. Lưu ý rằng thanh đường K cuối cùng thay đổi theo thời gian thực, và chỉ số được tính toán cũng sẽ thay đổi với sự thay đổi của thanh đường K.

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

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // print moving average
        }
        

        Sử dụng thư viện talib:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // print moving average
        }      
        

        Dữ liệu chỉ số được tính toán ma là một mảng, và mỗi phần tử tương ứng với mảng K-line (những bản ghi) một đến một, tức là,ma[ma.length -1]tương ứng vớirecords[records.length - 1], và vân vân.

        Điều tương tự cũng xảy ra với các chỉ số phức tạp khác, và chúng ta cần chú ý đến các chỉ số như MACD.

        var macd = TA.MACD(records)   // In this way, only the K-line data is passed in, not the indicator parameters. The indicator parameters use the default values, and the same goes for other indicator functions.
        

        Tại thời điểm này, biến macd là một mảng hai chiều (bạn có thể hỏi Baidu nếu bạn không hiểu khái niệm). Q: Tại sao dữ liệu chỉ số macd là một mảng hai chiều? A: Bởi vì chỉ số macd bao gồm hai đường (đường dif, đường dea) và một tập hợp các thanh khối lượng (dây khối lượng macd, trên thực tế dữ liệu thanh khối lượng này cũng có thể được coi là một đường).

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

        Dưới đây cũng là một ví dụ hướng dẫn sẵn sàng, nếu bạn quan tâm, bạn có thể học tại:https://www.fmz.com/strategy/151972

        img


Có liên quan

Thêm nữa