Научить вас внедрять рыночные котировки коллектор

Автор:Доброта, Создано: 2020-05-30 10:03:39, Обновлено: 2023-11-02 19:52:02

img

Поддержка данных о котировках рынка незаменима при исследовании, разработке и обратном тестировании торговых стратегий. Нереально собирать все данные с каждого рынка, в конце концов, объем данных слишком велик. Для рынка цифровой валюты платформа FMZ поддерживает ограниченные данные о обратном тестировании для бирж и торговых пар. Если вы хотите проверить некоторые биржи и торговые пары, которые временно не поддерживались платформой FMZ, вы можете использовать пользовательский источник данных для обратного тестирования, но эта предпосылка требует, чтобы у вас были данные. Поэтому существует острая потребность в программе сбора рыночных котировок, которая может сохраняться и лучше всего получаться в режиме реального времени.

Таким образом, мы можем решить несколько потребностей, таких как:

  • Многочисленные роботы могут быть обеспечены источниками данных, что может облегчить частоту доступа каждого робота к интерфейсу обмена.
  • Вы можете получить K-линейные данные с достаточным количеством K-линейных BAR при запуске робота, и вам больше не нужно беспокоиться о недостаточном количестве K-линейных BAR при запуске робота.
  • Он может собирать рыночные данные о редких валютах и предоставлять пользовательский источник данных для системы бэкстеста платформы 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
  • Запустить MongoDB

Команда:

./mongod -f mongo.conf
  • Остановить MongoDB
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

Данные об использовании

Создайте стратегический робот, который использует данные. Примечание: Вам нужно проверить python PlotLine Template, если у вас его нет, вы можете скопировать один из квадрата стратегии в свою библиотеку стратегии.

img

Вот адрес: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

img

На устройстве, где расположен докер, запустите службу базы данных MongoDB

img

Коллектор запускает для сбора торговых пар BTC_USDT платформы FMZ WexApp симуляции обмена маркет котировок: Адрес WexApp: https://wex.app/trade?currency=BTC_USDT

img

Робот А использует данные базы данных:

img

Робот Б использует данные базы данных:

img

Страница WexApp:

img

Как вы видите на рисунке, роботы с разными идентификаторами используют один источник данных для обмена данными K-линии.

Собирать данные K-линии любого периода

Опираясь на мощные функции платформы FMZ, мы можем легко собирать данные K-линии в любом цикле. Например, я хочу собрать 3-минутную K-линию, а если на бирже нет 3-минутной K-линии?

Мы модифицируем конфигурацию робота-коллектора, период линии K устанавливается на 3 минуты, и платформа FMZ автоматически синтезирует 3-минутную линию K в программу коллектора.

img

Мы используем параметр для удаленияthe name of the table, настройка: [records] удалить таблицу данных K-линии 1 минуты, собранную ранее. Подготовиться к сбору данных K-линии 3 минуты.

Начнитеcollector program, а затем перезапуститьstrategy robot using the data.

img

img

Вы можете видеть, что на графике K-линии, интервал между BAR - 3 минуты, и каждая BAR - это K-линейная панель с 3-минутным периодом.

В следующем выпуске мы постараемся реализовать требования пользовательских источников данных.

Спасибо за чтение!


Связанные

Больше