avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Được tạo ra trong: 2020-04-16 12:44:03, cập nhật trên: 2024-12-12 20:55:38
comments   7
hits   3870

Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Trong giao dịch theo chương trình và giao dịch định lượng, việc nghiên cứu chiến lược, thiết kế chiến lược và phân tích thử nghiệm ngược là không thể tách rời khỏi sự hỗ trợ của dữ liệu thị trường. Việc thu thập toàn bộ dữ liệu trên thị trường là không thực tế vì lượng dữ liệu quá lớn. Đối với thị trường tiền kỹ thuật số, Nền tảng giao dịch định lượng Inventor hỗ trợ dữ liệu kiểm tra ngược cho một số sàn giao dịch và cặp giao dịch giới hạn. Nếu bạn muốn kiểm tra ngược một số sàn giao dịch và cặp giao dịch hiện không hỗ trợ dữ liệu. Bạn có thể sử dụng nguồn dữ liệu tùy chỉnh để kiểm tra ngược, nhưng điều này đòi hỏi bạn phải có dữ liệu của riêng mình. Do đó, nhu cầu cấp thiết về một chương trình thu thập thông tin thị trường có thể lưu trữ lâu dài và tốt nhất là có thể thu thập theo thời gian thực là rất lớn.

Điều này giải quyết được một số yêu cầu như:

  • Nguồn dữ liệu có thể được cung cấp cho nhiều robot, giúp giảm tần suất mỗi robot truy cập vào giao diện trao đổi.
  • Khi robot khởi động, nó có thể thu thập dữ liệu K-line với số lượng thanh K-line BAR đủ lớn, do đó bạn không còn phải lo lắng về việc số lượng thanh K-line BAR không đủ khi robot khởi động.
  • Nó có thể thu thập dữ liệu thị trường của các loại tiền tệ nhỏ để cung cấp nguồn dữ liệu tùy chỉnh cho hệ thống kiểm tra ngược của Nền tảng giao dịch định lượng Inventor, để sử dụng hệ thống kiểm tra ngược cho các chiến lược kiểm tra ngược.
  • vân vân..

Bạn đang có kế hoạch sử dụng Python để triển khai nó, tại sao? Bởi vì nó tiện lợi :) Nếu bạn có nhu cầu, hãy hành động!

Chuẩn bị

  • Thư viện pymongo của Python

Bởi vì cần có cơ sở dữ liệu để lưu trữ lâu dài. Sử dụng lựa chọn dữ liệuMongoDB, sử dụng ngôn ngữ Python để viết chương trình thu thập, do đó cần có thư viện trình điều khiển của cơ sở dữ liệu này. Cài đặt trên PythonpymongoVậy thôi.

  • Cài đặt MongoDB trên máy chủ

Ví dụ: Cài đặt MongoDB trên MAC. Tất nhiên, cài đặt MongoDB trên WIN cũng tương tự. Có rất nhiều hướng dẫn trực tuyến. Lấy ví dụ về cài đặt trên Apple MAC:

  • tải về Liên kết tải xuống: https://www.mongodb.com/download-center?jmp=nav#community

  • Giải nén Sau khi tải về, giải nén vào thư mục:/usr/local

  • Cấu hình các biến môi trường Đầu vào thiết bị đầu cuối:open -e .bash_profile, sau khi mở tệp, hãy viết:export PATH=${PATH}:/usr/local/MongoDB/bin Sau khi lưu, sử dụng terminalsource .bash_profileĐể những thay đổi có hiệu lực.

  • Cấu hình thủ công thư mục tệp cơ sở dữ liệu và thư mục nhật ký Tạo một thư mục/usr/local/data/dbThư mục tương ứng trong . Tạo một thư mục/usr/local/data/logsThư mục tương ứng trong .

  • Chỉnh sửa tập tin cấu hìnhmongo.conf

  #bind_ip_all = true                        # 任何机器可以连接
  bind_ip = 127.0.0.1                        # 本机可以访问
  port = 27017                               # 实例运行在27017端口(默认)
  dbpath = /usr/local/data/db                # 数据文件夹存放地址(db要预先创建)
  logpath = /usr/local/data/logs/mongodb.log # 日志文件地址
  logappend = false                          # 启动时 添加还是重写日志文件
  fork = false                               # 是否后台运行
  auth = false                               # 开启校验用户
  • Chạy dịch vụ MongoDB

Đặt hàng:

  ./mongod -f mongo.conf
  • Dừng dịch vụ
  use admin;
  db.shutdownServer();

Thực hiện chương trình Collector

Bộ sưu tập chạy như một chiến lược robot Python trên Nền tảng giao dịch định lượng Inventor. Do trình độ Python có hạn nên tôi chỉ thực hiện một ví dụ đơn giản để minh họa cho các ý tưởng của bài viết này.

Mã chiến lược của nhà sưu tập:

import pymongo
import json

def main():
    Log("测试数据收集")
    
    # 连接数据库服务
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # 创建数据库
    huobi_DB = myDBClient["huobi"]
    
    # 打印目前数据库表
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # 检测是否删除表
    arrDropNames = json.loads(dropNames)
    if isinstance(arrDropNames, list):
        for i in range(len(arrDropNames)):
            dropName = arrDropNames[i]
            if isinstance(dropName, str):
                if not dropName in collist:
                    continue
                tab = huobi_DB[dropName]
                Log("dropName:", dropName, "删除:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "删除失败")
                else :
                    Log(dropName, "删除成功")
    
    # 创建records表
    huobi_DB_Records = huobi_DB["records"]
    
    # 请求数据
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # 首次写入所有BAR数据
            for i in range(len(r) - 1):
                # 逐根写入
                bar = r[i]
                huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})                
                index += 1
            preBarTime = r[-1]["Time"]
        elif preBarTime != r[-1]["Time"]:
            bar = r[-2]
            huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
            index += 1
            preBarTime = r[-1]["Time"]
        LogStatus(_D(), "preBarTime:", preBarTime, "_D(preBarTime):", _D(preBarTime/1000), "index:", index)
        Sleep(10000)
        

Địa chỉ chính sách đầy đủ:Liên kết

Dữ liệu sử dụng

Tạo bot chiến lược sử dụng dữ liệu. Lưu ý: Bạn cần phải kiểm traThư viện bản vẽ đường nétNếu bạn không có, bạn có thể sao chép một cái vào thư viện chiến lược của riêng bạn. Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

import pymongo
import json

def main():
    Log("测试使用数据库数据")
    
    # 连接数据库服务
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # 创建数据库
    huobi_DB = myDBClient["huobi"]
    
    # 打印目前数据库表
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # 查询数据打印
    huobi_DB_Records = huobi_DB["records"]
    
    while True:
        arrRecords = []
        for x in huobi_DB_Records.find():
            bar = {
                "High": x["High"], 
                "Low": x["Low"], 
                "Close": x["Close"], 
                "Open": x["Open"], 
                "Time": x["Time"], 
                "Volume": x["Volume"]
            }
            arrRecords.append(bar)
        
        # 使用画线类库,把取到的K线数据画出来
        ext.PlotRecords(arrRecords, "K")
        LogStatus(_D(), "records length:", len(arrRecords))
        Sleep(10000)

Có thể thấy rằng mã robot chiến lược sử dụng dữ liệu không truy cập vào bất kỳ giao diện trao đổi nào. Nó lấy dữ liệu bằng cách truy cập vào cơ sở dữ liệu. Chương trình thu thập thị trường không ghi lại dữ liệu của BAR hiện tại. Nó thu thập BAR dòng K trong trạng thái hoàn thành. Nếu BAR hiện tại cần được cập nhật theo thời gian thực, Dữ liệu có thể được sửa đổi một chút. Mã ví dụ hiện tại chỉ để minh họa. Khi truy cập các bản ghi dữ liệu trong bảng trong cơ sở dữ liệu, tất cả các bản ghi dữ liệu đều được lấy. Khi thời gian thu thập dữ liệu tăng lên, ngày càng có nhiều dữ liệu được thu thập. Truy vấn tất cả dữ liệu sẽ ảnh hưởng đến hiệu suất ở một mức độ nhất định. Bạn chỉ có thể thiết kế dữ liệu truy vấn mới hơn dữ liệu hiện tại và thêm nó vào dữ liệu hiện tại.

chạy

Chạy chương trình máy chủ Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Trên thiết bị của máy chủ, hãy chạyMongoDBDịch vụ cơ sở dữ liệu ./mongod -f mongo.conf Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Người thu thập chạy đến để thu thập các đĩa mô phỏng của nền tảng giao dịch định lượng của nhà phát minhwexAppcủaBTC_USDTCặp giao dịch: Địa chỉ:wexApp Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Robot A sử dụng dữ liệu cơ sở dữ liệu: Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Robot B sử dụng dữ liệu cơ sở dữ liệu: Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

wexApptrang: Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Như có thể thấy trong hình, các robot có ID khác nhau chia sẻ dữ liệu dòng K từ cùng một nguồn dữ liệu.

Thu thập dữ liệu K-line của bất kỳ thời kỳ nào

Dựa vào các chức năng mạnh mẽ của Nền tảng giao dịch định lượng của Nhà phát minh, chúng ta có thể dễ dàng thu thập dữ liệu K-line của bất kỳ giai đoạn nào. Ví dụ, tôi muốn tích lũy K-line 3 phút, tôi phải làm gì nếu sàn giao dịch không có K-line 3 phút? Không sao cả, điều đó có thể dễ dàng thực hiện được.

Chúng tôi sửa đổi cấu hình của robot thu thập và đặt chu kỳ K-line là 3 phút. Nền tảng giao dịch định lượng Inventor sẽ tự động tổng hợp K-line 3 phút cho chương trình thu thập. Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Chúng tôi sử dụng tham số删除表的名称,cài đặt:["records"]Xóa bảng dữ liệu K-line 1 phút đã thu thập trước đó. Chuẩn bị thu thập dữ liệu K-line 3 phút.

khởi động收集器程序, khởi động lại使用数据的策略机器人

Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Dạy bạn từng bước để thực hiện một nhà sưu tập thị trường

Bạn có thể thấy từ biểu đồ đường K rằng khoảng thời gian giữa các BAR là 3 phút và mỗi BAR là một cột đường K có chu kỳ 3 phút.

Trong số tiếp theo, chúng tôi sẽ cố gắng triển khai các yêu cầu của nguồn dữ liệu tùy chỉnh. Cảm ơn bạn đã đọc