Поддержка данных о котировках рынка незаменима при исследовании, разработке и обратном тестировании торговых стратегий. Нереально собирать все данные с каждого рынка, в конце концов, объем данных слишком велик. Для рынка цифровой валюты платформа FMZ поддерживает ограниченные данные о обратном тестировании для бирж и торговых пар. Если вы хотите проверить некоторые биржи и торговые пары, которые временно не поддерживались платформой FMZ, вы можете использовать пользовательский источник данных для обратного тестирования, но эта предпосылка требует, чтобы у вас были данные. Поэтому существует острая потребность в программе сбора рыночных котировок, которая может сохраняться и лучше всего получаться в режиме реального времени.
Таким образом, мы можем решить несколько потребностей, таких как:
и еще много...
Мы планируем использовать Python для достижения этого, почему? Потому что это очень удобно
Библиотека Python Pymongo
Потому что вам нужно использовать базу данных для постоянного хранения.MongoDB
и язык Python используется для написания программы сбора, поэтому библиотека драйверов этой базы данных необходима.
Просто установитьpymongo
на Python.
Установка MongoDB на хостинговом устройстве Например: MacOS устанавливает MongoDB, так же как система Windows устанавливает MongoDB. В Интернете есть много учебников. Возьмем установку системы MacOS в качестве примера:
Скачать Ссылка на загрузку:https://www.mongodb.com/download-center?jmp=nav#community
Отключить
После загрузки разблокируйте в каталоге:/usr/local
Конфигурировать переменные среды
Ввод терминала:open -e .bash_profile
, после открытия файла, напишите:exportPATH=${PATH}:/usr/local/MongoDB/bin
После сохранения, в терминале, используетsource .bash_profile
чтобы изменения вступили в силу.
Вручную настроить каталог файлов базы данных и каталог журналов
Создание соответствующей папки в каталоге/usr/local/data/db
- Да.
Создание соответствующей папки в каталоге/usr/local/data/logs
.
Изменить конфигурационный файлmongo.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
Команда:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
Коллектор работает как стратегия робота Python на платформе FMZ. Я просто реализовал простой пример, чтобы показать идеи этой статьи.
Код программы коллектора:
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)
Полный адрес:https://www.fmz.com/strategy/199120
Создайте стратегический робот, который использует данные.
Примечание: Вам нужно проверить
Вот адрес: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)
Можно увидеть, что код стратегии робота, использующего данные, не получает доступа к любому интерфейсу обмена. Данные получаются путем доступа к базе данных. Программа сборщика рынка не записывает текущие данные BAR. Она собирает K-линейный BAR в завершенном состоянии. Если необходимы текущие данные BAR в режиме реального времени, его можно немного изменить.
Текущий примерный код предназначен только для демонстрации. При доступе к записям данных в таблице в базе данных все получаются. Таким образом, по мере увеличения времени сбора данных, собирается все больше и больше данных. Все запросы будут влиять на производительность в определенной степени и могут быть разработаны. Только данные, которые являются более новыми, чем текущие данные, запрашиваются и добавляются к текущим данным.
запустить программу Docker
На устройстве, где расположен докер, запустите службу базы данных MongoDB
Коллектор запускает для сбора торговых пар BTC_USDT платформы FMZ WexApp симуляции обмена маркет котировок: Адрес WexApp: https://wex.app/trade?currency=BTC_USDT
Робот А использует данные базы данных:
Робот Б использует данные базы данных:
Страница WexApp:
Как вы видите на рисунке, роботы с разными идентификаторами используют один источник данных для обмена данными K-линии.
Опираясь на мощные функции платформы FMZ, мы можем легко собирать данные K-линии в любом цикле. Например, я хочу собрать 3-минутную K-линию, а если на бирже нет 3-минутной K-линии?
Мы модифицируем конфигурацию робота-коллектора, период линии K устанавливается на 3 минуты, и платформа FMZ автоматически синтезирует 3-минутную линию K в программу коллектора.
Мы используем параметр для удаленияthe name of the table
, настройка: [
Начнитеcollector program
, а затем перезапуститьstrategy robot using the data
.
Вы можете видеть, что на графике K-линии, интервал между BAR - 3 минуты, и каждая BAR - это K-линейная панель с 3-минутным периодом.
В следующем выпуске мы постараемся реализовать требования пользовательских источников данных.
Спасибо за чтение!