Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 7

 

pisara:

...ИМХО развитие языка написания ТС должно служить именно специфическим задачам торговли, т.е. сбора информации, анализа, тестирования, управления торговлей и интеграции с другими системами - всё это можно и ИМХО нужно делать на высоком уровне современных средств разработки, т.е. интегрируя и расширяя выбранный стандартный framework общепринятыми в нём методами (ООП и тд). Задача не в написании замкнутой и самодостаточной платформы на смеси C/C++ или чего там ещё, а прежде всего качественное написание основ торговой платформы, её сервисов, API и интерфейса пользователя...

Moe IMHO полностью совпадает с вашими ИМХО. Приятно обнаржить единомышленников. У меня MT ассоциируется с пословмцей "дьявол скрывается в мелочах" и есть подозрения в наличии серьезных архитектурных промахов, иначе откуда столько "кирпичей" - "Эй, гражданина! Ты туда не ходи, ты сюда ходи! А то снег башка упадет - совсем мертвый будешь!"

В то же время, надо признать, что MT далеко не самый худший продукт из числа тех, c которыми приходилось иметь дело.

 

Renat писал(а)  :

 

....На сайте MQL4.community уже есть статьи про связку Маткад - МетаТрейдер 4:


Возможно я что то пропустил, или Вы оговорились. Нигде не нашол статью про связь Маткада с MT4. Матлаб да есть. Маткада нет ((

В своё время я заказывал программистам связь МТ4Б<-> Маткад. Единственно приемлемым (устойчивым)  была связь через файловые операции. МТ4 –пишет котировки в файл-Маткад читает-обрабатывает-выкладывает в файл результаты (валюта купить/продать)- МТ4 читает и выполняет. Но иногда по непонятным причинам происходил крах…более 3 месяцев потратили, но так и не смогли решить.

С одной стороны Ваше стремление сделать все в одной упаковке, да хорошо и отлично. Это устойчивость и надежность системы.

Но с другой стороны есть языки программирования Высокого уровня (Матлаб, Маткад) для них уже столько написано, потрачены миллиарды человеко лет. И подключить эту мощь к МТ5 было бы просто великолепно.  Достигнуть уровня этих языков у Вас ни хватит ни сил, ни возможностей… 

З.Ы. Хочу обратить Ваше внимание, что оба этих языка заточены на работу с массивами (матричная алгебра), именно то что нужно …

 
Prival:

Возможно я что то пропустил, или Вы оговорились. Нигде не нашол статью про связь Маткада с MT4. Матлаб да есть. Маткада нет ((

Да, я перепутал Маткад и Матлаб. Извините.


В своё время я заказывал программистам связь МТ4Б<-> Маткад. Единственно приемлемым (устойчивым)  была связь через файловые операции. МТ4 –пишет котировки в файл-Маткад читает-обрабатывает-выкладывает в файл результаты (валюта купить/продать)- МТ4 читает и выполняет. Но иногда по непонятным причинам происходил крах…более 3 месяцев потратили, но так и не смогли решить.

Попробуйте сделать связку с MQL5 - это более мощный, эффективный и защищенный язык.

Чтобы получить хороший результат, можно запустить публичную открытую работу над интеграцией Маткада с МТ5. Так и ошибки быстро можно исправить и результата рабочего добиться.

 
Renat писал(а)  :
Да, я перепутал Маткад и Матлаб. Извините.


Попробуйте сделать связку с MQL5 - это более мощный, эффективный и защищенный язык.

Чтобы получить хороший результат, можно запустить публичную открытую работу над интеграцией Маткада с МТ5. Так и ошибки быстро можно исправить и результата рабочего добиться.

Можно многое, но в первую очередь я думаю именно Вы должны быть заинтересованы в таких проектах (просто представьте как увеличиться ваша аудитория и  форекс и биржа + пишу программы на стандартном матлабе  ).

А публичная, открытая, и т.д. работа мне уже давно не интересна. Я слишком ценю свое время. Надоело наступать на грабли, типа таких

 

//+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine(string nm="", datetime t1=0, color cl=Red)
  {
  if (t1<=0) return; //t1=Time[0];
  if (ObjectFind(0,nm)<0) ObjectCreate(0, nm, OBJ_VLINE, 0, t1, 2);
  else Print("Ошибка создания SetVLine ",nm," ",GetLastError()," t1=",t1);
  
  ObjectSetInteger(0, nm, OBJPROP_COLOR, cl);
  ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_DOT);
  ObjectSetInteger(0, nm, OBJPROP_BACK, true);        // рисовать как фон
  ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false); // запретить выделение объекта мышкой
  }

как эта процедура может выдавать вот такое ?

2010.05.06 02:28:14   Setka_Final_1 (EURUSD,M5)            Ошибка создания SetVLine  VLine_838524   4202  t1= 2010.05.06 00:00:00

Бред получается

ERR_OBJECT_NOT_FOUND

4202

Графический объект не найден

 

Если объект не найден. Программа должна была его создать. Но объект есть if(…) почему же тогда выдается 4202.

Наверное я просто устал и пора ложиться спать.

 

 

To Prival .

Если Вы сформулируете достаточно интересную задачу с применением МатКада (для начала не очень сложную), то уверен, что найдутся спецы, которые захотят присоединиться к решению данной задачи. 

 
Prival:

2010.05.06 02:28:14   Setka_Final_1 (EURUSD,M5)            Ошибка создания SetVLine  VLine_838524   4202  t1= 2010

Если объект не найден. Программа должна была его создать. Но объект есть if(…) почему же тогда выдается 4202.

Ошибка осталась от предыдущего вызова функции. Используйте ResetLastError()
 


День добрый! К слову о передачи строк в функции из DLL

Имею след. код:

#include <WinUser32.mqh>

#import "mt4excel.dll"

bool  ExcelOpen();//Открывает Excel и создает чистую страницу  

bool  ExcelSetTextCell(int X,int Y,char Value[]);//Записать текст в ячейку

/*

 others cut

*/ 

#import

 void OnTick()

  {

  MqlRates rates []; 

  int copied=CopyRates("EURUSD",PERIOD_M1,0,1,rates);

   ExcelSetTextCell(1,1,"Tool");

        ExcelSetTextCell(2,1,"EURUSD");        

        ExcelSetValueCell(2,2,rates[0].close);

  }

 Как и говорилось, в Excel отображается только первая буква из передаваемых туда с помощью ExcelSetTextCell. После прочтения этой нитки, я понял в чем причина, но не совсем пойму как добиться того, что нужно. Дело в том, что DLL писал не я, это библиотека функций для работы с Excel через MT4. По понятым причинам MT5 кидает туда указатель на строку, где лежит лишь первый символ. Вопрос в том, как можно заставить MT5 передать туда то, что нужно, если у меня нет возможность править исходный код DLL? Ведь насколько я догоняю, нужно в самой DLL в коде каждой функции дописать нечтно вроде

_DLLAPI void __stdcall demo(char *stream, char *buf){ buf=stream;} 

Буду признателен за коментарии разработчиков MT5 

Спасибо! 

 

ns_k, не забывайте, что строки в MQL5 - юникодные.

Возможны 2 решения.

1. Переделать (доделать) dll для приёма юникодных строк

2. Самому конвертировать строку в массив

 
stringo:

ns_k, не забывайте, что строки в MQL5 - юникодные.

Возможны 2 решения.

1. Переделать (доделать) dll для приёма юникодных строк

2. Самому конвертировать строку в массив

Второе решение мне подходит. Скажите, я видимо тогда должен и объявление фукнции изменить? Т.е. вместо

 

bool  ExcelSetTextCell(int X,int Y, string Value);//Записать текст в ячейку

я должен написать объявление где третим параметром будет массив? Если да, как это сделать не пойму. Спасибо! 

 

updated: разобрался все же, чуть подумать надо было. Спасибо за помощь!! 

 

Объявление функции DLL

bool ExcelSetTextCell(int X,int Y, uchar& Value[]);
Вызов функции DLL
//--- объявляем массив символов
uchar value[];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray("EURUSD", value);
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell(2,1,value);
Причина обращения: