[TOC]
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:
JavaScript
Các nội dung đầy đủ như hướng dẫn, sử dụng nền tảng và viết chiến lược. Nếu bạn có nền tảng lập trình và giao dịch, bạn có thể bắt đầu viết một chiến lược đơn giản trong khoảng hai ngày, nếu bạn không có nền tảng lập trình, bạn chỉ cần một hoặc hai tuần để học kiến thức lập trình cơ bản.bilibili
Có một video hướng dẫn:Những người phát minh ra nền tảng giao dịch định lượng - khái niệm người quản lý
Những người phát minh ra nền tảng giao dịch định lượng - Website Overview
Các nhà phát minh định lượng nền tảng giao dịch - Trình bày về việc triển khai người quản lý
Những người phát minh ra một nền tảng giao dịch định lượng - tạo ra một thực tế
Các nhà phát minh định lượng sàn giao dịch - Đăng ký chiến lược, giải thích mã sao chép
Các nhà phát minh định lượng nền tảng giao dịch - chính sách đầy đủ, cấu hình tham số nhập khẩu xuất khẩu
Các nhà phát minh định lượng nền tảng giao dịch - công cụ chỉnh sửa và tính năng chỉnh sửa từ xaNế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ụngJavaScript
、TypeScript
、Python
、C++
、PINE
、麦语言
、Blockly可视化
Những người tham gia vào cuộc họp này đã được mời đến tham dự.
Hỗ trợTypeScript
Trong khi đó, các ngôn ngữ được thiết lập để tạo ra chiến lược.JavaScript
Và sau đó viết vào đầu mã chính sách.// @ts-check
Hoặ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à:TypeScript
Bạ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:
TypeScript
Tí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ã.TypeScript
Hệ 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.TypeScript
Bạ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.TypeScript
Cung 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.
Blockly
Hình ảnh hướng dẫn:
Thiết lập
Python
Các chương trình chiến lược được sử dụngPython
Người giải thích
Sử dụngPython
Cá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ờiPython2vàPython3, 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ênPython
Các phiên bản khác.#!python3
,#!python2
Bạ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.Linux,Cửa sổ,Mac OS,Android,ARM 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/storage
Trong đó, tài liệudb3
củaSqlite
Bạn có thể sử dụng nó trong các tài liệu cơ sở dữ liệu.Sqlite
Cá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.db3
Cá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ộ
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.Python
Cá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.
Python
Những người dùng có thể sử dụng các ứng dụng khác nhau.
Bởi vìPython
Là 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ý.
Python
Các chiến lược mã hóa:
Theo mặc định,Python
Chiế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.Python
Chí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êPython
Có phải mã hóa mã chính sách khi chạy không. Hỗ trợ mã hóa mã chính sáchPython
Bài viết được viết bởi:Python 2.7
Các phiên bản khácPython 3.5
Các phiên bản khácPython 3.6
Phiê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ý:#!python
Sử 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óaencrypt
Nếu không được chỉ định.Python
Phiê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ếtPython
Cá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óaPython
Có 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")
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 KEY
Mộ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#8
Có 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 Key
Trong 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 Key
Trong 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.txt
Trong 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.txt
Nếu tài liệu này nằm trong trình quản lý, thì trình quản lý cấp saursa_key
Trong đó, hãy viết:file:///rsa_key//rsaKey.txt
❖ Nếu được đặtrsaKey.txt
Tà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 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ựcvàKiể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ựctick
Dữ 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:
JavaScriptvàC++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.tick
Mộ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。
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_USD Hã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_BTC Vâ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_BTC Vâ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_BTC Vâ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_USD Và như vậy, giao dịch với đồng tiền định giá làUSD , Đặt mã hợp đồng cụ thể ((xemexchange.SetContractType Các mã hợp đồng được hỗ trợ là:this_week 、next_week 、quarter 、swap 。 |
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_USD Và như vậy, giao dịch với đồng tiền định giá làUSD , Đặt mã hợp đồng cụ thể ((xemexchange.SetContractType Các mã hợp đồng được hỗ trợ là:this_week 、next_week 、quarter 、swap 。 |
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.SetContractType Cá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_USDT Và như vậy, giao dịch với đồng tiền định giá làUSDT , Đặt mã hợp đồng cụ thể ((xemexchange.SetContractType Sau đó, hợp đồng làUSDT Cá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.SetContractType Sau đó, 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.
Đá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.tick
Dữ liệu, như là thời gian thựctick
Dữ 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ự。
Kiểm tra lại ở mức độ thực là thực.tick
Dữ liệu cấp độ trong chuỗi thời gian của Bar.tick
Chiế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.tick
Là 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ọiGetDepth
、GetTrades
Chức năng lấy dữ liệu giao dịch trả về.GetTicker
,GetTrades
,GetDepth
,GetRecords
, 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:
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:
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:
Chế độ điều chỉnh tham số:
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?
vớiJavaScript
Ví dụ, hãy nhấp vào "Save Retrospect Settings to Source File":
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"}]
*)
Hệ thống sử dụngGET
Phươ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. |
Vũ | 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/data
Cá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ệmJavaScript
Ví 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:
FMZ là nền tảng giao dịch định lượng mở nguồnJavaScript
Ngô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 để 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áchCtrl
Sau 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 + s
Chìa khóa, chính sách lưu.
Khóa tắt để bắt đầu kiểm tra lại
Sử dụngCtrl + b
Bấm, bắt đầu kiểm tra lại.
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ố.Python Ngô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ố. |
onerror()
Chức năng.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()
, 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()
, 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()
Một số người cho rằng, "Điều đó là một sự cố".onerror()
Chạy hàm không hỗ trợPython
、C++
Các chiến lược ngôn ngữ.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("错误")
}
# python不支持
// C++不支持
TrongJavaScript
、Python
、C++
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ẫ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.
JavaScript
Các mẫu ngôn ngữ:
Python
Các mẫu ngôn ngữ:
C++
Các mẫu ngôn ngữ:
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:
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());
}
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.
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());
}
Nó có thể được hiểu như là lưu trữexchange
Mộ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());
}
}
Order
trong cấu trúcStatus
Cá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àOrder
cấu trúcStatus
So 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ả.
Order
trong cấu trúcType
Cá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 |
Position
trong cấu trúcType
Cá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 |
Order
trong cấu trúcOffset
Cá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 đặ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.JavaScript
Trong 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.Python
Sử dụng để sửa đổi các biến toàn cầu trong các hàm chính sáchglobal
Từ khóa:
Loại tham số:
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. |
number
、string
、combox
、bool
、secretString
。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ố.numberA
Một trong những điều quan trọng là:isShowA
Những quyết định sai lầm của BoolenumberA
Hiển thị và ẩn.numberA
Các biến được đặt trên các thông số giao diện là:numberA@isShowA
。
Không chọnisShowA
Các tham số,numberA
Cá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ưisShowA
Ví dụ, một tham số được viết như sau:numberA@combox==2
。numberA
Các tham số dựa trêncombox
Liệ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.
Khi sử dụng chiến lược, các tham số được hiển thị trong nhóm:
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.
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]]
*/
Một số hàm sẽ kèm theo nguyên tố được yêu cầu khi gọiJSON
Dữ liệu, nguyên bảnJSON
Các dữ liệu được lưu trữ trở lại đối tượngInfo
Trong 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.Info
Cá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.
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
}
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 // 毫秒级别时间戳
}
Tiêu chuẩnOHLC
Cá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.Record
Cấu trúc đại diện cho một cột đường K, một đường K.BAR
。Record
Một trong số đóTime
Thờ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)为单位的成交量
}
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 : "" // 现货订单中该属性为""即空字符串,期货订单该属性为具体的合约代码
}
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 // 数量
}
Thâm sâu thị trường, bởiexchange.GetDepth()
Chức năng trả về.
{
Asks : [...], // 卖单数组,MarketOrder数组,按价格从低向高排序
Bids : [...], // 买单数组,MarketOrder数组,按价格从高向低排序
Time : 1567736576000 // 毫秒级别时间戳
}
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表示的资产用于挂单的冻结数量
}
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.Position
cấ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ềPosition
Structured array.FrozenAmount
、Profit
、Margin
Tí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, khiFrozenAmount
Nếu cần tính toán một số dữ liệu có thể được sử dụngInfo
Phân tích tính toán dữ liệu nguyên bản trong thuộc tính.
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ứaMarket
cấ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ể.Info
Nội dung của trường.
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.
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-6
Các bạn có thể xem hình ảnh này.
Lưu ý:
Được sử dụngPython
Khi 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ụngPython
củatime
Nhà 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.second
Cá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()
, 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ựtrue
Trả vềfalse
。
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ềtrue
。
smtpServer
Để gửi thưsmtp
Dịch vụ,smtpUsername
Một số người cho rằng họ đã bị bắt.smtpPassword
Mã thông báo SMTP cho hộp thư (không phải mã đăng nhập hộp thư)mailTo
Trong khi đó, một số người khác cũng nhận được tin nhắn từ Facebook.title
Các tin nhắn được gửi theo tiêu đề của email.body
Cá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")
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 ((
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.