Bàn tay hướng dẫn bạn thực hiện một bộ sưu tập thị trường

Tác giả:Giấc mơ nhỏ, Tạo: 2020-04-16 12:44:03, Cập nhật: 2023-10-11 19:57:00

img

Các chiến lược nghiên cứu, thiết kế, phân tích lại trong giao dịch định lượng, hỗ trợ dữ liệu thị trường không thể tách khỏi dữ liệu thị trường. Tất cả dữ liệu trên thị trường đều được thu thập và không thực tế, sau khi tất cả, số lượng dữ liệu là quá lớn. Đối với thị trường tiền kỹ thuật số, các nhà phát minh hỗ trợ một số sàn giao dịch định lượng trên nền tảng giao dịch.

Điều này giúp giải quyết một số nhu cầu, chẳng hạn như:

  • Có thể cung cấp nguồn dữ liệu cho nhiều robot, giảm tần suất mỗi robot truy cập vào giao diện giao dịch.
  • Bạn có thể cho robot khởi động, lấy một số lượng K-bar đủ dữ liệu K-bar, và không phải lo lắng về số lượng K-bar không đủ khi robot khởi động.
  • Có thể thu thập dữ liệu thị trường tiền tệ nhỏ để cung cấp nguồn dữ liệu tùy chỉnh cho các nhà phát minh hệ thống kiểm tra lại nền tảng giao dịch định lượng, do đó sử dụng chiến lược kiểm tra lại hệ thống kiểm tra lại.
  • Chờ đã...

Vì nó rất thuận tiện:) Nếu có nhu cầu, hãy bắt tay!

Sẵn sàng

  • Pythons Python thư viện

    Vì bạn cần sử dụng cơ sở dữ liệu để lưu trữ lâu dài.MongoDBCác trình điều khiển của cơ sở dữ liệu này được sử dụng để viết trình thu thập bằng ngôn ngữ Python. cài đặt trên PythonpymongoCó thể.

  • Cài đặt MongoDB trên thiết bị của chủ nhà

    Ví dụ: cài đặt MongoDB trên máy Mac, và tất nhiên hệ thống Win cũng cài đặt MongoDB tương tự, có rất nhiều hướng dẫn trực tuyến để cài đặt trên hệ thống Mac của Apple:

  • Tải xuống Đường dẫn tải về:https://www.mongodb.com/download-center?jmp=nav#community

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

  • Thiết lập các biến môi trường Đầu vào cuối cùng:open -e .bash_profileSau khi mở tài liệu, hãy viết:export PATH=${PATH}:/usr/local/MongoDB/binSau khi lưu, dùng cuối cùngsource .bash_profileNhững điều này sẽ khiến cho các thay đổi này có hiệu lực.

  • Chọn thư mục tập tin và thư mục nhật ký cơ sở dữ liệu theo cách thủ công Tạo danh mục/usr/local/data/dbTrong thư mục tương ứng. Tạo danh mục/usr/local/data/logsTrong thư mục tương ứng.

  • Biến đổi hồ sơmongo.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 MongoDB

    Chỉ thị:

    ./mongod -f mongo.conf
    
  • Dừng dịch vụ

    use admin;
    db.shutdownServer();
    

Thực hiện các quy trình thu thập

Bộ sưu tập hoạt động dưới dạng chiến lược của robot Python trên nền tảng giao dịch định lượng của nhà phát minh. Vì mức độ Python của bản thân hạn chế, chỉ thực hiện một ví dụ đơn giản để thể hiện ý tưởng của bài viết này.

Có thể bạn có thể sử dụng các công cụ này để thu thập thông tin.

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

Sử dụng dữ liệu

Một số người dùng đã sử dụng các công cụ này để tạo ra các robot chiến lược sử dụng dữ liệu. Lưu ý: cần chọn"Bộ thư viện đường vẽ"Nếu không, bạn có thể sao chép một trong các thư viện chính sách của mình.img

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)

Bạn có thể thấy rằng trong 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 giao dịch nào, thu thập dữ liệu bằng cách truy cập vào cơ sở dữ liệu, các 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, thu thập dữ liệu của K-line BAR đã hoàn thành trạng thái, nếu cần dữ liệu thời gian thực của BAR hiện tại, bạn có thể sửa đổi một chút. Ví dụ mã hiện tại, chỉ để chứng minh, tất cả các bản ghi dữ liệu trong bảng trong cơ sở dữ liệu được lấy khi truy cập, do đó, khi thời gian thu thập dữ liệu tăng lên, thu thập dữ liệu ngày càng nhiều, tất cả các truy vấn ra sẽ ảnh hưởng đến hiệu suất ở một mức độ nào đó, có thể được thiết kế để chỉ truy vấn dữ liệu mới hơn dữ liệu hiện tại và thêm vào dữ liệu hiện tại.

Hoạt động

Chạy trình quản trịimg

Các thiết bị trên máy chủ được chạy.MongoDBDịch vụ cơ sở dữ liệu./mongod -f mongo.conf img

Bộ sưu tập hoạt động, bộ sưu tập nền tảng giao dịch định lượng của nhà phát minhwexAppcủaBTC_USDTCác cặp giao dịch: Địa chỉ:wexApp img

Robot sử dụng dữ liệu cơ sở dữ liệu A:img

Robot B sử dụng dữ liệu cơ sở dữ liệuimg

wexAppTrang:img

Bạn có thể thấy trên hình, các robot với ID khác nhau, chia sẻ dữ liệu K-line sử dụng một nguồn dữ liệu.

Thu thập dữ liệu đường K theo bất kỳ chu kỳ nào

Với tính 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 theo bất kỳ chu kỳ nào. Ví dụ, nếu tôi muốn thu thập 3 phút K-line, nhưng sàn giao dịch không có 3 phút K-line thì sao?

Chúng tôi đã thay đổi cấu hình của robot thu thập dữ liệu, đặt chu kỳ dòng K là 3 phút, và các nhà phát minh định lượng nền tảng giao dịch sẽ tự động tổng hợp các dòng K 3 phút cho chương trình thu thập dữ liệu.img

Chúng ta sử dụng các tham số.删除表的名称, cài đặt:["records"]Loại bỏ bảng dữ liệu K-Line 1 phút thu thập trước đó.

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

img

img

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

Trong giai đoạn tiếp theo, chúng tôi sẽ cố gắng thực hiện nhu cầu về nguồn dữ liệu tùy chỉnh. Cảm ơn đã đọc.


Có liên quan

Thêm nữa

xukittyThật tuyệt vời.

zltimđỉnh

zltimđỉnh

bài giảngTôn vinh

dsaidasiđỉnh

Giấc mơ nhỏCảm ơn vì đã hỗ trợ, tôi là một người Python nhỏ bé, và tôi đang cố gắng để thực hiện tốt hơn hoặc đề xuất, tôi mong đợi sự hoàn thiện.