Как отправить данные о нескольких таймфреймах из MQL4 в Node.js?

Я пытаюсь получить данные о нескольких таймфреймах разных торговых инструментов ( _Symbol ) из терминала MetaTrader4 на узел.

Как мне это сделать?

Можем ли мы сделать это из того же советника в терминале MetaTrader4?


person KAJI    schedule 25.07.2017    source источник


Ответы (2)


A.1: Да, можем.

A.2: Нет, эта первоначальная идея не очень хороша.

Хотя намерение ясно, идея использовать один советник для отправки данных в реальном времени для нескольких торговых инструментов не работает в соответствии с указанным интересом.

Среда выполнения кода MQL4 имеет некоторую фиксированную, жестко запрограммированную внутреннюю логику, и из-за этого + плюс из-за реальности того, как работают посредники доступа к рынкам капитала и типа брокера, соло-EA никогда не будет соответствовать этим требованиям.

Простой звонок в

iOpen( aTradingInstrumentSymbolNAME,       // iHigh, iLow, iClose, iVolume, iTime
       aSelectedTimeFrameDefinedCODE,
       aRelativeBarPTR
       )

далеко не достаточно.

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

Начните с изучения основ скриптов, сравните все ваши критические участки кода с записью их фактической продолжительности в [нас] и убедитесь, что ваш код останется неблокирующим при любых обстоятельствах. Это определит, потребуется ли более одного потока (потоков) выполнения кода в прайм-тайм / час пик.

Сделав это, ваш путь только начал вести в направлении к ожидаемому результату.

Затем нужно решить о возможном межпроцессном/распределенном потоке данных и сигнализации, необходимых для межплатформенной интеграции.

И последний, но не менее важный момент – юридическая сторона такого предприятия. Это зависит как от вашей местной юрисдикции§$§$§, так и от Положений и условий брокера, поскольку никому не понравится отмечать технически хорошо освоенный проект из тюрьмы.

Все это, довольно интересный проект.

person user3666197    schedule 25.07.2017

iOpen(Symbol(),PERIOD_M1,1) - это способ получения данных с M1 (последний бар), если вам нужен другой таймфрейм - замените PERIOD_M1 на другой ENUM_TIMEFRAMES. Так в чем проблема? Обычно StackOverflow требуется увидеть ваш пример на основе MCVE, чтобы помочь вам.

person Daniel Kniaz    schedule 25.07.2017
comment
Возможно, вы захотите узнать, что ваш пост содержит ошибку. Опубликованный синтаксис никогда не даст вам часть данных последнего бара. Это может быть причиной пересмотреть текст и отредактировать текст (который, кстати, не отвечает на то, о чем на самом деле спрашивал KAJI). Вы можете столкнуться с некоторыми другими ответами от администраторов StackOverflow, которые могут отреагировать и, скорее всего, сочтут такой исходный текст просто комментарием, поэтому некоторое редактирование/переделка, очевидно, является хорошей идеей. Бргдс. - person user3666197; 25.07.2017
comment
Конечно, если кому-то нужны данные в реальном времени, то нужно запросить iClose(_Symbol,PERIOD_M1,0), для доступа к прошлым данным (например, как только какой-то таймфрейм доставил новый бар) - нужно получить данные OHLC, пример этого (просто Open) - думаю, правильно сообщается - person Daniel Kniaz; 25.07.2017
comment
Ну, недостаточно, Даниэль. O/P хотел получить детали из гораздо большего количества торговых инструментов, чем тот самый, MT4.Graph.local, _Symbol per se. Поэтому необходимо приложить еще больше усилий для адекватной и выполнимой алгоритмизации всех таких нетривиальных требований. - person user3666197; 26.07.2017
comment
на самом деле я сделал это.. void OnTick() { string newData[20]; строка a = TimeToStr(TimeGMT()) + , + Bid + , + Ask + , + Open[0]; if(NewBar()) { Print(Новый бар); for(int i=0; i‹20; i++){ newData[i] = TimeToStr(iTime(EURUSD,PERIOD_M5,i)) + , +iOpen(EURUSD,PERIOD_M5,i) + , + iHigh(EURUSD,PERIOD_M5, i)+ , + iLow(EURUSD,PERIOD_M5,i)+ , + iClose(EURUSD,PERIOD_M5,i); а += , + новыеДанные[i]; } } Я хочу отправить другой продукт, другой таймфрейм, открыть максимум, минимум и закрыть - person KAJI; 26.07.2017
comment
да что-то подобное. StringFormat может помочь вам писать меньше - person Daniel Kniaz; 26.07.2017