Binance запускает новый шлюз MetaTrader 5 (MT5) для брокеров

 
Месяц назад сайт Binance хвастался новостью и приглашал брокеров для теста нового шлюза MetaTrader 5 (MT5):

Платформа Binance Institutional представляет новый внутренний шлюз для брокеров MetaTrader 5 (MT5).
Сервис позволит брокерам напрямую соединить внешний сервер MT5 с источником ликвидности на Binance. 

Торговые пары будут установлены автоматически. Брокеры МТ5 получат беспрепятственный доступ к книге ордеров фьючерсов USDⓈ-M на Binance и тестовой сети фьючерсов на Binance. 
Торгуйте и используйте режим хеджирования на Binance, пользуясь помощью любимых консультантов MT5 (EA MT5). Предоставьте клиентам высокую ликвидность для более чем 50 торговых пар. 
Примечание. Этот продукт доступен только для брокеров с сервером MT5 (к примеру, брокеров CFD и биржевых брокеров). Услуга не предназначена для розничных трейдеров.

Меня интересуют исторические данные по фьючерсам USDⓈ-M Binance для их последующего анализа в МТ5.
Если у кого-то есть доступ к тестовым серверам МТ с шлюзом от Binance, по возможности прошу поделиться.
Спасибо.

Binance Institutional запускает новый шлюз MetaTrader 5 (MT5) для брокеров | Binance Support
Binance Institutional запускает новый шлюз MetaTrader 5 (MT5) для брокеров | Binance Support
  • www.binance.com
представляет новый внутренний шлюз для брокеров MetaTrader 5 (MT5). Сервис позволит брокерам напрямую соединить внешний сервер MT5 с источником ликвидности на Binance. , чтобы подать заявку на доступ к новому шлюзу и подключить сервер МТ5 к Binance. Торговые пары будут установлены автоматически. Брокеры МТ5 получат беспрепятственный доступ к...
 
Есть сторонние работающие шлюзы на Binance. Вроде, годовая тиковая история фьючерсов со снепшотом 100 мс доступна через CopyTicks.
 
fxsaber #:
Есть сторонние работающие шлюзы на Binance. Вроде, годовая тиковая история фьючерсов со снепшотом 100 мс доступна через CopyTicks.

внезапный вопрос, а где вы на Бинансе взяли тики ? их там нет, они не публичны и их внутренняя кухня :-) 

там во все поля тикеры - срезы цен по таймеру, что полезный но несколько иной коленкор, усечённый аналог тф 0.1с . И со стаканом так-же.

чуть другой приоритет генерации, но например нейронки он сведёт с недалёкого ума. Ближе к терминам MT: Тик - цена поменялась больше чем на X, Тикер - прошёл квант времени Y. 

 
Maxim Kuznetsov #:

внезапный вопрос, а где вы на Бинансе взяли тики ? их там нет, они не публичны и их внутренняя кухня :-) 

там во все поля тикеры - срезы цен по таймеру, что полезный но несколько иной коленкор, усечённый аналог тф 0.1с . И со стаканом так-же.

чуть другой приоритет генерации, но например нейронки он сведёт с недалёкого ума. Ближе к терминам MT: Тик - цена поменялась больше чем на X, Тикер - прошёл квант времени Y. 

Могу однозначно подтвердить что в части т.н. "futures" Binance реально "кухня", а не биржа. Биржевые торги там только на споте, а их futures == CFD обычных форекс-брокеров.
 
Gladiator WXT #:
Могу однозначно подтвердить что в части т.н. "futures" Binance реально "кухня", а не биржа. Биржевые торги там только на споте, а их futures == CFD обычных форекс-брокеров.

А подробнее можно? Для себя интересно, так как доверия к криптобиржам у меня было немного больше, чем к форекс кухням.

 
Историю как свечную так и тиковую в мету и без шлюза достать можно. Тиковая занимает порядка 60 - 80гб csv. 
 
Если нужна история - можете обратиться в ЛС. 
 
Вадим Калашников #:
Если нужна история - можете обратиться в ЛС. 

Спасибо за предложение.
Мне достаточно и дневных данных, просто нужно по более 50+ символам.
По этому набросал скрипт, что удовлетворяет мои потребности, может кому тоже пригодится.


Python Binance Futures USD-M export
(#TODO Batch downloader, в одном запросе максимум возвращает 1400 данных по свечам)
(#TODO Check delisted symbols, так данные для icpusdt грузятся удачно, а символ убран еще 2022.06.10 с обзора рынка, сейчас есть только icpbusd)
(#TODO Fix tick_volume value, по умолчанию поставлено 10, может влиять на производительность в тестере стратегий):

import requests
import json
import pandas as pd
import datetime as dt
import os


LIMIT = 1400   #TODO Batch downloader
symbols = ['BTCUSDT', 'ETHUSDT', 'SOLUSDT']
interval = '1d'  #chart intervals: 1m 3m 5m 15m 30m 1h 2h 4h 6h 8h 12h 1d 3d 1w 1M
start = str(int(dt.datetime(2020,5,1).timestamp()*1000))
end = str(int(dt.datetime(2022,8,1).timestamp()*1000))

outdir = './MQL5/Files/Binance_Import'
if not os.path.exists(outdir):
    os.mkdir(outdir)


url = 'https://fapi.binance.com/fapi/v1/klines'
for symbol in symbols:
   print(symbol)
   par = {'symbol': symbol, 'interval': interval, 'startTime': start, 'endTime': end, 'LIMIT':LIMIT}
   req = requests.get(url, params= par)
   
   json_data = json.loads(req.text)
   data = pd.DataFrame(json_data)
   
   data.columns = ['datetime', 'open', 'high', 'low', 'close', 'volume','close_time', 'qav', 'num_trades','taker_base_vol', 'taker_quote_vol', 'ignore']
   data.datetime /= 1000
   data.datetime = data.datetime.astype('int64')
   data['tick_volume'] = 10
   data['spread'] = 1
   data['real_volume'] = 10
   
   filepath = os.path.join(outdir, symbol+'.csv') 
   data.to_csv(filepath, columns=['datetime', 'open', 'high', 'low', 'close', 'tick_volume', 'spread', 'real_volume'], sep='\t', index = None)



MT5 Import:

string ImportFileFindNext(string folder_path){
   static string prev_folder;
   static ulong handle;
   
   string filename;
   if(prev_folder != folder_path){
      FileFindClose(handle);
      prev_folder = folder_path;
      handle = FileFindFirst(prev_folder + "/*.*", filename);
   }
   else{
      FileFindNext(handle, filename);
   }
   
   return filename;
}

string ImportGetSymbolName(string file_name){
   int dot_pos = StringFind(file_name, ".");
   return StringSubstr(file_name, 0, dot_pos);
}

void ImportFileReadCsvData(string filepath, MqlRates &rates[], string delimiter = "\t"){
   ZeroMemory(rates);
   int handle = FileOpen(filepath, FILE_READ | FILE_ANSI | FILE_CSV, '\t');
   
   while(!FileIsLineEnding(handle)){
      FileReadString(handle);
   }
   
   int size = 0;
   while(!FileIsEnding(handle)){   
      ArrayResize(rates, size+1, 2*(size+1));
      
      rates[size].time = datetime(FileReadNumber(handle));
      rates[size].open = FileReadNumber(handle);
      rates[size].high = FileReadNumber(handle);
      rates[size].low = FileReadNumber(handle);
      rates[size].close = FileReadNumber(handle);
      rates[size].tick_volume = long(FileReadNumber(handle));
      rates[size].spread = int(FileReadNumber(handle));
      rates[size].real_volume = long(FileReadNumber(handle));
      
      ++size;
   }   
   FileClose(handle);
}


void OnStart() {
   string import_folder = "Binance_import";
   string custom_symbol_path = "Binance";
   
   
   string next_file = ImportFileFindNext(import_folder);
   while(StringLen(next_file) > 0){
      
      MqlRates rates[];
      ImportFileReadCsvData(import_folder + "/" + next_file, rates);
      string symbol_name = ImportGetSymbolName(next_file);
      
      ArrayReverse(rates);                                      
      CustomSymbolCreate(symbol_name, custom_symbol_path);
      CustomRatesUpdate(symbol_name,rates);
      SymbolSelect(symbol_name, true);
      
      next_file = ImportFileFindNext(import_folder);
   }
}
 
Sergey Dzyublik #:

Спасибо за предложение.
Мне достаточно и дневных данных, просто нужно по более 50+ символам.
По этому набросал скрипт, что удовлетворяет мои потребности, может кому тоже пригодится.


Python Binance Futures USD-M export
(#TODO Batch downloader, в одном запросе максимум возвращает 1400 данных по свечам)
(#TODO Check delisted symbols, так данные для icpusdt грузятся удачно, а символ убран еще 2022.06.10 с обзора рынка, сейчас есть только icpbusd):


MT5 Import:

У вас "от балды" задан tick_volume. Почитайте на что он влияет и как его задавать.

 
Мне надо были только цены в результате tick_volume  "от балды", в тестере гонять не планирую, по этому не переживаю... 
В любом случаи, спасибо за замечание, буду знать на будущее...

Хотелось бы обратить внимание разработчиков на CustomRatesUpdate и ее не лучшую реализацию, которая сделана тупо по ТЗ без какой-либо заботы о реальных пользователях:
1) Если данные tick_volume, spread, real_volume забить нулями - все успешно отработает, но график будет черным и нерабочим;
2) Если массив MqlRates rates[] будет отсортирован не в ту сторону - все успешно отработает, но график будет черным и нерабочим, а данные вообще не добавлятся;


 
Ребята подскажите, есть ли готовое решение, чтобы торговля (тики, свечи и т.д.) Бинанса  отображалась в МТ5 и не заморачиваться с костылями?