Разработана библиотека функций API для MetaTrader 4 - страница 5

 
Кстати, теперь то что предлагает Min, больше чем раньше, похоже на то, что можно купить.
Сугубое Имхо :)

Спасибо! Жду комерческих предложений. Удачи!
 
Трудно это назвать API. Библиотека + советник. Работает ну ОЧЕНЬ медленно.
 
...
 
Вопрос к разработчику библиотеки: по какой причине скорость получения котировок при использовании вашей библиотеки даже меньше чем скорость при работе через временные файлы? В чем тогда плюс использования разделяемой памяти?

Что Вы подразумеваете под скоростью получения котировок? Если это - получение тиков, то я уже писал, что работа с тиками котировок даже непосредственно в МТ4 затруднительна.
Библиотека изначально не предназначалась для вылавливания тиков. Это связано с тем, что при серьезной активности рынка система может просто зависнуть из-за невозможности поспеть за тиками. Поэтому в библиотеке встроена программная защита от поступления лавины тиков.
Преимущества использования разделяемой памяти заключаются в высокой надежности такой системы и в отсутствии засорения жесткого диска. Кроме этого, к библиотеке могут обращаться несколько программ, и им для этого не нужно "знать" точного местоположения временных файлов. Удачи!
 
при серьезной активности рынка система может просто зависнуть из-за невозможности поспеть за тиками. Поэтому в библиотеке встроена программная защита от поступления лавины тиков.


тут автор кажется перемудрил :)
насколько я понимаю, если советник находится внутри функции start() (а ведь он оттуда посылает инфу о тике клиенту АПИ), то MT не даст новый тик, пока советник не выйдет из start(). Поэтому непонятно как тут может образоваться "лавина тиков"?

если советник зациклен и получает тики через RefreshRates, то ведь сначала должен произойти выход из клиентской АПИ, а потом уже вызов RefreshRates. Поэтому тут зависнуть тоже вроде негде.

Преимущества использования разделяемой памяти заключаются в высокой надежности такой системы

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

имхо, MMF хорош только в одном случае, когда надо прокачивать большие объемы данных между процессами - скорость прокачки составляет ~150Мб/сек. (пару месяцев назад пришлось делать такой механизм как раз на MMF, т.к. по тестам это самый быстрый способ).

в данной задаче (передать параметры для OrderSend etc.) - это как из пушки по воробьям, проще скажем создать окно и использовать SendMessage с wm_copydata.
 
звучит конечно солидно, но это не единственный способ межпроцессного обмена.
так что тема "...В чем тогда плюс использования разделяемой памяти?" не раскрыта :)

Я и не думаю спорить, о том, что применяемый алгоритм является наилучшим. В том и прелесть программирования, что подобную задачу можно решать как минимум десятком способов. Вариант с временными файлами то же был полностью рабочим. Моей задачей была разработка надежной, работоспособной и полностью функциональной замены API MT3. На сегодня библиотека работает с практической программой трейдинга уже около полугода. И основная проблема тут была не в достижении максимальной скорости работы, а в надежности и правильной реакции на большое количество аварийных ситуаций. Поэтому, спасибо за Ваши замечания, они вполне уместны, но это "уже совсем другая история". Удачи!
 
Здравствуйте, значит основной проблемой на данный момент является подключение:

Включить в проект библиотеку импорта Mforex2.lib (для Delpi – только описать функции библиотеки),
Указать в основной программе заголовочный файл Mforex.h (например: #include "Mforex.h" – только для Builder C++);

Вот эти 2 пункта для меня загадка, потому что Омега готовая программа, все остальные файлы я разместил как описано, прописал функцию старта МТ4, и при запуске вышло сообщение о том что надо прописать точный путь, но путь я тоже точно прописал. Дальше не знаю.
 
Включить в проект библиотеку импорта Mforex2.lib (для Delpi – только описать функции библиотеки),
Указать в основной программе заголовочный файл Mforex.h (например: #include "Mforex.h" – только для Builder C++);
Вот эти 2 пункта для меня загадка, потому что Омега готовая программа, все остальные файлы я разместил как описано, прописал функцию старта МТ4, и при запуске вышло сообщение о том что надо прописать точный путь, но путь я тоже точно прописал. Дальше не знаю.

В Омеге предусмотрена возможность импорта функций из внешних DLL библиотек. Поэтому в качестве внешней библиотеки следует указать Mforex2.dll. В тоже время, данный файл должен быть в "поле зрения" программ Омеги. В процедурах вызова указываем наименование импортируемых из DLL-библиотеки функций, как это указано в документации. Учтите еще, что Омега "не знает" определений из файла Mforex.h. Т.е., например, при вызове функции открытия позиции, нужно указать код операции скажем для Sell - 1, а не OP_SELL и т.д. Более подробно - см. документацию к DevKit, которая описывает формат работы омеги с внешними библиотеками.
Удачи!
 

В Омеге предусмотрена возможность импорта функций из внешних DLL библиотек. Поэтому в качестве внешней библиотеки следует указать Mforex2.dll. В тоже время, данный файл должен быть в "поле зрения" программ Омеги. В процедурах вызова указываем наименование импортируемых из DLL-библиотеки функций, как это указано в документации. Учтите еще, что Омега "не знает" определений из файла Mforex.h. Т.е., например, при вызове функции открытия позиции, нужно указать код операции скажем для Sell - 1, а не OP_SELL и т.д. Более подробно - см. документацию к DevKit, которая описывает формат работы омеги с внешними библиотеками.
Удачи!


Значит я прописал в Омеге следующее:

DefineDLLfunc:"Mforex2.dll", int, "Start"; {вызов ДЛЛ}
_gbp = Start(); {функция старта Терминала}

Но Вы говорите что здесь надо вместо "Start()" прописывать что-то другое, я правильно понял?
 

Значит я прописал в Омеге следующее:

DefineDLLfunc:"Mforex2.dll", int, "Start"; {вызов ДЛЛ}
_gbp = Start(); {функция старта Терминала}

Но Вы говорите что здесь надо вместо "Start()" прописывать что-то другое, я правильно понял?

Сам отвечаю: вместо "Start()" ничего другого прописывать не надо - так правильно, Омега стартует МТ4 без проблем.

Но в Функции открытия позиции немного посложнее значит прописал функцию:

Input: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple),
price(NumericSimple), sl(NumericSimple), tp(NumericSimple);


DefineDLLfunc:"Mforex2.dll", int, "NewPos",char, int, int, double, double, double;

_NewPos = NewPos(Symbol, Order, Lot, price, sl, tp);

Логически всё сходится с описанием производителя, но практически возникают проблемы: всё задаётся в числах...
Причина обращения: