Как оформить взаимодействие Adviser <-> DLL?
Не нужно зацикливать эксперта - это неправильный подход, приносящий только проблемы.
Если бы в эксперте были функции, которые можно было сразу вызывать из DLL то был бы этому очень рад.
Например возможность передать в функцию длл указатель на функцию эксперта. Тогда например отрисовку на чарте я мог бы далать срузу из DLL и прочее.
Сделаю тогда так:
start() { if(processQuote(inputStruct, outputStruct)) { drawDataOnChart(outputStruct); makeOrder(outputStruct); } }
start()
{
котировка=ПолучитьКотировку();
ОтправитьКотировкуВdll(котировка);
ВыполнитьПриказ();
}
Как видишь, всё работает потиково. Никакого зацикливания в эксперте нет.
Да я подумал что надо вотадвать в длл буфер и дурие исходные
данные через структуру ну и оптом получать струкутрыу с информацией
что отрисовать вывести в лог и какие приказы исполнить.
а моё зацикливанеи то оно не так страшно впринципе если корескно
написать там же етсь break.
поудмал сначала о зацикливании чтобы длл запрашивала какие
то дополнительные данные если потребуется. Нео сейчас и сам
думаю это такое узкое место потом замучаешься отлаживать и
почему подвисает. Спасибо за ответы. будем рабоать но оператора
while
статью прочту спасибо что указали на неё
elritmo, а зачем Вам вообще связываться с длл, чего Вам не хватило в MQL4 если не секрет?
Ну Ренат приводил сравнительное тестирование скорости и код написанный на си в 17 раз быстрее чем на MQL4 так почему же не вызвать просто функцию из DLL (она один раз загрузится и будет сидеть в памяти и скорость вызова функции из длл будет большая ну и её выполнение быстрее елс исоветник станет со временем сложный с кучей проверок и сравнений). А когда будет проводиться оптимизация, то эта разница между кодом на MQL4 и С++ в миллисекундах будет накапливаться.
Во вторых, есть отладчик в вижуал си а в MQL4 редакторе нет.
Потом в MSVC или Delphi можно свободно создавать различные модули с разным namespace. В MQL4 я помнится хотел написать библиотеку, но одна включалась в основной модуль - то есть названия функций и переменный в разных модулях одинаковые мне не удавалось написать.
Ну и редактор в вижуал студии мне больше нравится.
Я сам например сейчас пишу dll для работы с сокетами TCPIP. Средствами mql4 этого сделать нельзя. Имеет это смысл делать, если в твоем роботе используются какие-то очень громоздкие вычисления. Можно использовать dll, как гнусный и корявый, но все-таки способ, подключиться к отладчику. Наконец, если ты работаешь в каком-то крупном инвестиционном фонде, и твое начальство вдруг решило развлечься форексом, есть смысл писать всю торговую систему на С или Java, просто чтобы не зависить от продуктов Metaquotes. Например на случай, если вы выберете буржуйского брокера, не использующего МТ4. Во всех остальных случаях особого смысла в использовании dll я не вижу. Кстати зря ты редактор ругаешь. На мой взгляд он исключительно удобен. Ни чуть не хуже, чем в студии.
Например в общих чертах так
Может быть кто то предложить другой подход для взаимодействия советника и длл?
И думаю было бы не плохо предоставить советникописателям также возможность написать свои пользовательские оптимизаторы
и прикрутить их через DLL к MT Хотя это можно и сейчас сделать но не через кнопочку в тестере.
Вообще, опасаюсь того что MT может запретить внешние DLL в будущем как она это сделала уже с API. Хотя с апи понятно зачем они это сделали чтобы защитить своего клиента но внешние DLL не стоит :) Наоборот добавить возможности расширения через plugins