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ư:
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?
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.MongoDB
và 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 đặtpymongo
trê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/bin
Sau 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
lệnh:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
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
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
Đâ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 chương trình docker
Trên thiết bị mà docker nằm, chạy dịch vụ cơ sở dữ liệu MongoDB
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
Robot A sử dụng dữ liệu cơ sở dữ liệu:
Robot B sử dụng dữ liệu cơ sở dữ liệu:
Trang WexApp:
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.
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.
Chúng tôi sử dụng tham số để xóathe name of the table
, cài đặt: [
Bắt đầucollector program
, và sau đó khởi động lạistrategy robot using the data
.
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!