4
Подписаться
1271
Подписчики

Научить вас шаг за шагом внедрять рыночный коллектор

Создано: 2020-04-16 12:44:03, Обновлено: 2024-12-12 20:55:38
comments   7
hits   3870

Научить вас шаг за шагом внедрять рыночный коллектор

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

Это решает несколько задач, таких как:

  • Источники данных могут быть предоставлены нескольким роботам, что может снизить частоту обращения каждого робота к интерфейсу обмена.
  • При запуске робота он может получать данные K-линии с достаточным количеством BAR-сигналов K-линии, поэтому вам больше не придется беспокоиться о недостаточном количестве BAR-сигналов K-линии при запуске робота.
  • Он может собирать рыночные данные по небольшим валютам, чтобы предоставить пользовательский источник данных для системы бэктестинга количественной торговой платформы Inventor, чтобы использовать систему бэктестинга для бэктестинга стратегий.
  • и т. д..

Планируете использовать Python для реализации, почему? Потому что это удобно :) Если у вас есть потребность, действуйте!

Подготовить

  • Библиотека Python pymongo

Потому что для постоянного хранения данных необходима база данных. Использование выбора данныхMongoDB, используйте язык Python для написания программы сбора, поэтому необходима библиотека драйвера этой базы данных. Установка на PythonpymongoВот и все.

  • Установите MongoDB на хост-компьютер

Например: Установка MongoDB на MAC. Конечно, установка MongoDB на WIN аналогична. В сети есть много руководств. Возьмем в качестве примера установку на Apple MAC:

  • скачать Ссылка для скачивания: https://www.mongodb.com/download-center?jmp=nav#community

  • Распаковать После загрузки разархивируйте его в каталог:/usr/local

  • Настройка переменных среды Вход терминала:open -e .bash_profile, после открытия файла напишите:export PATH=${PATH}:/usr/local/MongoDB/bin После сохранения воспользуйтесь терминаломsource .bash_profileВнесите изменения в силу.

  • Вручную настройте каталог файлов базы данных и каталог журналов. Создать каталог/usr/local/data/dbСоответствующая папка в . Создать каталог/usr/local/data/logsСоответствующая папка в .

  • Редактирование файла конфигурации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                               # 开启校验用户
  • Запустить службу MongoDB

Заказ:

  ./mongod -f mongo.conf
  • Остановить обслуживание
  use admin;
  db.shutdownServer();

Реализация программы коллекторов

Коллекционер работает как робот-стратегия Python на платформе количественной торговли Inventor. Из-за моих ограниченных знаний Python я реализовал только простой пример, чтобы продемонстрировать идеи этой статьи.

Код стратегии коллекционера:

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)
        

Полный адрес полиса:Связь

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

Создавайте стратегических ботов, использующих данные. Примечание: Вам необходимо проверитьБиблиотека линейных рисунковЕсли у вас его нет, вы можете скопировать его в свою библиотеку стратегий. Научить вас шаг за шагом внедрять рыночный коллектор

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)

Видно, что код робота стратегии, который использует данные, не имеет доступа ни к какому интерфейсу обмена. Он получает данные, обращаясь к базе данных. Программа сбора данных рынка не записывает данные текущего BAR. Она собирает BAR K-line в завершенное состояние. Если текущий BAR необходимо обновить в режиме реального времени, данные можно немного изменить. Текущий пример кода приведен только для демонстрации. При доступе к записям данных в таблице базы данных получаются все записи данных. По мере увеличения времени сбора данных собирается все больше данных. Запрос всех данных повлияет на производительность в определенной степени. Вы можете спроектировать только запрос данных, которые новее текущих данных, и добавить их к текущим данным.

бегать

Запустите хост-программу Научить вас шаг за шагом внедрять рыночный коллектор

На хостовом устройстве запуститеMongoDBСлужбы баз данных ./mongod -f mongo.conf Научить вас шаг за шагом внедрять рыночный коллектор

Коллекционер бежит собирать смоделированные диски количественной торговой платформы изобретателя.wexAppизBTC_USDTТорговые пары: адрес:wexApp Научить вас шаг за шагом внедрять рыночный коллектор

Робот А, использующий данные базы данных: Научить вас шаг за шагом внедрять рыночный коллектор

Робот B, использующий данные базы данных: Научить вас шаг за шагом внедрять рыночный коллектор

wexAppстраница: Научить вас шаг за шагом внедрять рыночный коллектор

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

Собирайте данные K-line за любой период

Используя мощные функции количественной торговой платформы Inventor, мы можем легко собирать данные K-line за любой период. Например, я хочу собрать 3-минутную K-линию. Что мне делать, если на бирже нет 3-минутной K-линии? Ничего страшного, этого можно легко добиться.

Мы изменяем конфигурацию робота-сборщика и устанавливаем период K-линии на 3 минуты. Платформа количественной торговли Inventor автоматически синтезирует 3-минутную K-линию для программы-сборщика. Научить вас шаг за шагом внедрять рыночный коллектор

Мы используем параметр删除表的名称,настраивать:["records"]Удалить ранее собранную таблицу данных K-линии за 1 минуту. Приготовьтесь к сбору 3-минутных данных К-линии.

запускать收集器程序, перезапуск使用数据的策略机器人

Научить вас шаг за шагом внедрять рыночный коллектор

Научить вас шаг за шагом внедрять рыночный коллектор

Из построенного графика K-line видно, что интервал между BAR составляет 3 минуты, а каждый BAR представляет собой столбец K-line с периодом 3 минуты.

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