Dòng thời gian là một chuỗi dữ liệu thu được trong khoảng thời gian liên tục. Trong đầu tư định lượng, dữ liệu này chủ yếu biểu hiện như là sự di chuyển của giá và các điểm dữ liệu theo dõi các chỉ số đầu tư. Ví dụ, giá cổ phiếu, dữ liệu chuỗi thời gian được ghi lại thường xuyên trong khoảng thời gian nhất định có thể được tham chiếu đến hình dưới đây, người đọc sẽ có được một nhận thức rõ ràng hơn:
Như bạn có thể thấy, ngày nằm trên trục x và giá hiển thị trên trục y. Trong trường hợp này, trục thời gian liên tục liên tục có nghĩa là số ngày trên trục x cách nhau 14 ngày: lưu ý sự khác biệt giữa ngày 7 tháng 3 năm 2005 và điểm tiếp theo, ngày 31 tháng 3 năm 2005, ngày 5 tháng 4 năm 2005 và ngày 19 tháng 4 năm 2005.
Tuy nhiên, khi bạn sử dụng dữ liệu chuỗi thời gian, bạn sẽ thường thấy nhiều hơn là dữ liệu chỉ chứa hai hàng ngày và giá cả. Trong hầu hết các trường hợp, bạn sẽ sử dụng dữ liệu có năm hàng: chu kỳ dữ liệu, giá mở, giá cao nhất, giá thấp nhất và giá đóng. Điều này có nghĩa là nếu bạn đặt chu kỳ dữ liệu của bạn thành mức đường hồng, thì những thay đổi giá cao, mở, thấp và đóng trong ngày sẽ phản ứng trong dữ liệu của chuỗi thời gian này.
Dữ liệu tick là cấu trúc dữ liệu giao dịch đầy đủ nhất trên sàn giao dịch. Nó cũng là một dạng mở rộng của dữ liệu chuỗi thời gian được đề cập ở trên, bao gồm: giá mở, giá cao nhất, giá thấp nhất, giá mới nhất, khối lượng giao dịch, số lượng giao dịch. Nếu so sánh dữ liệu giao dịch với dòng chảy, dữ liệu tick là dữ liệu của dòng chảy này ở một đoạn ngang nào đó.
Như hình trên cho thấy, mỗi hành động của các sàn giao dịch ngoại hối quốc gia sẽ được đẩy vào thị trường trong thời gian thực. Trong khi đó, các sàn giao dịch trong nước, kiểm tra hai lần mỗi giây, nếu có hành động trong khoảng thời gian đó, sẽ tạo ra một bức ảnh chụp nhanh và đẩy ra ngoài.
Tất cả mã và dữ liệu chuỗi thời gian trong hướng dẫn này được lấy trên nền tảng định lượng của nhà phát minh.
Mặc dù dữ liệu Tick trong nước không phải là Tick theo nghĩa thực, nhưng sử dụng dữ liệu này để kiểm tra lại, ít nhất có thể gần vô hạn và khôi phục thực tế. Mỗi Tick cho thấy các thông số chính của mặt hàng trên thị trường vào thời điểm đó, và trong đĩa thực, mã của chúng tôi, theo lý thuyết là Tick 2 lần mỗi giây đang được tính toán.
Không chỉ vậy, trong định lượng của nhà phát minh, ngay cả khi tải dữ liệu chu kỳ 1 giờ, bạn vẫn có thể điều chỉnh độ mực dữ liệu, ví dụ như điều chỉnh độ mực dữ liệu thành 1 phút. Tại thời điểm này, dòng K 1 giờ hiện tại là dữ liệu 1 phút. Dĩ nhiên, độ mực nhỏ hơn, độ chính xác cao hơn.
Bây giờ, bạn đã hiểu được những khái niệm cơ bản cần phải hiểu để hoàn thành bài tập này. Những khái niệm này sẽ sớm trở lại và bạn sẽ tìm hiểu thêm về các khái niệm liên quan trong phần sau của bài tập này.
Bạn bè quan tâm đến nội dung của phần này có thể liên hệ với:https://www.fmz.com/bbs-topic/1651Xem thêm
Về khái niệm quản lý, các độc giả có kinh nghiệm lập trình có thể tưởng tượng nó như một hệ thống Docker được đóng gói chính thức, trong đó đã được đóng gói các giao diện API công khai của các sàn giao dịch chính thống và các chi tiết kỹ thuật cho các chi tiết cuối cùng của chi tiết viết và kiểm tra chiến lược. Mục đích ban đầu của hệ thống này là để các nhà giao dịch định lượng có thể tập trung vào việc viết và thiết kế chiến lược khi sử dụng nền tảng định lượng của nhà phát minh. Những kỹ thuật này được trình bày dưới dạng chi tiết đóng gói cho tác giả chiến lược để tiết kiệm rất nhiều thời gian và nỗ lực của họ.
Các nhà quản lý được triển khai theo hai cách
Phương pháp A: Người dùng thuê hoặc mua máy chủ của chính họ, triển khai trên các nền tảng điện toán đám mây lớn như AWS, Ali Cloud, Digital Ocean và Google Cloud. Ưu điểm là cả an ninh chiến lược và an ninh hệ thống đều được đảm bảo, đối với các nhà phát minh định lượng nền tảng, người dùng được khuyến khích sử dụng phương pháp này, việc triển khai phân tán như vậy tránh được các mối nguy hiểm ẩn của máy chủ bị tấn công (dù đó là khách hàng hay nền tảng).
Các độc giả có thể tham khảo nội dung này:https://www.fmz.com/bbs-topic/2848
Phương pháp B: Sử dụng nền tảng định lượng của nhà phát minh, nền tảng cung cấp ba vị trí triển khai tại Hồng Kông, Luân Đôn và Hà Nội, người dùng có thể triển khai theo nguyên tắc gần gũi theo vị trí của sàn giao dịch mà họ muốn giao dịch.
Trong bài viết này, chúng tôi sẽ sử dụng phương pháp B để giúp người mới bắt đầu hiểu.
Các hoạt động cụ thể:登陆FMZ.COMNhấp vào Control Center, Trustee, và nhấp vào nút thuê Trustee trên trang Trustee.
Sau khi nhập mật khẩu, triển khai thành công như hình dưới:
Như đã đề cập ở trên, các nhà quản lý giống như một hệ thống dockers, một hệ thống dockers giống như một bộ tiêu chuẩn, chúng ta triển khai các tiêu chuẩn này, và sau đó cần tạo ra một con số trường hợp con số cho tiêu chuẩn này, con số đó là một robot.
Tạo robot rất đơn giản, sau khi triển khai một người quản lý tốt, hãy nhấp vào hộp thư mục robot ở bên trái, nhấp vào tạo robot, điền vào một tên trong tên thẻ, chọn một trong những người quản lý tốt mà bạn vừa triển khai. Các tùy chọn tham số trong hộp thoại bên dưới và chu kỳ dòng K có thể được lựa chọn tùy theo tình huống cụ thể, chủ yếu là để hỗ trợ lựa chọn chiến lược giao dịch.
Cho đến nay, môi trường làm việc của chúng tôi đã được xây dựng hoàn chỉnh, bạn có thể thấy, rất đơn giản và hiệu quả, các chức năng khác nhau.
Ở trên, chúng ta đã đề cập đến khái niệm dữ liệu chuỗi thời gian và dữ liệu Tick, sau đó chúng ta sẽ liên kết hai khái niệm này với một chiến lược đường thẳng đơn giản.
Đi qua một đường trung bình chu kỳ chậm, chẳng hạn như đường trung bình 7 ngày, và một đường trung bình chu kỳ nhanh, chẳng hạn như đường trung bình 3 ngày. Sử dụng chúng trên cùng một đồ họa K, khi đường trung bình chu kỳ nhanh đi qua đường trung bình chu kỳ chậm, chúng ta gọi là đứt vàng; khi đường trung bình chu kỳ chậm đi qua đường trung bình chu kỳ nhanh, chúng ta gọi là đứt chết.
Cơ sở của việc mở giao dịch là cào vàng mở nhiều đơn, cào chết mở không đơn, và chính xác của giao dịch là như vậy.
让我们打开FMZ.COMTrong ngôn ngữ lập trình chính sách ở góc trên trái, chọn Python. Dưới đây là mã của chính sách, mỗi dòng có một chú thích rất chi tiết, xin vui lòng mọi người đọc chậm rãi nhận ra.
import types # 导入Types模块库,这是为了应对代码中将要用到的各种数据类型
def main(): # 主函数,策略逻辑从这里开始
STATE_IDLE = -1 # 标记持仓状态变量
state = STATE_IDLE # 标记当前持仓状态
initAccount = ext.GetAccount() #这里用到了现货数字货币交易类库(python版),编写策略时记得勾选上,作用是获得账户初始信息
while True: # 进入循环
if state == STATE_IDLE : # 这里开始开仓逻辑
n = ext.Cross(FastPeriod,SlowPeriod) # 这里用到了指标交叉函数,详情请查看https://www.fmz.com/strategy/21104
if abs(n) >= EnterPeriod : # 如果n大于等于入市观察期,这里的入市观察期是为了防止一开盘就胡乱开仓。
opAmount = _N(initAccount.Stocks * PositionRatio,3) # 开仓量,关于_N的用法,请查看官方API文档
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # 建立一个变量,用于存储开仓状态,并执行开仓操作
if Dict : # 查看dict变量的情况,为下面的日志输出做准备
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # PD_LONG和PD_SHORT均为全局常量,分别用来表示多头和空头仓位。
Log("开仓详情",Dict,"交叉周期",n) # 日志信息
else: # 这里开始平仓逻辑
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # 指标交叉函数,
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # 如果经过了离市观察期且当前账户状态为持仓状态,进而判断金叉或者死叉
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # 平仓逻辑,是多头就平多头,是空头就平空头。
state = STATE_IDLE # 标记平仓后持仓状态。
nowAccount = ext.GetAccount() # 再次刷新和获取账户信息
LogProfit(nowAccount.Balance - initAccount.Balance,'钱:',nowAccount.Balance,'币:',nowAccount.Stocks,'平仓详情:',Dict2,'交叉周期:',n) # 日志信息
Sleep(Interval * 1000) # 循环暂停一秒,防止API访问频率过快导致账户被限制。
Trong trang chỉnh sửa chiến lược, chúng tôi đã hoàn thành việc viết chiến lược, tiếp theo chúng tôi sẽ xem xét lại chiến lược này để xem nó hoạt động như thế nào trong các ngành công nghiệp lịch sử, tính toán lại đóng một vai trò quan trọng trong việc phát triển bất kỳ chiến lược định lượng nào, nhưng cũng chỉ có thể là một tài liệu tham khảo quan trọng, tính toán lại không đảm bảo lợi nhuận, bởi vì thị trường luôn thay đổi, tính toán lại chỉ là một hành vi của Genghis Khan sau đó, dù có thuộc thể loại bỏ vào danh mục định lượng, thị trường là dẫn xuất.
Nhấp vào thử nghiệm mô phỏng, bạn có thể thấy có rất nhiều tham số có thể điều chỉnh, có thể được sửa đổi trực tiếp trong đó, cho các chính sách sau đó càng phức tạp hơn, các tham số càng nhiều, thay đổi theo cách này có thể giúp người dùng tránh phải thay đổi một lần nữa trong mã, thuận tiện, nhanh chóng và rõ ràng.
Các tùy chọn tối ưu hóa phía sau sẽ tự động tối ưu hóa các tham số được đặt, hệ thống sẽ thử các tham số tối ưu khác nhau để giúp các nhà phát triển chính sách tìm ra lựa chọn tối ưu nhất.
Từ ví dụ trên, chúng ta có thể thấy rằng cơ sở của giao dịch định lượng là thông qua phân tích dữ liệu chuỗi thời gian, và tương tác đánh giá lại dữ liệu dấu chấm, và logic phức tạp, không thể tách rời hai yếu tố cơ bản này. Sự khác biệt chỉ khác nhau về kích thước, ví dụ như giao dịch tần số cao, sẽ đòi hỏi các đoạn dữ liệu chi tiết hơn, dữ liệu chuỗi thời gian phong phú hơn. Ví dụ như giao dịch lãi suất, yêu cầu dữ liệu cho các mẫu đánh giá lại tương đối lớn, có thể cần một số thập kỷ dữ liệu sâu liên tục của hai chỉ số giao dịch để tìm ra kết quả thống kê về sự gia tăng lợi nhuận và giảm chênh lệch nhỏ.