Dạy bạn thực hiện một bộ sưu tập báo giá thị trường

Tác giả:Tốt, Tạo: 2020-05-30 10:03:39, Cập nhật: 2023-11-02 19:52:02

img

Việc hỗ trợ dữ liệu báo giá thị trường là điều không thể thiếu khi nghiên cứu, thiết kế và kiểm tra lại các chiến lược giao dịch. Không thực tế khi thu thập tất cả dữ liệu từ mọi thị trường, sau khi tất cả, số lượng dữ liệu quá lớn. Đối với thị trường tiền kỹ thuật số, nền tảng FMZ hỗ trợ dữ liệu kiểm tra lại giới hạn cho sàn giao dịch và cặp giao dịch. Nếu bạn muốn kiểm tra lại một số sàn giao dịch và cặp giao dịch tạm thời không được nền tảng FMZ hỗ trợ, bạn có thể sử dụng một nguồn dữ liệu tùy chỉnh để kiểm tra lại, nhưng tiền đề này đòi hỏi bạn phải có dữ liệu. Do đó, có một nhu cầu khẩn cấp cho một chương trình thu thập báo giá thị trường, có thể được duy trì và thu được tốt nhất trong thời gian thực.

Bằng cách này, chúng tôi có thể giải quyết một số nhu cầu, chẳng hạn như:

  • Nhiều robot có thể được cung cấp các nguồn dữ liệu, có thể tạo điều kiện cho việc truy cập tần suất của mỗi robot vào giao diện trao đổi.
  • Bạn có thể có được dữ liệu K-line với một số lượng đủ các K-line BAR khi robot khởi động, và bạn không còn phải lo lắng về số lượng không đủ các K-line BAR 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ệ hiếm và cung cấp một nguồn dữ liệu tùy chỉnh cho hệ thống kiểm tra hậu quả nền tảng FMZ.

và nhiều hơn nữa...

chúng tôi có kế hoạch sử dụng Python để đạt được điều này, tại sao?

Sẵn sàng rồi.

  • Thư viện Python's Pymongo Vì bạn cần sử dụng cơ sở dữ liệu để lưu trữ liên tục.MongoDBvà ngôn ngữ Python được sử dụng để viết chương trình thu thập, vì vậy thư viện trình điều khiển của cơ sở dữ liệu này là cần thiết. Chỉ cần cài đặtpymongotrên Python.

  • Cài đặt MongoDB trên thiết bị lưu trữ Ví dụ: MacOS cài đặt MongoDB, cũng giống như hệ thống windows cài đặt MongoDB. Có rất nhiều hướng dẫn trực tuyến. Hãy lấy cài đặt hệ thống MacOS làm ví dụ:

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

  • Unzip Sau khi tải xuống, mở zip vào thư mục:/usr/local

  • Thiết lập biến môi trường Nhập đầu cuối:open -e .bash_profile, sau khi mở hồ sơ, viết:exportPATH=${PATH}:/usr/local/MongoDB/binSau khi lưu, trong đầu cuối, sử dụngsource .bash_profileđể thay đổi có hiệu lực.

  • Hướng tay cấu hình thư mục tập tin cơ sở dữ liệu và thư mục nhật ký Tạo thư mục tương ứng trong thư mục/usr/local/data/db. Tạo thư mục tương ứng trong thư mục/usr/local/data/logs.

chỉnh sửa tệp cấu hìnhmongo.conf:

#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
  • Chạy MongoDB

lệnh:

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

Thực hiện chương trình thu thập

Bộ sưu tập hoạt động như một chiến lược robot Python trên nền tảng FMZ. Tôi chỉ thực hiện một ví dụ đơn giản để hiển thị ý tưởng của bài viết này.

Mã chương trình thu thập:

import pymongo
import json

def main():
    Log("Test data collection")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Check if the table is deleted
    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, "delete:", dropName)
                ret = tab.drop()
                collist = huobi_DB.list_collection_names()
                if dropName in collist:
                    Log(dropName, "failed to delete")
                else :
                    Log(dropName, "successfully deleted")
    
    # Create the records table
    huobi_DB_Records = huobi_DB["records"]
    
    # Request data
    preBarTime = 0
    index = 1
    while True:
        r = _C(exchange.GetRecords)
        if len(r) < 2:
            Sleep(1000)
            continue
        if preBarTime == 0:
            # Write all BAR data for the first time
            for i in range(len(r) - 1):
                # Write one by one
                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ỉ chiến lược đầy đủ:https://www.fmz.com/strategy/199120

Dữ liệu sử dụng

Tạo ra một robot chiến lược sử dụng dữ liệu. Lưu ý: Bạn cần kiểm tra python PlotLine Template, nếu bạn không có nó, bạn có thể sao chép một từ hình vuông chiến lược vào thư viện chiến lược của bạn.

img

Đây là địa chỉ:https://www.fmz.com/strategy/39066

import pymongo
import json

def main():
    Log("Test using database data")
    
    # Connect to the database service
    myDBClient = pymongo.MongoClient("mongodb://localhost:27017")   # mongodb://127.0.0.1:27017
    # Create a database
    huobi_DB = myDBClient["huobi"]
    
    # Print the current database table
    collist = huobi_DB.list_collection_names()
    Log("collist:", collist)
    
    # Query data printing
    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)
        
        # Use the line drawing library to draw the obtained K-line data
        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. Dữ liệu được thu được bằng cách truy cập cơ sở dữ liệu. Chương trình thu thập thị trường không ghi lại dữ liệu BAR hiện tại. Nó thu thập BAR K-line trong trạng thái hoàn thành. Nếu cần dữ liệu thời gian thực BAR hiện tại, nó có thể được sửa đổi một chút.

Mã ví dụ hiện tại chỉ để chứng minh. Khi truy cập vào các bản ghi dữ liệu trong bảng trong cơ sở dữ liệu, tất cả đều được lấy. Bằng cách nà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. Tất cả các truy vấn sẽ ảnh hưởng đến hiệu suất ở một mức độ nhất định và có thể được thiết kế. Chỉ có dữ liệu mới hơn dữ liệu hiện tại được truy vấn và thêm vào dữ liệu hiện tại.

Chạy đi.

chạy chương trình docker

img

Trên thiết bị mà docker nằm, chạy dịch vụ cơ sở dữ liệu MongoDB

img

Bộ sưu tập chạy để thu thập các cặp giao dịch BTC_USDT của nền tảng FMZ WexApp giao dịch mô phỏng giá báo giá: Địa chỉ WexApp: https://wex.app/trade?currency=BTC_USDT

img

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

img

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

img

Trang WexApp:

img

Như bạn có thể thấy trong hình, các robot với ID khác nhau chia sẻ dữ liệu đường K bằng một nguồn dữ liệu.

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

Dựa trên các chức năng mạnh mẽ của nền tảng FMZ, chúng tôi có thể dễ dàng thu thập dữ liệu đường K ở bất kỳ chu kỳ nào. Ví dụ, tôi muốn thu thập một K-line 3 phút, nếu sàn giao dịch không có một K-line 3 phút?

Chúng tôi sửa đổi cấu hình của robot thu thập, thời gian dòng K được thiết lập thành 3 phút, và nền tảng FMZ sẽ tự động tổng hợp một dòng K 3 phút cho chương trình thu thập.

img

Chúng tôi sử dụng tham số để xóathe name of the table, cài đặt: [records] xóa bảng dữ liệu đường K 1 phút được thu thập trước đó. Chuẩn bị để thu thập dữ liệu đường K 3 phút.

Bắt đầucollector program, và sau đó khởi động lạistrategy robot using the data.

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, và mỗi BAR là một thanh đường K với khoảng thời gian 3 phút.

Trong số tiếp theo, chúng tôi sẽ cố gắng thực hiện các yêu cầu của các nguồn dữ liệu tùy chỉnh.

Cảm ơn đã đọc!


Có liên quan

Thêm nữa