Các nhà phát minh định lượng tài liệu API

Tác giả:Giấc mơ nhỏ, Tạo: 2017-11-27 09:05:08, Cập nhật: 2023-07-12 16:47:31

[TOC]

Thông tin cơ bản

Nhập vào

FMZ là một nền tảng giao dịch định lượng.

FMZ (sáng tạo) sàn giao dịch định lượngĐây là cộng đồng định lượng chuyên nghiệp nhất trong lĩnh vực giao dịch định lượng, nơi bạn có thể học, viết, chia sẻ, mua và bán các chiến lược định lượng; truy cập trực tuyến và sử dụng các bảng điều khiển để thực hiện các giao dịch định lượng; chạy, công khai, trực quan thực tế; hỗ trợ hầu hết các sàn giao dịch tiền kỹ thuật số chính thống.

Bộ bài tập đầy đủ

Bài học bằng hình ảnh:

Video hướng dẫn:

Nếu bạn gặp vấn đề, bạn có thể gửi câu hỏi, thảo luận trên diễn đàn, gửi đơn xin việc trên nền tảng, gửi điện tín vào forum bất cứ lúc nào.Telegram@Groups@Administrators, câu hỏi thường được trả lời nhanh chóng.

Hỗ trợ phát triển hỗ trợ ChatGPT

FMZ Quantified Trading Platform đã tích hợp ChatGPT như một công cụ phát triển hỗ trợ, bạn có thể nhấp vào "ChatGPT" trong hộp đường tắt của "Control Center" để chuyển sang "ChatGPT".Trang hỗ trợ ChatGPT

Những ngôn ngữ lập trình nào có thể thực hiện chiến lược của tôi?

FMZ Quantified Trading Platform hỗ trợ sử dụngJavaScriptTypeScriptPythonC++PINE麦语言Blockly可视化Những người tham gia vào cuộc họp này đã được mời đến tham dự.

Hỗ trợTypeScriptTrong khi đó, các ngôn ngữ được thiết lập để tạo ra chiến lược.JavaScriptVà sau đó viết vào đầu mã chính sách.// @ts-checkHoặc nhấp vào nút "TypeScript" ở góc trên bên phải của khu vực chỉnh sửa chính sách để chuyển sangTypeScript◎ Nền tảng sẽ tự động nhận dạng mã là:TypeScriptBạn có thể tham khảo các trang web của chúng tôi và cung cấp cho bạn hỗ trợ biên dịch và kiểm tra kiểu tương ứng:

  • Loại bảo mật:TypeScriptTính năng kiểm tra kiểu tĩnh của Microsoft có thể giúp bạn phát hiện các lỗi tiềm ẩn khi viết mã và cải thiện chất lượng mã.
  • Mã tự động bổ sung:TypeScriptHệ thống kiểu của Java cho phép bạn tìm các thuộc tính và phương pháp cần thiết nhanh hơn khi viết mã, cải thiện hiệu quả phát triển.
  • Một cấu trúc mã rõ ràng hơn: sử dụngTypeScriptBạn có thể tổ chức tốt hơn và duy trì mã của bạn để làm cho nó dễ đọc và hiểu.
  • Các tính năng lập trình hướng đối tượng mạnh mẽ:TypeScriptCung cấp các tính năng lập trình hướng đối tượng mạnh mẽ như giao diện, lớp học và kiểu phổ quát để giúp bạn viết mã chính sách mạnh mẽ, tái sử dụng hơn.

Chỉ cần nắm vững một trong những ngôn ngữ này là đủ. Ngoài việc hỗ trợ cách viết mã, các chiến lược thiết kế có thể được sử dụng để tạo các chiến lược mô-đun trực quan (Blockly). Các chiến lược xây dựng mô-đun trực quan sử dụng các chiến lược thiết kế theo cách trực quan hơn, không cần mã hóa.

BlocklyHình ảnh hướng dẫn:

Thiết lậpPythonCác chương trình chiến lược được sử dụngPythonNgười giải thích

Sử dụngPythonCác chính sách được viết, kiểm tra lại hoặc thực hiện khi ổ đĩa nếu môi trường hệ thống mà chủ nhà đang cài đặt đồng thờiPython2Python3, có thể được khởi động khi chính sách bắt đầu đặt chính sách trên dòng đầu tiênPythonCác phiên bản khác.#!python3#!python2Bạn có thể sử dụng các trình giải thích khác nhau để tìm kiếm trình giải thích.#!/usr/bin/python3

Trợ lý là gì?

Người quản lýCó thể hiểu là người thực hiện chính sách giao dịch của bạn, chịu trách nhiệm về các yêu cầu dữ liệu phức tạp, nhận dữ liệu, kết nối mạng, chuyển lại nhật ký, v.v.LinuxCửa sổMac OSAndroidARM LinuxCó một số người nói rằng:Trang quản lýCác bước cài đặt và cập nhật người quản trị LinuxCác nhật ký ổ đĩa thực được quản lý bởi người quản lý được lưu trữ trong thư mục nơi các chương trình của người quản lý../logs/storageTrong đó, tài liệudb3củaSqliteBạn có thể sử dụng nó trong các tài liệu cơ sở dữ liệu.SqliteCác phần mềm quản lý và chỉnh sửa trực tiếp được gọi là các phần mở rộng.db3Các tập tin trên ổ đĩa thực được gọi là các tập tin trên ổ đĩa thựcID

Thỏa thuận ủng hộ

  • Tài sản blockchain: Hiện nay đã hỗ trợ hơn 50 sàn giao dịch tài sản blockchain chính thống (tương tự tiền kỹ thuật số).
  • Truyền thông thông thường:Hiệp định chung

An ninh chiến lược

Phát triển chính sách trên nền tảng giao dịch định lượng FMZ, chỉ có thể hiển thị cho chủ tài khoản định lượng FMZ.PythonCác gói được tải trong mã chính sách để thực hiện chính sách bản địa hóa.

PythonNhững người dùng có thể sử dụng các ứng dụng khác nhau. Bởi vìPythonLà một ngôn ngữ mở mã nguồn và rất dễ bị phản biên dịch, nếu các chính sách không tự động mà là thuê, nếu lo ngại về rò rỉ chính sách có thể cho phép các chính sách chạy trên các nhà quản lý mà họ triển khai và thuê dưới dạng quản lý tài khoản con hoặc toàn bộ nhà quản lý.

PythonCác chiến lược mã hóa: Theo mặc định,PythonChiến lược là các tác giả mã không mã hóa khi sử dụng riêng, mã hóa khi cho thuê cho người khác sử dụng.PythonChính sách bắt đầu sửa mã sau đây, bạn có thể chỉ định tự sử dụng hoặc cho thuêPythonCó phải mã hóa mã chính sách khi chạy không. Hỗ trợ mã hóa mã chính sáchPythonBài viết được viết bởi:Python 2.7Các phiên bản khácPython 3.5Các phiên bản khácPython 3.6Phiên bản.

  • Các tác giả chính sách tự chạy, sử dụng mã mã hóa chính sách cho người khác bằng mã đăng ký:#!pythonSử dụng dấu chấm sau để chỉ định phiên bản trình giải thích Python,Tạm biệt, nhập lệnh mã hóaencryptNếu không được chỉ định.PythonPhiên bản được thêm trực tiếp#!encrypt

    #!python,encrypt
    

    Hoặc

    #!encrypt
    
  • Các tác giả chính sách tự chạy, không mã hóa mã chính sách để sử dụng cho người khác bằng mã đăng ký:

    #!python,not encrypted
    

    Hoặc

    #!not encrypted
    

Phán quyếtPythonCác chiến lược mã hóa mã hóa có hiệu quả hay khôngos.getenv('__FMZ_ENV__')Trả về chuỗi"encrypt"Thông báo đã có hiệu lực. Chỉ có ổ đĩa thực có hiệu lực, không được mã hóaPythonCó một số người nói rằng:

#!encrypt
def main():
    ret = os.getenv('__FMZ_ENV__')
    # 打印变量ret为字符串encrypt或者ret == "encrypt"为真,即代表加密生效
    Log(ret, ret == "encrypt")

An ninh khóa

Thông tin tài khoản được cấu hình trên nền tảng giao dịch định lượng FMZ, dữ liệu nhạy cảm như chuỗi mã hóa trong các tham số chính sách đều được mã hóa ở phía trình duyệt. Những thông tin được lưu trữ trên nền tảng giao dịch định lượng FMZ đều là thông tin mã hóa ("dữ liệu không rõ ràng"). Chỉ có thiết bị riêng của người dùng có thể giải mã, giúp tăng cường đáng kể tính bảo mật của dữ liệu nhạy cảm.

  • Nền tảng hỗ trợ cấu hình bản địa hóa thông tin nhạy cảm như thông tin liên quan đến tài khoản sàn giao dịch, khóa bí mật

    Trên trang thông tin cấu hình sàn giao dịch của nền tảng, tất cả các điều khiển hộp văn bản mã hóa được che giấu đều hỗ trợ cách thức đường dẫn hồ sơ cấu hình, được sử dụng để tải vào tệp địa phương của người quản lý; dưới đây là các sàn giao dịch.RSA KEYMột ví dụ về phương pháp xác minh là chi tiết về cách cấu hình thông tin nhạy cảm tại các thiết bị mà chương trình quản trị viên đang sử dụng.

    1, tạo khóa công cộng, khóa riêng RSA. Ví dụ: tạo định dạngPKCS#8Có rất nhiều công cụ có thể tạo ra, ví dụ:openssl❖ 2/ Tạo trên sàn giao dịchRSA KEY, được tạo và tải lênBước đầu tiênCác công cụ này được sử dụng để tạo ra các khóa công khai. 3, sẽBước đầu tiênChìa khóa riêng được tạo trongtxtĐịnh dạng tệp lưu trữ thư mục cấp cùng quản trị viên, cũng có thể lưu trữ các đường dẫn khác trong thư mục mà chương trình quản trị viên đang sử dụng. 4. Thiết lập giao dịch trên FMZAccess KeyTrong hộp chỉnh sửa, hãy điền vào các mục được tạo trên sàn giao dịchRSA KEY❖ 5. Thiết lập giao dịch trên FMZSecret KeyTrong hộp chỉnh sửa, hãy điền vàoBước 3Đặt trong thư mục cùng cấp với người quản lýtxtĐường dẫn của tệp, ví dụ như tên tệp được đặt là:rsaKey.txtTrong thư mục cùng cấp với tài liệu và người quản lý, hãy điền:file:///rsaKey.txtNếu tài liệu này nằm trong trình quản lý, thì trình quản lý cấp saursa_keyTrong đó, hãy viết:file:///rsa_key//rsaKey.txt❖ Nếu được đặtrsaKey.txtTài liệu ở các đường dẫn khác, cụ thể thiết lập theo cách này, cần lưu ý rằng tài liệu này chỉ hỗ trợ đặt trong thư mục cấp chủ hoặc thư mục con.

    Điều này giúp lưu trữ khóa cá nhân an toàn hơn, và các quy trình chi tiết có thể được tham khảo.Video giải thích

Hệ thống kiểm tra lại

Hệ thống kiểm tra lại là gì và nó có ích gì?

Khi bạn đã hoàn thành công việc thiết kế một chiến lược giao dịch định lượng, làm thế nào bạn có thể biết được những điều cơ bản về chiến lược của bạn như logic, hướng lợi nhuận của chiến lược? Tất nhiên chúng tôi không thể chạy chiến lược trực tiếp trên thị trường để giao dịch vàng và bạc thật, chúng tôi có thể kiểm tra chiến lược của bạn bằng dữ liệu lịch sử.

Có phải hệ thống kiểm tra dữ liệu chính xác, và kết quả kiểm tra chính xác như thế nào?

FMZ Quantified Trading Platform chia mô hình tra cứu thànhKiểm tra lại trên đĩa thựcKiểm tra lại ở cấp độ tương tự❖ Phân tích ở mức đĩa thực hoàn toàn dựa trên dữ liệu lịch sử đầy đủ; Phân tích ở mức tương tự được tạo ra dựa trên dữ liệu đường K thựctickDữ liệu để kiểm tra lại. Cả hai đều được kiểm tra lại dựa trên dữ liệu lịch sử thực tế, nhưng dữ liệu kiểm tra lại trên đĩa thực tế chính xác hơn và kết quả đáng tin cậy hơn.Phương pháp đo FMZTuy nhiên, việc sử dụng lại chỉ là một chiến lược dựa trên dữ liệu lịch sử, và dữ liệu lịch sử không thể hoàn toàn đại diện cho các thị trường trong tương lai. Các thị trường lịch sử có thể lặp lại hoặc có thể bay ra khỏi thiên nga đen.

Các vấn đề cần lưu ý khi xem xét các chiến lược ngôn ngữ khác nhau:

JavaScriptC++Lưu ý rằng, bạn có thể sử dụng các công cụ này để kiểm tra các nội dung của bạn.WexAppCác sàn giao dịch thực tế giả mạo (tức là FMZ)WexAppCác giao dịch giả) hoạt động mà không cần cài đặt bất kỳ phần mềm, thư viện hoặc module nào khác.PythonQuá trình kiểm tra lại được thực hiện trên máy chủ, có thể được kiểm tra lại trên máy chủ công cộng FMZ được định lượng hoặc có thể được kiểm tra lại trên máy chủ của người dùng.PythonNếu cần sử dụng một số thư viện, bạn cần tự cài đặt (chỉ hỗ trợ thư viện phổ biến trên máy chủ công cộng).

Dữ liệu trong hệ thống kiểm tra

FMZ định lượng sàn giao dịch phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tích phân tíchtick, mỗi chu kỳ đường K dưới cùng sẽ tạo ra 12 điểm thời gian truy cập lại, trong khi mức đĩa thực được thu thập thực.tickMột lần trong vài giây, số lượng dữ liệu rất lớn, tốc độ lặp lại chậm, do đó không thể lặp lại trong thời gian đặc biệt dài. Phương pháp lặp lại của FMZ có thể làm cho chiến lược giao dịch nhiều lần trên một đường K, tránh tình huống chỉ có thể đóng giao dịch giá bán, chính xác hơn và tính đến tốc độ lặp lại.Liên kết

Cách DEBUG chính sách trong hệ thống kiểm tra

Javascript chính sách truy cập lại trong trình duyệt Chrome

Các sàn giao dịch được hỗ trợ trong hệ thống kiểm tra

  • Cryptocurrency (tiền kỹ thuật số)

    Tên Loại Giải thích
    Bitfinex Đối tượng giao dịch trực tiếp Những giao dịch được hỗ trợ hạn chế như:BTC_USD,ETH_USD,LTC_USDHãy chú ý, giao dịch với đồng tiền giá trị làUSDĐánh giá bằng đô la
    Biên An Đối tượng giao dịch trực tiếp Những giao dịch được hỗ trợ hạn chế như:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCVâng.
    OKX Đối tượng giao dịch trực tiếp Những giao dịch được hỗ trợ hạn chế như:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCVâng.
    Đồng xu Đối tượng giao dịch trực tiếp Những giao dịch được hỗ trợ hạn chế như:BTC_USDT,ETH_USDT,ETH_BTC,LTC_BTCVâng.
    OKX tương lai Đối tượng giao dịch tương lai Những giao dịch được hỗ trợ hạn chế như:BTC_USD,ETH_USDVà như vậy, giao dịch với đồng tiền định giá làUSD, Đặt mã hợp đồng cụ thể ((xemexchange.SetContractTypeCác mã hợp đồng được hỗ trợ là:this_weeknext_weekquarterswap
    HuobiDM Đối tượng giao dịch tương lai HuobiDM là tương lai token (đối tác token), hỗ trợ giao dịch giới hạn cho các cặp như:BTC_USD,ETH_USDVà như vậy, giao dịch với đồng tiền định giá làUSD, Đặt mã hợp đồng cụ thể ((xemexchange.SetContractTypeCác mã hợp đồng được hỗ trợ là:this_weeknext_weekquarterswap
    BitMEX Đối tượng giao dịch tương lai Các cặp giao dịch là:XBT_USD, Đặt mã hợp đồng cụ thể ((xemexchange.SetContractTypeCác mã hợp đồng được hỗ trợ là:XBTUSD
    Tiền tương lai Binance Đối tượng giao dịch tương lai Những giao dịch được hỗ trợ hạn chế như:BTC_USDT,ETH_USDTVà như vậy, giao dịch với đồng tiền định giá làUSDT, Đặt mã hợp đồng cụ thể ((xemexchange.SetContractTypeSau đó, hợp đồng làUSDTCác mã hợp đồng được hỗ trợ tại đây là:swap
    Deribit quyền chọn Đối tượng của sàn giao dịch quyền chọn Các cặp giao dịch là:BTC_USD,ETH_USD, Đặt mã hợp đồng cụ thể ((xemexchange.SetContractTypeSau đó, hợp đồng là hợp đồng tiền tệ.

    Các đối tượng giao dịch tương lai của hệ thống kiểm tra không hỗ trợ chuyển đổi cặp giao dịch trong mã chiến lược.

Mức độ mô phỏng

Đánh giá cấp độ tương tự được mô phỏng dựa trên dữ liệu đường K dưới cùng của hệ thống đánh giá, theo một thuật toán nhất định trong khuôn khổ bao gồm các giá trị giá cao nhất, giá thấp nhất, giá mở, giá đóng của đường K dưới cùng Bar.tickDữ liệu, như là thời gian thựctickDữ liệu được trả về khi yêu cầu giao diện.Người phát minh mô tả cơ chế kiểm tra lại ở mức độ tương tự

Mức độ thực tế

Kiểm tra lại ở mức độ thực là thực.tickDữ liệu cấp độ trong chuỗi thời gian của Bar.tickChiến lược cho dữ liệu cấp độ là sử dụng tính toán cấp độ thực gần như thực hơn.tickLà dữ liệu được ghi lại thực tế, không phải tạo ra giả lập; hỗ trợ dữ liệu sâu, quay lại dữ liệu ghi lại giao dịch thị trường, hỗ trợ độ sâu tùy chỉnh, hỗ trợ dữ liệu phân số; hỗ trợ dữ liệu phân số ở mức đĩa thật tối đa 50MB, không giới hạn phạm vi thời gian phân số trong giới hạn dữ liệu, nếu cần, có thể tăng phạm vi thời gian phân số càng lớn càng tốt, có thể giảm cài đặt số lượng file sâu, không sử dụng dữ liệu phân số để tăng phạm vi thời gian phân số; gọiGetDepthGetTradesChức năng lấy dữ liệu giao dịch trả về.GetTickerGetTradesGetDepthGetRecords, sẽ không đẩy nhiều lần thời gian di chuyển trên đường thời gian hồi kết ((không kích hoạt nhảy đến thời điểm dữ liệu thị trường tiếp theo)); cho một trong các hàm trên, gọi lặp đi lặp lại sẽ đẩy thời gian hồi kết di chuyển trên đường thời gian hồi kết (( nhảy đến thời điểm dữ liệu thị trường tiếp theo); sử dụng hồi kết ở mức độ thực không nên chọn thời gian quá sớm, có thể không có dữ liệu cấp độ thực trong khoảng thời gian quá sớm.

Chứng minh hỗ trợ hiện tại

  • Biên An
  • OKX ((OKX hiện tại))
  • HuobiDM (tiền tương lai token)

Phân tích hệ thống điều chỉnh tham số

FMZ Quantified Trading Platform có chức năng điều chỉnh tham số của hệ thống kiểm tra lại bằng cách điều chỉnh tùy chọn điều chỉnh của từng tham số khi kiểm tra lại, như sau:

  • Giá trị tối thiểu: giá trị ban đầu của tham số giới hạn.
  • Giá trị tối đa: giá trị tối đa sau khi thay đổi các tham số giới hạn tăng dần.
  • Độ dài: Các tham số tăng biến số.

Tạo ra các tập hợp các tham số và lặp lại qua các tập hợp các tham số này (tức là mỗi tập hợp các tham số được lặp lại một lần); Các tham số chính sách chỉ có thể điều chỉnh tham số trong hệ thống lặp lại với kiểu là ** số (number) **.

Ví dụ, đặt tùy chọn điều chỉnh tham số trên trang xem lại:

img

Chế độ điều chỉnh tham số:

img

Bảo lưu cài đặt kiểm tra lại

Trong trang chỉnh sửa chính sách, trong phần "Analogue Retest" (tức là: Hệ thống Retest) bạn có thể thiết lập các tùy chọn như cấu hình Retest, các tham số chính sách để thực hiện Retest. Các cấu hình Retest được sử dụng để thiết lập phạm vi thời gian Retest, các giao dịch được chỉnh sửa, thời điểm trượt, phí thủ tục, và các điều kiện khác; các tham số chính sách là các tùy chọn tham số của chính sách. Khi các tham số này được thiết lập tốt, bạn có thể theo các tùy chọn Retest đã được thiết lập, thì làm thế nào để lưu thông tin này?

img

vớiJavaScriptVí dụ, hãy nhấp vào "Save Retrospect Settings to Source File":

img

JavaScript/Python/C++/麦语言Sau đó, bạn có thể cài đặt Save Retrieval vào định dạng tệp nguồn một cách khác nhau:

/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

Ngôn ngữ:

(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)

Nguồn dữ liệu tùy chỉnh

Hệ thống sử dụngGETPhương pháp yêu cầu URL tùy chỉnh (địa chỉ truy cập công khai) để lấy nguồn dữ liệu bên ngoài để xem lại, thêm các tham số yêu cầu như sau:

Các tham số Ý nghĩa Giải thích
biểu tượng Tên giống Ví dụ: BTC_USD_OKCoin_EN
eid Sàn giao dịch Ví dụ: OKCoin
tròn Đánh giá chính xác Nếu 3 là giá trị trong dữ liệu được trả về thì giá trị đó phải được nhân với 1000.
Số lượng chính xác Nếu 2 thì số trong dữ liệu được trả về sẽ được nhân 100 và lấy nguyên tố
thời gian chu kỳ bar (μs) Ví dụ: 60000 cho các yêu cầu bar phút
độ sâu Số độ sâu 1-20
thương mại Có cần phân chia dữ liệu không? đúng/sai
từ Thời gian bắt đầu Kích thước thời gian Unix
đến Thời gian kết thúc Kích thước thời gian Unix

Lưu ý:

round与vround是为了避免网络传输过程中浮点数的精度丢失设计的两个参数,价格数据和成交量、订单量数据都采用整型传输。

Một ví dụ về dữ liệu được ghép lại:

http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200

Các định dạng được trả về phải là một trong hai định dạng sau (được hệ thống nhận dạng tự động):

Kiểm tra lại mức Bar thông thường

{
    "schema":["time","open","high","low","close","vol"],
    "data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}

Dữ liệu được kiểm tra lại ở cấp độ tick (có thông tin về độ sâu của đĩa, định dạng độ sâu là [giá, số lượng], có thể có nhiều mức độ độ sâu, asks là thứ tự giá, bids là thứ tự giá)

{
    "schema":["time","asks", "bids","trades","close","vol"],
    "data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}

Giải thích

Các trường Giải thích
sơ đồ Xác định thuộc tính của hàng trong mảng data, phân biệt chữ viết nhỏ, chỉ giới hạn trong time, open, high, low, close, vol, asks, bids
dữ liệu Một mảng chứa dữ liệu theo sơ đồ

Định dạng dữ liệu

Các trường Giải thích
yêu cầu/đề nghị [Giá, số lượng,...]
thương mại [Thời gian, hướng, giá, số lượng]

Số liệu về tỷ lệ tài chính: Ví dụ, khi tái báo giá tương lai Binance, dữ liệu tỷ lệ vốn bổ sung cũng được yêu cầu và cần cung cấp nguồn dữ liệu tùy chỉnh. Ví dụ, cấu trúc dữ liệu tỷ lệ vốn được yêu cầu khi tái báo giá tương lai Binance là như sau.

{
	"detail": {},
	"symbol": "futures_binance.eth_usdt.funding",
	"schema": ["time", "open", "high", "low", "close", "vol"],
	"data": [
		[1582876800000, 25289, 25289, 25289, 25289, 0],
		[1582905600000, 30522, 30522, 30522, 30522, 0],
		[1582934400000, 40998, 40998, 40998, 40998, 0],
        ...
		[1626652800000, 198, 198, 198, 198, 0],
		[1626681600000, 691, 691, 691, 691, 0],                  // 相邻的周期间隔8小时
		[1626710400000, 310, 310, 310, 310, 0],                  // 币安资金费率8小时更新一次,资金费率数据为什么为310?
		[1626739200000, 310, 310, 310, 310, 0],                  // 因为和K线数据一样,为了避免网络传输过程中浮点数的精度丢,数据采用整型,所以需要根据round参数处理数据,处理后用于返回给回测系统的数据就为310
		[1626768000000, -41610, -41610, -41610, -41610, 0],      // 资金费率数据也可能为负值
		[1626796800000, -5125, -5125, -5125, -5125, 0],
        ...		
		[1627977600000, 10000, 10000, 10000, 10000, 0]
	]
}

Ví dụ về các yêu cầu dữ liệu được gửi bởi hệ thống kiểm tra là:

http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400

Mô hình nguồn dữ liệu tùy chỉnh:

Đặt nguồn dữ liệu, địa chỉ:http://xxx.xx.x.xx:9090/dataCác dịch vụ dữ liệu tùy chỉnh, sử dụng golang để viết:

package main 
import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
    // r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "schema":["time","open","high","low","close","vol"],
            "data":[
                [1564315200000,9531300,9531300,9497060,9497060,787],
                [1564316100000,9495160,9495160,9474260,9489460,338]
            ]
        }
        */
        ret := map[string]interface{}{
            "schema" : []string{"time","open","high","low","close","vol"},
            "data" : []interface{}{
                []int64{1564315200000,9531300,9531300,9497060,9497060,787},
                []int64{1564316100000,9495160,9495160,9474260,9489460,338},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

Các chiến lược thử nghiệmJavaScriptVí dụ:

/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(ticker)
    Log(records)
}

Một biểu đồ được vẽ từ dữ liệu tùy chỉnh trong hệ thống kiểm tra:

Chiến lược in thông tin:

Động cơ kiểm tra nội địa

FMZ là nền tảng giao dịch định lượng mở nguồnJavaScriptNgôn ngữ vàPythonĐộng cơ xem lại bản địa của ngôn ngữ, hỗ trợ cài đặt thời gian xem lạiChu kỳ đường K dưới cùng

Chìa khóa nhanh để kiểm tra lại trang

  • Chìa khóa nhanh để chuyển đổi trang sửa chính sách và trang xem lại chính sách

    Sử dụngCtrl + ,Bấm nút, chuyển sang trang xem lại và trang chỉnh sửa chính sáchCtrlSau khi nhấn phím, chỉ cần nhấn,Khóa khóa.

  • Chìa khóa nhanh để lưu chính sách

    Sử dụngCtrl + sChìa khóa, chính sách lưu.

  • Khóa tắt để bắt đầu kiểm tra lại

    Sử dụngCtrl + bBấm, bắt đầu kiểm tra lại.

Hướng dẫn mã

Chức năng nhập

Tên hàm Giải thích
main() Để nhập hàm.
onexit() Thời gian thực hiện tối đa là 5 phút cho hàm quét đuôi khi thoát khỏi bình thường, có thể không tuyên bố, sẽ trả lại lỗi nếu quá thời gianngắtNhầm lẫn.
onerror() Các hàm được kích hoạt để thực hiện việc thoát khỏi ngoại lệ có thời gian thực hiện tối đa 5 phút và có thể không được tuyên bố.PythonNgôn ngữC++Các chính sách được viết bằng ngôn ngữ không hỗ trợ chức năng này.
init() Đối với chức năng khởi tạo, các chương trình chính sách sẽ được gọi trước khi bắt đầu chạy, nhưng không thể được tuyên bố.
  • Điều này có nghĩa:
    • Hệ thống kiểm tra không hỗ trợonerror()Chức năng.
    • Động cơ này được kích hoạt trong khi thực tế.onerror()Và nếu chúng ta có một hàm, nó sẽ không kích hoạt nữa.onexit()Chức năng.

onexit ((()

onexit(), xử lý các công việc lau đuôi, thực hiện tối đa 5 phút, được thực hiện bởi người dùng.

function main(){
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)
}

// 扫尾函数实现
function onexit(){
    var beginTime = new Date().getTime()
    while(true){
        var nowTime = new Date().getTime()
        Log("程序停止倒计时..扫尾开始,已经过去:", (nowTime - beginTime) / 1000, "秒!")
        Sleep(1000)
    }
}
import time 
def main():
    Log("开始运行, 5秒后停止,并执行扫尾函数!")
    Sleep(1000 * 5)

def onexit():
    beginTime = time.time() * 1000
    while True:
        ts = time.time() * 1000
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!")
        Sleep(1000)
void main() {
    Log("开始运行, 5秒后停止,并执行扫尾函数!");
    Sleep(1000 * 5);
}

void onexit() {
    auto beginTime = Unix() * 1000;
    while(true) {
        auto ts = Unix() * 1000;
        Log("程序停止倒计时..扫尾开始,已经过去:", (ts - beginTime) / 1000, "秒!");
        Sleep(1000);
    }
}

init()

init(), người dùng thực hiện chức năng khởi tạoinit(), sẽ tự động thực hiện khi chính sách bắt đầu chạy.init()Chức năng, hoàn thành nhiệm vụ khởi tạo được thiết kế trong chính sách.

function main(){
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")
}

// 初始化函数
function init(){     
    Log("初始化!")
}
def main():
    Log("程序第一行代码执行!", "#FF0000")
    Log("退出!")

def init():
    Log("初始化!")
void main() {
    Log("程序第一行代码执行!", "#FF0000");
    Log("退出!");
}

void init() {
    Log("初始化!");
}

onerror()

onerror()Một số người cho rằng, "Điều đó là một sự cố".onerror()Chạy hàm không hỗ trợPythonC++Các chiến lược ngôn ngữ.

function main() {
    var arr = []
    Log(arr[6].Close)
}

function onerror() {
    Log("错误")
}
# python不支持
// C++不支持

Khung chiến lược cổ điển

TrongJavaScriptPythonC++Các chính sách được viết trong ngôn ngữ cần được gọi trong vòng lặp chính sáchSleep()Chức năng.được sử dụng để kiểm soát tốc độ ngược lại khi kiểm tra lại, và khoảng thời gian trong thực tế để kiểm soát các câu hỏi chiến lược, do đó kiểm soát tần suất yêu cầu truy cập giao diện API của sàn giao dịch.

  • Một ví dụ về khuôn khổ cơ bản cho chiến lược tiền kỹ thuật số:

    function onTick(){
        //在这里写策略逻辑,将会不断调用,例如打印行情信息
        Log(exchange.GetTicker())
    }
    
    function main(){
        while(true){
            onTick()
            // Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
            Sleep(60000)
        }
    }
    
    def onTick():
        Log(exchange.GetTicker())
    
    def main():
        while True:
            onTick()
            Sleep(60000)
    
    void onTick() {
        Log(exchange.GetTicker());
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(60000);
        }
    }
    

    Ví dụ đơn giản nhất, nếu tôi muốn hiển thị giá 100 trên sàn giao dịch mỗi giây, số lượng thanh toán là 1 có thể được viết như sau:

    function onTick(){
        // 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
        exchange.Buy(100, 1)
    }
    
    function main(){
        while(true){
            onTick()
            // 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
            Sleep(1000)
        }
    }
    
    def onTick():
        exchange.Buy(100, 1)
    
    def main():
        while True:
            onTick()
            Sleep(1000)
    
    void onTick() {
        exchange.Buy(100, 1);
    }
    
    void main() {
        while(true) {
            onTick();
            Sleep(1000);
        }
    }
    

Thư viện mẫu

Thư viện mẫulà một module mã được sử dụng nhiều lần trong nền tảng giao dịch định lượng FMZ, là một loại mã chính sách.Thư viện mẫuKhi tạo một thư viện lớp mẫu trong thư viện chính sách tài khoản mà người phát minh đã đăng nhập vào nền tảng giao dịch định lượng hiện tại, bạn không thể thay đổi danh mục thành chính sách chung sau khi tạo.

JavaScriptCác mẫu ngôn ngữ:

img

PythonCác mẫu ngôn ngữ:

img

C++Các mẫu ngôn ngữ:

img

  • Chức năng xuất thư viện lớp mẫu Chức năng xuất khẩu là một hàm giao diện của thư viện lớp mẫu, có thể được gọi theo chính sách của thư viện lớp mẫu đó. Chức năng xuất khẩu được tuyên bố trong thư viện lớp mẫu và các mã ví dụ được thực hiện như sau:

    /*
    -- 策略引用该模板以后直接用 $.Test() 调用此方法
    -- main 函数在策略中不会触发, 只做为模板调试的入口
    */
    $.Test = function() {
        Log('Test')
    }
    
    function main() {
        $.Test()
    }
    
    def Test():
        Log("template call")
    
    # 导出Test函数, 主策略可以通过ext.Test()调用
    ext.Test = Test 
    
    // 策略引用该模板以后直接用 ext::Test() 调用此方法
    void Test() {
        Log("template call");
    }
    
  • Các tham số của thư viện mẫu Các thư viện mẫu cũng có thể đặt các tham số giao diện của riêng mình, các tham số của thư viện mẫu được sử dụng dưới dạng các biến toàn cầu trong mã thư viện mẫu.

    Lập tham số của thư viện mẫu:

    img

    Mã thư viện mẫu:

    $.SetParam1 = function(p1) {
        param1 = p1
    }
    
    $.GetParam1 = function() {
        Log("param1:", param1)
        return param1
    }
    
    def SetParam1(p1):
        global param1
        param1 = p1
    
    def GetParam1():
        Log("param1:", param1)
        return param1
    
    ext.SetParam1 = SetParam1
    ext.GetParam1 = GetParam1
    
    void SetParam1(float p1) {
        param1 = p1;
    }
    
    float GetParam1() {
        Log("param1:", param1);
        return param1;
    }
    

    Dưới đây là một trích dẫnThư viện mẫuCó một vài ví dụ về mã chiến lược:

    function main () {
        Log("调用$.GetParam1:", $.GetParam1())
        Log("调用$.SetParam1:", "#FF0000")
        $.SetParam1(20)
        Log("调用$.GetParam1:", $.GetParam1())
    }
    
    def main():
        Log("调用ext.GetParam1:", ext.GetParam1())
        Log("调用ext.SetParam1:", "#FF0000")
        ext.SetParam1(20)
        Log("调用ext.GetParam1:", ext.GetParam1())
    
    void main() {
        Log("调用ext::GetParam1:", ext::GetParam1());
        Log("调用ext::SetParam1:", "#FF0000");
        ext::SetParam1(20);
        Log("调用ext::GetParam1:", ext::GetParam1());
    }
    

    img

  • Trích dẫn thư viện mẫu

    Sau khi chọn tham chiếu trong thanh mẫu trang chỉnh sửa chính sách, bạn có thể lưu chính sách.

    img

Cấu trúc nội bộ

Các biến số toàn cầu

trao đổi

exchangeĐược xem là một đối tượng giao dịch, mặc định là đối tượng giao dịch đầu tiên được thêm vào tham số chính sách. Tất cả các tương tác với giao dịch được thực hiện thông qua các hàm trong đối tượng này.

  • Chọn lại thêm đối tượng giao dịch

  • Thêm đối tượng giao dịch vào trang thực

Các đối tượng giao dịch được thêm vào tương ứng với các đối tượng trong mã.exchangeĐối tượng:

function main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
}
def main():
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel())
void main() {
    Log("实盘页面或者回测页面上,添加的第一个交易所对象名字:", exchange.GetName(), ",标签:", exchange.GetLabel());
}
giao dịch

Nó có thể được hiểu như là lưu trữexchangeMột mảng của tất cả các đối tượng giao dịch có thể chứa nhiều đối tượng giao dịch.exchanges[0]Đó làexchange

Các đối tượng giao dịch được thêm vào tương ứng với mã chính sáchexchanges[0]exchanges[1]exchanges[2]│..., và như vậy.

function main() {
    for(var i = 0; i < exchanges.length; i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
    }
}
def main():
    for i in range(len(exchanges)):
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel())
void main() {
    for(int i = 0; i < exchanges.size(); i++) {
        Log("添加的交易所对象索引(第一个为0以此类推):", i, "名称:", exchanges[i].GetName(), "标签:", exchanges[i].GetLabel());
    }
}
Tình trạng đặt hàng

Ordertrong cấu trúcStatusCác thuộc tính.

Tên của biến thể Định nghĩa Giá trị
ORDER_STATE_PENDING Không hoàn thành 0
Order_state_closed Đã hoàn thành 1
ORDER_STATE_CANCELED Đã bị hủy 2
ORDER_STATE_UNKNOWN Tình trạng không xác định (với các trạng thái khác) 3

ORDER_STATE_UNKNOWNBạn có thể gọiexchange.GetRawJSON()Để có được thông tin về trạng thái đơn đặt hàng ban đầu, hãy truy vấn tài liệu của sàn giao dịch để xem mô tả cụ thể. Các tên biến thể trong bảng có thể được sử dụng trực tiếp trong mã chính sách vàOrdercấu trúcStatusSo sánh thuộc tính, xác định trạng thái của đơn đặt hàng để xác định xem có tương đương hay không.Tên của biến thểtương ứngGiá trị, các đồng nghĩa danh định kỳ khác sau đây không còn được mô tả.

Loại giao dịch

Ordertrong cấu trúcTypeCác thuộc tính.

Tên của biến thể Định nghĩa Giá trị
ORDER_TYPE_BUY Thanh toán 0
ORDER_TYPE_SELL Đặt hàng 1
Loại vị trí

Positiontrong cấu trúcTypeCác thuộc tính.

Tên của biến thể Định nghĩa Giải thích Ứng dụng Giá trị
PD_LONG Định vị nhiều đầu Tiền kỹ thuật số tương laiexchange.SetDirection("closebuy")Đặt định hướng đặt hàng, đặt hàng loại này Tiền tương lai tiền kỹ thuật số 0
PD_SHORT Định vị đầu trống Tiền kỹ thuật số tương laiexchange.SetDirection("closesell")Đặt định hướng đặt hàng, đặt hàng loại này Tiền tương lai tiền kỹ thuật số 1
Tiền tương lai mở giao dịch

Ordertrong cấu trúcOffsetCác thuộc tính.

Tên của biến thể Định nghĩa Giá trị
ORDER_OFFSET_OPEN Đơn đặt hàng mở 0
ORDER_OFFSET_CLOSE Đơn đặt hàng 1
Các tham số chiến lược

Các tham số chiến lược được đặt trên giao diện chiến lược trong mã chiến lược, được thể hiện dưới dạng các biến toàn cầu.JavaScriptTrong ngôn ngữ này, bạn có thể truy cập trực tiếp vào các giá trị hoặc thay đổi các tham số được đặt trên giao diện chính sách, và bạn có thể sử dụng các tùy chọn khác nhau để thay đổi các tham số trong giao diện chính sách.PythonSử dụng để sửa đổi các biến toàn cầu trong các hàm chính sáchglobalTừ khóa:

Loại tham số:

img

Các biến Mô tả Nhận xét Loại Định giá mặc định Giải thích
số Loại số Nhận xét Định dạng số (number) 1 Các chiến lược C++ là floating point.
chuỗi Dòng chữ Nhận xét Dòng chữ (string) Xin chào FMZ. Các giá trị mặc định không cần phải được ghi dấu ngoặc và được xử lý như một chuỗi.
combox Hộp kéo xuống Nhận xét Hộp kéo xuống ((selected)) 1|2|3 Các biến combox tự nó là một giá trị số, đại diện cho các chỉ mục mục tiêu được chọn bởi các điều khiển kéo xuống, nội dung đầu tiên của các chỉ mục kéo xuống là 1, giá trị chỉ mục của nó là 0, và sau đó là loại bỏ.
bool Chọn chọn Nhận xét Chế độ đúng/sai đúng Nếu chọn, biến boolean là true, nếu không chọn, biến boolean là false.
secretString Dây mã hóa Nhận xét Dòng mã hóa (string) passWord Sử dụng giống như các chuỗi, các chuỗi mã hóa sẽ được gửi bằng mã hóa, không truyền thông văn bản.
  • Các tham số giao diện, được đặt trong khu vực tham số chính sách bên dưới khu vực chỉnh sửa mã của trang chính sách.
  • Các tham số giao diện tồn tại dưới dạng các biến toàn cầu trong mã chính sách, nghĩa là các tham số giao diện có thể được sửa đổi trong mã.
  • Các tham số giao diện trong mã chính sách tên biến: đó là hình trênnumberstringcomboxboolsecretString
  • Mô tả tùy chọn: Các tham số giao diện tên trong giao diện chính sách.
  • Tùy chọn chú thích: Mô tả chi tiết về các tham số giao diện, mô tả sẽ hiển thị tương ứng khi chuột dừng lại trên các tham số giao diện.
  • Tùy chọn kiểu: kiểu của tham số giao diện này.
  • Tùy chọn giá trị mặc định: giá trị mặc định của tham số giao diện này.

Các tham số phụ thuộc vào cài đặt: Bạn có thể thiết lập một tham số để một tham số khác dựa trên lựa chọn của tham số đó để thực hiện hiển thị và ẩn. Ví dụ như chúng ta thiết lập tham sốnumberA, là một kiểu số.numberAMột trong những điều quan trọng là:isShowANhững quyết định sai lầm của BoolenumberAHiển thị và ẩn.numberACác biến được đặt trên các thông số giao diện là:numberA@isShowA

img

Không chọnisShowACác tham số,numberACác tham số sẽ được ẩn. Đối với các tham số loại điều khiển khung kéo, các tham số phụ thuộc một phần để quyết định xem các tùy chọn của khung kéo có tương đương hay không.Giá trị chỉ mục❖ Cũng giống nhưisShowAVí dụ, một tham số được viết như sau:numberA@combox==2numberACác tham số dựa trêncomboxLiệu các tham số có được chọn để hiển thị hoặc ẩn cho tùy chọn thứ ba ((index 0 tương ứng với tùy chọn thứ nhất, index 1 tương ứng với tùy chọn thứ hai, index 2 tương ứng với tùy chọn thứ ba) ).

Các tham số giao diện chính sách, điều khiển tương tác, các chức năng phân loại tham số trên mẫu: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +(?第一组)Có thể, ví dụ như hình dưới đây.

img

Khi sử dụng chiến lược, các tham số được hiển thị trong nhóm:

img

Chữ mặc định được lưu: Các tham số chính sách được hiển thị dưới đây, nếu bạn muốn lưu mặc định của các tham số chính sách khi kiểm tra lại, bạn có thể bấm sau khi sửa đổi các tham số chính sách.保存回测设置Chọn nút.

img

img

Các tham số chính sách đã được thiết lập có thể được lưu trong chính sách dưới dạng mã:

/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/

Cấu trúc dữ liệu

Một số hàm sẽ kèm theo nguyên tố được yêu cầu khi gọiJSONDữ liệu, nguyên bảnJSONCác dữ liệu được lưu trữ trở lại đối tượngInfoTrong thuộc tính. Vì không truy cập vào giao diện của một sàn giao dịch, không có dữ liệu nào được trả về khi kiểm tra lại.InfoCác thuộc tính, sau đây là mô tả các thuộc tính chính của các cấu trúc dữ liệu.

Thương mại

Nhận tất cả lịch sử giao dịch (không phải của bạn)exchange.GetTrades()Chức năng trả về.

{
    Id      : 9585306,          // 交易记录ID,如果交易所接口没有提供订单ID则使用时间戳填充
    Time    : 1567736576000,    // 时间(Unix timestamp 毫秒)
    Price   : 1000,             // 价格
    Amount  : 1,                // 数量
    Type    : 0                 // 订单类型,参考常量里的订单类型,0即为ORDER_TYPE_BUY,ORDER_TYPE_BUY的值为0
}
Chú cỏ

Thị trườngexchange.GetTicker()Chức năng trả về.

{
    Info    : {...},             // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    High    : 1000,              // 最高价,如果交易所接口没有提供24小时最高价则使用卖一价格填充
    Low     : 500,               // 最低价,如果交易所接口没有提供24小时最低价则使用买一价格填充
    Sell    : 900,               // 卖一价
    Buy     : 899,               // 买一价
    Last    : 900,               // 最后成交价
    Volume  : 10000000,          // 最近成交量,原则上现货成交量单位为交易币种(baseCurrency),期货成交量单位为合约张数。如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
    Time    : 1567736576000      // 毫秒级别时间戳
}
Ghi lại

Tiêu chuẩnOHLCCác cấu trúc, sử dụng để vẽ đường K và tính toán các chỉ số phân tích.exchange.GetRecords()Các hàm trả về một mảng của cấu trúc này.RecordCấu trúc đại diện cho một cột đường K, một đường K.BARRecordMột trong số đóTimeThời gian bắt đầu của chu kỳ cột K.

{
    Time    : 1567736576000,     // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
    Open    : 1000,              // 开盘价
    High    : 1500,              // 最高价
    Low     : 900,               // 最低价
    Close   : 1200,              // 收盘价
    Volume  : 1000000            // 交易量,原则上现货成交量单位为交易币(baseCurrency),期货成交量单位为合约张数,如果交易所接口没有提供此类数据则使用交易所接口现有的数据填充,例如可能为计价币(quoteCurrency)为单位的成交量
}
Trật tự

Cấu trúc đơn đặt hàng có thể được tạo ra bởiexchange.GetOrder()exchange.GetOrders()Chức năng trả về.exchange.GetOrders()Trả về là một mảng của cấu trúc này hoặc một mảng trống ((nếu không cóĐơn đặt hàng chưa hoàn thànhTrở lại[], nghĩa là một tập hợp không) ‖

{
    Info        : {...},         // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Id          : 123456,        // 交易单唯一标识
    Price       : 1000,          // 下单价格,注意市价单的该属性可能为0或者-1
    Amount      : 10,            // 下单数量,注意市价单的该属性可能为金额并非币数
    DealAmount  : 10,            // 成交数量,如果交易所接口不提供该数据则可能使用0填充
    AvgPrice    : 1000,          // 成交均价,注意有些交易所不提供该数据。不提供、也无法计算得出的情况该属性设置为0
    Status      : 1,             // 订单状态,参考常量里的订单状态,例如:ORDER_STATE_CLOSED
    Type        : 0,             // 订单类型,参考常量里的订单类型,例如:ORDER_TYPE_BUY
    Offset      : 0              // 数字货币期货的订单数据中订单的开平仓方向。ORDER_OFFSET_OPEN为开仓方向,ORDER_OFFSET_CLOSE为平仓方向
    ContractType : ""            // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
MarketOrder

Chỉ thị sâu, tức làexchange.GetDepth()Chức năng trả về cấu trúc dữ liệuĐề nghịHỏiCấu trúc dữ liệu của các phần tử trong matrix.

{
    Price   : 1000,              // 价格
    Amount  : 1                  // 数量
}
Độ sâu

Thâm sâu thị trường, bởiexchange.GetDepth()Chức năng trả về.

{
    Asks    : [...],             // 卖单数组,MarketOrder数组,按价格从低向高排序
    Bids    : [...],             // 买单数组,MarketOrder数组,按价格从高向低排序
    Time    : 1567736576000      // 毫秒级别时间戳
}
Tài khoản

Thông tin tài khoản, doexchange.GetAccount()Chức năng trả về. Dữ liệu trong cấu trúc được trả về liên quan đến cặp giao dịch hiện tại, mã hợp đồng được đặt.

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    Balance         : 1000,      // 可用计价币数量,现货中如果交易对是BTC_USDT,Balance指的是当前可用USDT数量。U本位期货合约中Balance指的是可用保证金USDT的数量
    FrozenBalance   : 0,         // Balance表示的资产用于挂单的冻结数量
    Stocks          : 1,         // 可用交易币数量,现货中如果交易对是BTC_USDT,Stocks指的是当前可用BTC数量。币本位期货合约中Stocks指的是可用保证金的币(baseCurrency)的数量
    FrozenStocks    : 0          // Stocks表示的资产用于挂单的冻结数量
}
Vị trí

Thông tin vị trí được nắm giữ trong giao dịch tương lai, được cung cấp bởiexchange.GetPosition()Chức năng quay lại đây.Positioncấu trúcĐội số

{
    Info            : {...},     // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
    MarginLevel     : 10,        // 持仓杆杠大小,如果交易所接口没有提供该数据则通过计算填充,可能会有误差
    Amount          : 100,       // 持仓量,持仓合约张数,通常是正整数。注意每个交易所的合约乘数、价值等合约规格可能不一样,下单规则也可能不一样,例如币安合约可以0.1张下单
    FrozenAmount    : 0,         // 仓位冻结量,用于平仓挂单时的临时冻结仓位数量
    Price           : 10000,     // 持仓均价,原则上该属性为仓位总体的平均价格(不参与结算),如果交易所接口没有提供该数据则用交易所接口现有的持仓均价填充(参与结算)
    Profit          : 0,         // 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口没有提供该数据则用交易所接口其它盈亏数据填充,盈亏数值的单位和当前合约保证金的单位相同
    Type            : 0,         // PD_LONG为多头仓位,PD_SHORT为空头仓位
    ContractType    : "quarter", // 合约代码,具体可以参看SetContractType函数描述中传入的参数
    Margin          : 1          // 仓位占用的保证金,如果交易所接口没有提供该数据则使用0填充
}

Một số người cho rằng tiền điện tử là một loại tiền tệ có giá trị cao.exchange.GetPosition()Các hàm trả vềPositionStructured array.FrozenAmountProfitMarginTính chất, vì dữ liệu được cung cấp bởi sàn giao dịch không thống nhất, các đối tượng khác nhau được gọiexchange.GetPosition()Các định nghĩa về dữ liệu được trả về khi giao diện có thể khác nhau. Ví dụ, một số sàn giao dịch giữ dữ liệu không có vị trí đóng băng dữ liệu, khiFrozenAmountNếu cần tính toán một số dữ liệu có thể được sử dụngInfoPhân tích tính toán dữ liệu nguyên bản trong thuộc tính.

Thị trường

Thông tin thị trường về các loại giao dịch, được cung cấp bởiexchange.GetMarkets()Chức năng trả về chứaMarketcấu trúcTừ điển

{
    Symbol          : "btcusdt",       // 该交易品种在交易所的原始名称
    BaseAsset       : "BTC",           // baseCurrency 交易币,统一大写
    QuoteAsset      : "USDT",          // quoteCurrency 计价币,统一大写
    TickSize        : 0.01,            // 价格最小变动数值
    AmountSize      : 0.01,            // 下单量最小变动数值
    PricePrecision  : 2,               // 价格精度,表示价格精确到2位小数
    AmountPrecision : 3,               // 下单量精度,表示下单量精确到3位小数
    MinQty          : 0.001,           // 最小下单量
    MaxQty          : 1000,            // 最大下单量
    MinNotional     : 5,               // 最小下单金额
    MaxNotional     : 9999999,         // 最大下单金额
    CtVal           : 100,             // 合约价值
    Info            : {...}            // 交易所该品种的原始数据
}

Vì các sàn giao dịch hỗ trợ dữ liệu thông tin thị trường khác nhau, các trường không được hỗ trợ của sàn giao dịch sẽ bị bỏ qua. Các trường trên đều lấy dữ liệu từ dữ liệu nguyên liệu của giao diện sàn giao dịch và có thể truy vấn cụ thể.InfoNội dung của trường.

Chức năng toàn cầu

Phiên bản

Version(), Trả về số phiên bản hiện tại của hệ thống. Trả về giá trị: kiểu chuỗi.

Giấc ngủ ((Millisecond)

Sleep(Millisecond), chức năng nghỉ ngơi, tạm dừng chương trình một thời gian.MillisecondĐối với kiểu giá trị số. Các tham số là số millisecond, ví dụ:Sleep(1000)Một giây ngủ yên. Hỗ trợ các hoạt động có thời gian ngủ dưới 1 millisecond, chẳng hạn như đặtSleep(0.1)│ hỗ trợ tham số tối thiểu là0.000001, Ngủ ở mức nanosecond. 1 nanosecond =1e-6Các bạn có thể xem hình ảnh này.

Lưu ý: Được sử dụngPythonKhi viết chính sách ngôn ngữ, các thao tác về khoảng thời gian hỏi, thời gian chờ nên được sử dụngSleep(Millisecond)Chức năng. Không nên sử dụngPythoncủatimeNhà hàngtime.sleep(second)Chức năng. Vì nó được sử dụng trong chính sáchtime.sleep(second)Chức năng này cho phép các chương trình chính sách thực sự chờ đợi một số giây khi kiểm tra lại.secondCác tham số là số giây được đặt tạm dừng), dẫn đến quá trình lặp lại chính sách rất chậm.

IsVirtual ((()

IsVirtual(), quyết định liệu chính sách hiện tại có chạy cho thử nghiệm ngược tương tự không. Trả về giá trị: kiểu Boolean. Trả về trạng thái thử nghiệm tương tựtrueTrả vềfalse

Bưu điện...

Mail(smtpServer, smtpUsername, smtpPassword, mailTo, title, body), Giao thức gửi thư. Các giá trị tham số: tất cả các tham số là loại chuỗi. Các giá trị trả về: loại Bul, gửi thành công trả vềtruesmtpServerĐể gửi thưsmtpDịch vụ,smtpUsernameMột số người cho rằng họ đã bị bắt.smtpPasswordMã thông báo SMTP cho hộp thư (không phải mã đăng nhập hộp thư)mailToTrong khi đó, một số người khác cũng nhận được tin nhắn từ Facebook.titleCác tin nhắn được gửi theo tiêu đề của email.bodyCác nội dung email được gửi, ví dụ:

function main(){
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")

Thêm nữa

qq89520Có một vấn đề là hàm C sẽ luôn thử lại hay chỉ thử lại một lần

Ồ, ôi._C ((function, args...) là mặc định là 3s? Có thể thay đổi mặc định để đặt trực tiếp _CDelay ((1000) trước _C ((function, args...)?

ăn trưaCluster: Nếu bạn tạo ra 1000 robot đồng thời và không có áp lực, bạn có thể tạo ra nhiều người quản lý để phân tán nhiệm vụ Có ví dụ mã để xây dựng các tập hợp? Làm thế nào để xây dựng nhiều quản trị viên để phân tán nhiệm vụ

Wangjy1Log ((talib.help (('MACD')); chỉ được sử dụng trong js, Python không có tài sản talib.help...

cjz140Tôi nghĩ rằng tất cả những thứ này đều có nghĩa là chờ đợi để thử lại

3263243yLàm thế nào để xóa ErrorFilter sau khi SetErrorFilter? Không lọc thông báo lỗi.

qq47898077Có cách nào để sử dụng thư viện của bên thứ ba không?

qq47898077Nếu bạn muốn kế thừa các đối tượng giao dịch định nghĩa lớp mới, lớp cha nên điền vào gì?

ethanwuCó công cụ chỉnh sửa bản địa không?

PenglihengBạn có biết exange.IO (("status")?) không?

PenglihengTại sao hàm sell màu xám, có phải hàm đại diện không còn sử dụng được không?by có sẵn, vậy làm thế nào để bán?

PenglihengTại sao hàm sell màu xám, có phải hàm đại diện không còn sử dụng được không?by có sẵn, vậy làm thế nào để bán?

PenglihengTôi không biết tiếng Anh, haha, tôi muốn hỏi về sự hỗ trợ của es6.

PenglihengTôi không biết tiếng Anh, haha, tôi muốn hỏi về sự hỗ trợ của es6.

Don.Vậy, chúng ta viết đường trung bình của Volume như thế nào?

con rùaNếu không thành công, bạn sẽ được trả gì nếu mua trên exchange.Buy.1000 theo giá thị trường?

Ông NinhPhong cách mới này rất đẹp.

cá mậpMạng lưới thử nghiệm của Bitmex ((testnet.bitmex.com) cũng có giao diện API, nhưng hiện tại sàn giao dịch chỉ có thể chọn trạm chủ của Bitmex, địa chỉ tài liệu API là https://testnet.bitmex.com/app/apiOverview Làm thế nào để hỗ trợ?

cxjijinvar ret1 = exchanges[0].IO (("api", "future_estimated_price", "symbol=btc_usd"); Log (('ok tương lai dự kiến giao dịch giá', ret1); https://dn-filebox.qbox.me/d1ed268c1e75753c5d289447d279aa9d81e41b5f.png Tại sao lại gọi giao diện giao dịch khác và viết thông báo sai?

allenfrostlineBạn có muốn biết sự khác biệt giữa realTicker và Ticker không? gần đây đã viết lại các chiến lược của bộ sưu tập và xuất hiện cùng một lúc nhưng không có sự đề cập nào trong API trước đây.

hình ảnhXin chào, với tư cách là một nhà phát triển Python, bạn nghĩ tài liệu API của bạn viết gì?

allenfrostlineGetAccount: [EAPI: Rate limit exceeded] Bạn muốn hỏi làm thế nào để giải quyết vấn đề này?

zhjx2314Không hỗ trợ StochRSI, có thể thêm sớm không?

yhfggTrong khi đó, bạn có thể sử dụng các ứng dụng khác nhau để tạo ra các ứng dụng khác nhau.

yhfggPhiên bản nào của python?

ừmĐịnh nghĩa của GetFee được cho là trả về một cấu trúc Fee.

zkwapCó cách nào để gọi talib bằng js không?

yhfggTìm tài liệu python

wmjbs123Có thể làm cho nền mã của các biên tập viên chiến lược có màu đen không?

Don.Làm thế nào để thiết lập bản tóm tắt trong WeChat của robot?

Số: điênBạn có thể thêm một trường giao dịch bằng giá trong cấu trúc Order không?

Nhỏ béGetOrders: lấy tất cả các đơn đặt hàng chưa hoàn thành, trả về một cấu trúc Array Order, giao dịch Bitcoin ETH ở Trung Quốc, chỉ trả về 10 mục gần đây nhất.

yhfggCác chức năng toán học cần được sử dụng trong xác suất thống kê ở đâu?

jiebangGiá trị trả về của hàm $.Cross ((x, y) có nghĩa là gì?

Mẹ tôi gọiLogReset sẽ xóa tất cả các nhật ký và có thể có một số tham số để xác định số lượng lưu trữ. Làm thế nào để loại bỏ một vài nhật ký mới nhất?

edwardgywCó phải talib đã bị bỏ qua hoặc không được chuyển nhượng?

Quảng trường Phúc GiangCó vẻ như không có chức năng tham khảo chỉ số!

NhỏTôi không hiểu, quá dài một, giải quyết được, cảm ơn bạn

NhỏCách viết số trong mảng là như thế nào, tôi sử dụng records.remove ((records[0])

SnakeayuTuy nhiên, một số ứng dụng khác cũng được sử dụng, trong đó có ứng dụng ATR.

SnakeayuTuy nhiên, một số ứng dụng khác cũng được sử dụng, trong đó có ứng dụng ATR.

57278863Hãy học cách lấy giá và đặt mua các hợp đồng tương lai truyền thống, xin lỗi, nền tảng rất mỏng.

KirinMột số người cho rằng, "Điều này là một sự thay đổi lớn trong kinh tế".

Nhỏzero, bạn có thể viết một ví dụ về giao dịch tương lai truyền thống không?

NhỏKhi giữ nhiều đơn vị trống cùng một lúc, làm thế nào để in trạng thái giữ, cách in của tôi là [object object], làm thế nào để có được trạng thái giữ nhiều đơn vị và đơn vị trống, và cũng có GetTicker ((), làm thế nào để có được giá trong tuần, tuần sau và quý trong tuần đó, trong vòng eo trong tuần đó, tuần sau và quý tôi đã viết.

cxjijinCác sàn giao dịch tương lai có thể lấy thị trường bằng GetTicker (); trả về thị trường hợp đồng kiểu đó (; tuần trước, tuần sau...)?

Bán lớnBạn có thể nói thêm về StochRSI không?

momoxCancelOrder ((orderId) hủy một đơn đặt hàng dựa trên số đơn đặt hàng, trả về true hoặc false, hãy hỏi true= đơn hàng đã được hủy thành công, phải không?

momox_G(K, V) có thể lưu bảng từ điển toàn cầu Cách lưu biến toàn cầu có thể được sử dụng để chia sẻ dữ liệu giữa các chính sách khác nhau không?

flufy3dSự nổi tiếng

KhôngBạn có thể đặt lại nhật ký thu nhập bằng cách sử dụng LogProfitReset.

xcyCó thể sao chép trực tiếp EA để sử dụng nó không?

sjironmanTôi cảm thấy nền tảng này thật tuyệt vời.

NhỏĐây là ngôn ngữ nào, có tài liệu nào để học không?

jxhbtcData error 1 tuần không kết nối robot

dhyhuChỉ số TA, chỉ tính giá đóng cửa?

btcrobotChào thế giới.

Giấc mơ nhỏChức năng _C sẽ thử lại một lần nữa cho đến khi có kết quả thành công.

Giấc mơ nhỏTalib của python cần cài đặt.https://www.botvs.com/bbs-topic/669 bạn có thể xem bài viết này.

Giấc mơ nhỏSleep là trình không làm gì, chờ đợi các tham số được thiết lập trong số milliseconds, và _C là hàm gọi lại một lần tham số.

Giấc mơ nhỏKhông cần thừa kế, JS trực tiếp được gói trong đối tượng {name: "new object", old_exchange : exchange[0],...... }

Giấc mơ nhỏCó bản địa biên tập viên đồng bộ từ xa plugin, cơ bản là biên tập bản địa điều chỉnh từ xa.

Giấc mơ nhỏBạn có thể tham gia nhóm QQ,^^ dễ dàng thảo luận~

Giấc mơ nhỏTrong tài liệu API, màu xám có nghĩa là hàm này không có giải thích mở rộng quá nhiều, chỉ hiển thị màu xám, đại diện màu xanh có nhiều giải thích hơn, đó là tất cả.

Giấc mơ nhỏES6 không hỗ trợ, ^^

Giấc mơ nhỏBạn có thể đến nhóm QQ, tôi, mô tả vấn đề, tôi sẽ trả lời ^^

Giấc mơ nhỏSau khi trả lại một lỗi, bạn sẽ không đặt hàng (thực sự là mua, không đủ tiền!).

con rùaVí dụ, OKCoin, nếu số tiền mua nhiều hơn số tiền được nắm giữ, nó sẽ trở lại như thế nào?

Giấc mơ nhỏTrong khi đó, một số nhà đầu tư khác cũng cho biết họ sẽ trả lại một số đơn đặt hàng cho các sàn giao dịch này.

KhôngĐã hỗ trợ chuyển đổi giao dịch khi chạy, cần tải xuống trình quản lý mới nhất. Hỗ trợ Bter/Poloniex chi tiết tài liệu API mô tả các chức năng giao dịch bên dưới ((trước khi xóa cache trình duyệt, hãy cập nhật nếu không thấy)

Giấc mơ nhỏTôi sẽ giúp bạn tìm ra câu hỏi.

Gia đình nuôi con nghề nghiệpBạn cần thiết lập danh sách trắng, tôi đặt IP của máy chủ?

Giấc mơ nhỏĐây là liên kết dưới cùng không được thiết lập Máy chủ không phản hồi. Có đặt địa chỉ IP khi yêu cầu API KEY?

Gia đình nuôi con nghề nghiệpPost http://api.btc38.com/v1/getMyBalance.php: read tcp 192.168.0.227:58596->211.149.148.144:80: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 2017-05-23 21:08:24 Thời đại Bitcoin lỗi GetAccount: timeout 2017-05-23 21:08:02 Thời đại Bitcoin lỗi GetAccount: timeout 2017-05-23 21:07:40 Thời đại BitTorrent 2017-05-23 21:07:20 Hoạt động bắt đầu lại Có phải đó là vấn đề danh sách trắng IP???

Giấc mơ nhỏCác máy chủ của sàn giao dịch không phản hồi, giao thức TCP không được thiết lập sau ba lần bắt tay.

Gia đình nuôi con nghề nghiệpA connection attempt failed because the connected party did not properly respond after a period of time (Một nỗ lực kết nối đã thất bại vì bên kết nối đã không phản hồi đúng cách sau một khoảng thời gian)

Giấc mơ nhỏXin chào! Đây là hàm exchange.IO ((api, ApiName, Args) không được hỗ trợ, xem https://www.botvs.com/bbs-topic/812

Gia đình nuôi con nghề nghiệpMột nỗ lực kết nối đã thất bại bởi vì bên kết nối đã không phản hồi đúng cách sau một khoảng thời gian,

Gia đình nuôi con nghề nghiệpThời đại Bitcoin không hỗ trợ

Giấc mơ nhỏhttps://dn-filebox.qbox.me/a709b30c6cc0a3565234b9e0c99b073f7ba8b454.png Có lẽ là được rồi.

Ông NinhVí dụ, tôi muốn giao dịch toàn đồng tiền của poloniex, nhưng chỉ có một vài đồng tiền được hỗ trợ bởi BOTvs, và exchange.IO dường như không hỗ trợ mạng P.

Giấc mơ nhỏBạn có thể gọi exchange.IO.

Ông NinhVậy API cần xác minh tài khoản là gì?

Giấc mơ nhỏNếu API không yêu cầu xác minh tài khoản có thể được sử dụng bằng httpQuery (xem tài liệu BotVS chi tiết hơn), API giao dịch thực tế cần truy cập.

Giấc mơ nhỏCác tham số API có thể được truyền qua HttpQuery: https://www.okcoin.com/api/v1/future_estimated_price.do?symbol=btc_usd. Bài viết: https://www.botvs.com/bbs-topic/850

hình ảnhXin cảm ơn, mong đợi một tài liệu API hoàn hảo.

Giấc mơ nhỏBạn có thể hỏi tôi xem API của realTicker được thấy ở đâu không?

Giấc mơ nhỏhttps://dn-filebox.qbox.me/fe1a6f5563ed43a5357f858ecf8a50239619228e.png Tài liệu API là ngôn ngữ JavaScript. Mô tả, phiên bản python mô tả các bài đăng được đặt ở đầu trang trang của cộng đồng chat chat. Nếu bạn có câu hỏi cụ thể, vui lòng gửi ý kiến.

KhôngXin chào, cảm ơn đã đề xuất, tài liệu API đang được xây dựng lại.

Giấc mơ nhỏXin chào - hiển thị rằng truy cập đã vượt quá giới hạn. https://dn-filebox.qbox.me/a09498920d04cac62624b7438a058d2098d8fb00.png Có sử dụng chức năng Sleep ((1000) trong chính sách không?, 1000 là cho chương trình tạm dừng một giây mỗi vòng, có thể tự đặt, mục đích là để kiểm soát chương trình truy cập API tần suất, vì một số sàn giao dịch đã đặt giới hạn truy cập tối đa, một thời gian nhất định vượt quá một số lần truy cập nhất định sẽ từ chối truy cập, khóa địa chỉ IP.

Giấc mơ nhỏhttps://dn-filebox.qbox.me/c29ab7fc279e1b758355f137907cf52dc8257df6.png Cá nhân tôi đã viết rằng chỉ số STOCHRSI đã được so sánh với OK, đồng ý rằng tốc độ hơi chậm và cần được tối ưu hóa, tạm thời có thể sử dụng.

KhôngBạn có thể tự chọn xem botvs cung cấp máy chủ hay chủ nhà của bạn, phiên bản là 2.7.5

Giấc mơ nhỏCác bạn có thể tham gia vào chương trình này.

Giấc mơ nhỏBây giờ bạn có thể tự cấu hình phong cách nền của mình.

Giấc mơ nhỏCác tài liệu python đang được viết.

Giấc mơ nhỏCó thể sử dụng tài khoản talib hỗ trợ.

hzzgood48 https://www.botvs.com/bbs-topic/276

Giấc mơ nhỏCó một ví dụ ở quảng trường chiến lược: https://www.botvs.com/strategy/15098

KhôngTruy cập vào tính chất AvgPrice của Order, các sàn giao dịch hỗ trợ được, các sàn giao dịch không hỗ trợ sẽ luôn luôn là 0 tính năng này

yhfggLàm thế nào để trích dẫn các tài liệu của bên thứ ba?

KhôngMathjs không thể đáp ứng yêu cầu của mình, nó chỉ có thể tìm kiếm các chính sách sao chép nhập thư viện của bên thứ ba. Để có thể biên dịch nhanh hơn, hệ thống chỉ tích hợp một số ít thư viện.

Giấc mơ nhỏCó một số người nói rằng họ có thể tìm thấy một người bạn trên mạng mà không phải là một người bạn của họ.

jiebangCảm ơn.

Giấc mơ nhỏBạn có thể xem phần giải thích của thư mục phân tích thư viện giao dịch tiền kỹ thuật số, trong đó có phần giải thích về hàm $.Cross.

KhôngKhông thể xóa mới nhất, chỉ giữ lại một vài bài mới nhất... xóa tất cả bài cũ trước đó.

KirinĐể lấy mỗi vị trí với vị trí [i], vị trí là một mảng

Ông Ninhexchange.GetRecords ((PERIOD_D1));

KirinTôi đã từng dùng một giao dịch tương lai truyền thống để báo cáo với GetAccount: not login, password không sai, không đăng nhập.

KhôngTheo mặc định, SetContractType được yêu cầu trước để có được mục SetContractType.

KhôngBạn có thể thấy, đây là giá trị trả về hành động hủy lệnh mà sàn giao dịch trả về, nhưng thực sự hủy không hủy, tùy thuộc vào cách xử lý bên trong sàn giao dịch.

momox3q

KhôngChưa bao giờ, nó bị tách biệt.

xuanxuanTất nhiên là không, đó là MT4 riêng.

KhôngJavascript là một tài liệu phổ biến trên mạng.

Bán lớnVấn đề của bạn đã được giải quyết chưa?

KhôngPhần lớn là, dữ liệu được truyền vào có thể là một bản ghi trực tiếp hoặc một mảng giá thuần túy.