Как оформить взаимодействие Adviser <-> DLL?

 
Хочу сделать DLL и уже в ней анализировать котировку очередную и также отдавать результат обработки в советник. Вот пока думаю как это красивее сделать. Думаю надо зациклить функцию в советнике и вызвать функцию processQuote в DLL
Например в общих чертах так
start() {
 
  while (true) {
     res = processQuote(inputStruct, outputStruct);
     if(res == 1) 
         break;
     if(res == 0) {
         if(!newDataNeeded(outputStruct))
            break;
         putRequestedDataToInputStruct(outputStruct, inputStruct);
         continue;
     } 
  }
 
  drawDataOnChart(outputStruct);
  makeOrder(outputStruct);
 
}
 
A в DLL уже написать функцию processQuote

Может быть кто то предложить другой подход для взаимодействия советника и длл?

И думаю было бы не плохо предоставить советникописателям также возможность написать свои пользовательские оптимизаторы
и прикрутить их через DLL к MT Хотя это можно и сейчас сделать но не через кнопочку в тестере.

Вообще, опасаюсь того что MT может запретить внешние DLL в будущем как она это сделала уже с API. Хотя с апи понятно зачем они это сделали чтобы защитить своего клиента но внешние DLL не стоит :) Наоборот добавить возможности расширения через plugins

 
Если зацикливаете эксперта, то про тестер стратегий надо забыть.
Не нужно зацикливать эксперта - это неправильный подход, приносящий только проблемы.
 
Да точно зацикливание надо бы убрать можно просто сразу в длл передать инфы много через структуру и с недостающими котировками, если например был разрыв связи или др непредвиденое событие и стратегия должна снать квоты пропущенные.
Если бы в эксперте были функции, которые можно было сразу вызывать из DLL то был бы этому очень рад.
Например возможность передать в функцию длл указатель на функцию эксперта. Тогда например отрисовку на чарте я мог бы далать срузу из DLL и прочее.

Сделаю тогда так:

start() {
 
    if(processQuote(inputStruct, outputStruct)) {
        drawDataOnChart(outputStruct);
        makeOrder(outputStruct);
    }
 
}
 
elritmo, почитай вот про зацикливание 'Синхронизация работы экспертов, скриптов и индикаторов' Очень классная статья. Хотя на мой взгляд великоватая и сложноватая. По поводу взаимодействия dll с экспертом - самый на мой взгляд лучший способ это приказы. Приказ dll кидает в виде текстовой строки например в какой-то буфер. Эксперт его от туда достает, анализирует и исполняет. Так что работать все будет примерно так:

start()
{
котировка=ПолучитьКотировку();
ОтправитьКотировкуВdll(котировка);
ВыполнитьПриказ();
}

Как видишь, всё работает потиково. Никакого зацикливания в эксперте нет.
 

Да я подумал что надо вотадвать в длл буфер и дурие исходные данные через структуру ну и оптом получать струкутрыу с информацией что отрисовать вывести в лог и какие приказы исполнить.
а моё зацикливанеи то оно не так страшно впринципе если корескно написать там же етсь break.
поудмал сначала о зацикливании чтобы длл запрашивала какие то дополнительные данные если потребуется. Нео сейчас и сам думаю это такое узкое место потом замучаешься отлаживать и почему подвисает. Спасибо за ответы. будем рабоать но оператора while
статью прочту спасибо что указали на неё

 
Извиняюсь за оффтопик... elritmo, Вы случайно не брат Merabiko ?
 
:)
 
Better писал (а):
Извиняюсь за оффтопик... elritmo, Вы случайно не брат Merabiko ?

мерабико звучит по грузински :) не знаю такого
 
elritmo, а зачем Вам вообще связываться с длл, чего Вам не хватило в MQL4 если не секрет?
 
Jhonny писал (а):
elritmo, а зачем Вам вообще связываться с длл, чего Вам не хватило в MQL4 если не секрет?

Ну Ренат приводил сравнительное тестирование скорости и код написанный на си в 17 раз быстрее чем на MQL4 так почему же не вызвать просто функцию из DLL (она один раз загрузится и будет сидеть в памяти и скорость вызова функции из длл будет большая ну и её выполнение быстрее елс исоветник станет со временем сложный с кучей проверок и сравнений). А когда будет проводиться оптимизация, то эта разница между кодом на MQL4 и С++ в миллисекундах будет накапливаться.
Во вторых, есть отладчик в вижуал си а в MQL4 редакторе нет.
Потом в MSVC или Delphi можно свободно создавать различные модули с разным namespace. В MQL4 я помнится хотел написать библиотеку, но одна включалась в основной модуль - то есть названия функций и переменный в разных модулях одинаковые мне не удавалось написать.
Ну и редактор в вижуал студии мне больше нравится.
 
elritmo, главное правило использования dll - делай на них то, что иначе сделать либо вовсе не получится, либо получится очень плохо.
Я сам например сейчас пишу dll для работы с сокетами TCPIP. Средствами mql4 этого сделать нельзя. Имеет это смысл делать, если в твоем роботе используются какие-то очень громоздкие вычисления. Можно использовать dll, как гнусный и корявый, но все-таки способ, подключиться к отладчику. Наконец, если ты работаешь в каком-то крупном инвестиционном фонде, и твое начальство вдруг решило развлечься форексом, есть смысл писать всю торговую систему на С или Java, просто чтобы не зависить от продуктов Metaquotes. Например на случай, если вы выберете буржуйского брокера, не использующего МТ4. Во всех остальных случаях особого смысла в использовании dll я не вижу. Кстати зря ты редактор ругаешь. На мой взгляд он исключительно удобен. Ни чуть не хуже, чем в студии.