Можно пару ссылок почитать про этот atcl чтобы не рыться во всём подряд, а более целенаправленно ознакомиться с темой.
главные ссылки на библиотеку-интегратор к MT4 (ту самую которую кую упорно) это вот текущая тема, плюс упомянутый в топике http://luxtrade.tk/atcl:start (исторически мой сайт, который в вечном беспорядке :-) )
Как язык и скриптовая платформа, Tcl мягко говоря проверен временем - первый релиз в 1990г, на сей момент в Linux/UNIX присутствует де-факто, сейчас уже и под под Android. 98% что в некоем урезанном виде он у вас на машине есть - python,ruby,R,maxima,octave и прочие используют его для GUI (tkinter тот же)
PS. надеюсь не грохнут пост и меня заодно за обилие ссылок ? Это всё бесплатно.
PPS. Для местных оутсорсеров - есть ещё "вкусный" баунти https://github.com/flightaware/Tcl-bounties. Но там остались только непростые задачи от 2500USD и там жёстская дисциплина.
До любого обращения к ATcl должна быть вызвана функций ATcl_OnInit() и в завершении скрипта/индикатора/советника ATcl_OnDeinit(const int reason). Между вызовами этих двух функций возможны обращения ко всем прочим функциям библиотеки. При разработке советников и индикторов также рекомендуется вызывать функции ATcl_OnEvent(..) ATcl_OnTimer...
при помощи некоторых заплат и такой-то матери, вот такое вот получается :
хотя это и сильно-сильно эксперимент и даже в текущую версию я пока не буду включать патч позволяющий запускать Tk (во первых рано, других глюков полно, во вторых он сделан под пиво, надо пересмотреть потом)
зато видно что в итоге хочется получить и есть уверенность что технически это возможно. Да,да возможен ещё и полноценный скриптуемый GUI.
кстати, местным GUI-строителям, окошко (то которое с альфа каналом) с избытком описывается вот так (это tcl) :
Несколько привёл в порядок файлы - теперь в ZIPе они разложены по папкам Indicators, Scripts, Experts,Libraries,Include и по идее для установки библиотеки достаточно просто распаковать архив внутрь каталога данных и всё должно встать на свои места и быть готовым к работе (разве что ещё сам Tcl надо поставить :-) ).
Предоставляемое API вот такое вот :
class ATcl {
protected:
Tcl_Interp interp;
public:
ATcl(bool safe=false); // создание нового инерпретатора
ATcl(Tcl_Interp); // создание объекта из готового интерпретатора
Tcl_Interp CreateSlave(string name,bool safe=false); // создать дочерный интерпретатор
Tcl_Interp CreateSlave(Tcl_Obj name,bool safe=false);
Tcl_Interp Interp(); // получить интерпретатор (например для вызова Tcl C API)
~ATcl();
bool Ready(); // =true если можно исполнять командыint Update(); // запустить проход EventLoop// MQL specific handlersintOnInit();
voidOnDeinit(constint reason);
voidOnTimer();
voidOnChartEvent();
voidOnChartEvent(constint id,constlong lparam,constdouble dparam,conststring sparam);
// Objects
Tcl_Obj Obj(); // создать пустой временный объект
Tcl_Obj Ref(Tcl_Obj obj); // увеличить счётчик ссылок
Tcl_Obj Unref(Tcl_Obj obj);// уменьшить счётчик ссылок, удалить объект при обнуленииint Shared(Tcl_Obj obj); // =true если объект зашарен и не может быть изменнён
Tcl_Obj Clone(Tcl_Obj obj);// дублировать объект/////////////////////////////// // Исполнение команд и скриптов///////////////////////////////// методы возвращают код реультата: (стандартные коды: TCL_OK - успех, TCL_ERROR, TCL_BREAK,TCL_CONTINUE)// и сохраняют объект-"результат", который можно потом получить методоми Result(),StringResult(),...// Флаги: TCL_EVAL_GLOBAL - исполнять на глобальном уровне, TCL_EVAL_DIRECT - исполнять сразу, без компиляцииint Eval(string script,int flags=0);
int Eval(Tcl_Obj script,int flags=0);
Tcl_Obj ObjEval(string script,int flags=0); // simplified - Eval and return Result as Tcl_Obj
Tcl_Obj ObjEval(Tcl_Obj script,int flags=0);
int Call(Tcl_Obj &objv[],int flags=0);
int Call(Tcl_Obj obj1,Tcl_Obj obj2=0,Tcl_Obj obj3=0,Tcl_Obj obj4=0,Tcl_Obj obj5=0,Tcl_Obj obj6=0,Tcl_Obj obj7=0,Tcl_Obj obj8=0,Tcl_Obj obj9=0,Tcl_Obj obj10=0,Tcl_Obj obj11=0);
Tcl_Obj ObjCall(Tcl_Obj &objv[],int flags=0);// simplified - Call and return Result as Tcl_Obj
Tcl_Obj ObjCall(Tcl_Obj obj1,Tcl_Obj obj2=0,Tcl_Obj obj3=0,Tcl_Obj obj4=0,Tcl_Obj obj5=0,Tcl_Obj obj6=0,Tcl_Obj obj7=0,Tcl_Obj obj8=0,Tcl_Obj obj9=0,Tcl_Obj obj10=0,Tcl_Obj obj11=0);
Tcl_Obj Result(int ignoreThis=0); // получить объект-результатint ResetResult(); // сбросить(обнулить) результат////////////////////////////////////////// Source - чтение и исполнение скриптов//////////////////////////////////////// // use : Eval("source filename.tcl") оr Call("source","filename.tcl");// int Source(const string fileName,const string encoding="");// int Source(Tcl_Obj fileName,Tcl_Obj encoding=0);/////////////////// List - Списки/////////////////
Tcl_Obj ListIndex(Tcl_Obj obj,int index=0);
int ListLength(Tcl_Obj obj); // =кол-во элементов спискаint Count(Tcl_Obj obj); // синонимint ListAppend(Tcl_Obj list,Tcl_Obj element); // добавить эл-т к списку. список должен быть !Shared()int Append(Tcl_Obj list,Tcl_Obj element); // синоним/////////////////////////////////////////// Set: задать объект-значение переменной/////////////////////////////////////////// аналог в tcl: set var $value ; set hash($key) $value
Tcl_Obj Set(Tcl_Obj var,Tcl_Obj value);
Tcl_Obj Set(Tcl_Obj hash,Tcl_Obj key,Tcl_Obj value);
Tcl_Obj Set(string var,Tcl_Obj value);
Tcl_Obj Set(string hash,string key,Tcl_Obj value);
///////////////////////////////////////////// Get: получить значение переменной в виде объекта//////////////////////////////////////////// аналог в tcl: set var ; set hash($key)
Tcl_Obj Get(Tcl_Obj var);
Tcl_Obj Get(Tcl_Obj hash,Tcl_Obj key);
Tcl_Obj Get(string var);
Tcl_Obj Get(string hash,string key);
// IsSet: проверить существование переменнойint IsSet(Tcl_Obj var);
int IsSet(Tcl_Obj hash,Tcl_Obj key);
int IsSet(string var);
int IsSet(string hash,string key);
// IsArray - проверить что hash это действительно хеш :-)int IsArray(Tcl_Obj hash);
int IsArray(string hash);
// Unset: удалить переменную или элемент хешаint Unset(Tcl_Obj var);
int Unset(Tcl_Obj hash,Tcl_Obj key);
int Unset(string var);
int Unset(string hash,string key);
// Link: связать скалярную переменную с элементом массиваint Link(double &arr[],int pos,Tcl_Obj hash,Tcl_Obj key=0);
int Link(double &arr[],int pos,string hash,string key="");
// Unlink: разорвать свзяьint Unlink(Tcl_Obj hash,Tcl_Obj key=0);
int Unlink(string hash,string key="");
//////////////////////////// Double
Tcl_Obj Obj(double); // создать объект из double
Tcl_Obj Obj(constdouble &arr[],int pos=0,int count=WHOLE_ARRAY); // создать объект из массива doubledouble Double(Tcl_Obj); // конвертировать объект в doubledouble Double(Tcl_Obj,int index); // получить эл-т списка как double double DoubleResult(int ignoreThis=0); // получить последний результат как double// упрощенный доступ к Call,Eval // исполнить скрипт и срузу получить результат как double (0 при ошибке)double DoubleEval(string script,int flags=0);
double DoubleEval(Tcl_Obj script,int flags=0);
// вызвать команду и сразу получить результат как doubledouble DoubleCall(Tcl_Obj command,Tcl_Obj arg1=0,Tcl_Obj arg2=0,Tcl_Obj arg3=0,Tcl_Obj arg4=0,Tcl_Obj arg5=0,Tcl_Obj arg6=0,Tcl_Obj arg7=0,Tcl_Obj arg8=0,Tcl_Obj arg9=0,Tcl_Obj arg10=0);
double DoubleCall(Tcl_Obj &objv[],int objc=WHOLE_ARRAY);
///////////////////////////// String
Tcl_Obj Obj(string);
Tcl_Obj Obj(conststring &arr[],int pos=0,int count=WHOLE_ARRAY);
string String(Tcl_Obj);
string String(Tcl_Obj,int index);
string StringResult(int ignoreThis=0);
string StringEval(string script,int flags=0);
string StringEval(Tcl_Obj script,int flags=0);
string StringCall(Tcl_Obj command,Tcl_Obj arg1=0,Tcl_Obj arg2=0,Tcl_Obj arg3=0,Tcl_Obj arg4=0,Tcl_Obj arg5=0,Tcl_Obj arg6=0,Tcl_Obj arg7=0,Tcl_Obj arg8=0,Tcl_Obj arg9=0,Tcl_Obj arg10=0);
string StringCall(Tcl_Obj &objv[],int objc=WHOLE_ARRAY);
///////////////////////////// Long
Tcl_Obj Obj(long);
Tcl_Obj Obj(constlong &arr[],int pos=0,int count=WHOLE_ARRAY);
long Long(Tcl_Obj);
long Long(Tcl_Obj,int index);
long LongResult(int ignoreThis=0);
long LongEval(string script,int flags=0);
long LongEval(Tcl_Obj script,int flags=0);
long LongCall(Tcl_Obj command,Tcl_Obj arg1=0,Tcl_Obj arg2=0,Tcl_Obj arg3=0,Tcl_Obj arg4=0,Tcl_Obj arg5=0,Tcl_Obj arg6=0,Tcl_Obj arg7=0,Tcl_Obj arg8=0,Tcl_Obj arg9=0,Tcl_Obj arg10=0);
long LongCall(Tcl_Obj &objv[],int objc=WHOLE_ARRAY);
///////////////////////////// Datetime
Tcl_Obj Obj(datetime);
Tcl_Obj Obj(constdatetime &arr[],int pos=0,int count=WHOLE_ARRAY);
datetime Datetime(Tcl_Obj);
datetime Datetime(Tcl_Obj,int index);
datetime DatetimeResult(int ignoreThis=0);
datetime DatetimeEval(string script,int flags=0);
datetime DatetimeEval(Tcl_Obj script,int flags=0);
datetime DatetimeCall(Tcl_Obj command,Tcl_Obj arg1=0,Tcl_Obj arg2=0,Tcl_Obj arg3=0,Tcl_Obj arg4=0,Tcl_Obj arg5=0,Tcl_Obj arg6=0,Tcl_Obj arg7=0,Tcl_Obj arg8=0,Tcl_Obj arg9=0,Tcl_Obj arg10=0);
datetime DatetimeCall(Tcl_Obj &objv[],int objc=WHOLE_ARRAY);
};
вроде довольно компактно и удобно.
упомянутый zip-архив прилагаю, если вдруг кому-то понадобиться и возникнут проблемы при установке пишите тут или в личку
Кратко возможности которые посредством ATcl теперь легко доступны из MT4 :
Возможности Tcl
simple - простой скриптовый язык
portable - наработанные скрипты и алгоритмы вы можете использовать в любой системе (Windows,Linux,Android и прочие)
event driven - внутренняя событийная модель
object orientation - все возможности современного ООП
threading - вы можете использовать все возможности многопоточного программирования - системные нити, мутексы, условные переменные, разделяемые переменные с возможностью постоянного хранения.
virtual file system - прозрачный доступ к zip,tar,ftp,webdav как к файловой системе
database - унифицированный интерфейс tdbc и sqlite входят в ядро tcl. Активно поддерживаются PostresSQL,MySQL,MonetDB, Oracle и любые ODBC базы.
networking - клиент/сервер: tcp,http,mail,websocket,zmq. Практически любые протоколы и службы которые вам могут понадобиться.
cryptography - контрольные суммы, электронные подписи, крипто-хеши. Симметричное и ассиметричное шифрование. Поддержка инфраструктуры открытых ключей, TLS,SASL
windows - средства для работы в среде windows - registry, DDE, COM клиент/сервер, ldap клиент
tcllib - Стандартная библиотека Tcl предоставляет дополнительные возможности (программные средства, обработка текста, математика и статистика и многое другое)
c/c++ - Компилятор TinyC входит в состав библиотек, а пакет Critcl позволяет использовать системный компилятор C/C++ (vc,gcc,clang). Модули и функции можно компилировать и использовать «на лету»
most known - многие библиотеки и системы предоставляют Tcl API, вы легко можете их использовать в своих программах
Рад представить вам библиотеку ATcl v1 beta - интерпретатор Tcl для MT4. Безграничные возможности расширения и интеграции программ MT4 Расширяйте возможности ваших программ MQL, используйте СУБД, дополняйте сетевыми средствами, интегрируйте их с любыми программами используя Tcl. threading - вы можете использовать все возможности...
Было бы полезно сделать несколько практических примеров, по аналогии с тем, что есть в кодобазе и статьях. Например, связь с MySQL, Telegram или просто коннект двух терминалов через TCP.
Было бы полезно сделать несколько практических примеров, по аналогии с тем, что есть в кодобазе и статьях. Например, связь с MySQL, Telegram или просто коннект двух терминалов через TCP.
в демах (в архиве):
- скрипт сохраняющий котировки в базу SQLite. Для MySQL всё так-же, просто он не у всех-же на машине есть :-)
- tcp сервер в виде индикатора и советника (два варианта) - после запуска принимает подключения на порт 8000 (можно задать в настройках при старте) и транслирует туда поступающие тики. Можно подключиться telnet ом и посмотреть
- индикатор http клиент, который периодически идёт на этот сайт, берёт страницу jobs, парсит её и выдаёт краткую информацию в чарт в виде Comment
демки конечно будут пополняться, можете предлагать идеи.
по ходу дела наверное сделаю демки иллюстрирующие
- "веб-сервер", показать что можно использовать броузер,и как это делается
- использование TSV (thread shared variables), расширенный аналог GlobalVariable - использование общих данных в приложениях
к ним надо ещё сценарии придумать :-) чтобы было понятно, кратко и хотя-бы немного полезно.
Был тут довольно увлекательный диалог по скайпу, некоторое оттуда считаю нужным озвучить, потому как считаю полезным :-)
1. Почему какой-то Tcl а не гораздо более популярные Python, Ruby
конечно во первых потому как я его хорошо знаю и использую не только для трейдинга. И немаловажен технологический момент - Python и Ruby не совместимы с threading-model метатрейдера. В теории их можно запустить, но надо или выкапывать очень низкий API или пачить сам язык.То-же относится к R и многим другим. Чтобы подобные работали необходимо соблюсти условие "в рамках одного процесса и одной нити может независимо создаваться несколько изолированных инстансов". Из известных мне скриптовых языков разве что ещё Lua такое умеет, но это сами понимаете, "язык без стандартов".. Кстати выделенное жирным шрифтомнеобходимо соблюдать всем разработчикам DLL в своих изделиях
2. Как правильно и быстро обсчитать данные
Правильно и быстро - этопроводить расчёты в metatrader. Он собственно для этого и сделан - получить данные, провести расчёты, выдать приказы. Глупо дублировать его возможности в своих DLL. В конце концов сам по себе MQL довольно похож на C++ и для программиста начать на нём писать - дело одного-двух дней. А в DLL надо делать то что платформа не охватывает и охватить физически не может - связь с базами, сервисами, интегрирование и прочее. И плюс то что может и должно по замыслу использоваться вне MetaTrader.
3. Где и когда версия для 5-ки
Как только, так сразу :-) Технически перетащить DLL из 4-ки в 5-ку несложно вообще, а скриптам всё равно. Tcl он и 32 и 64 бита. Но вести разработку на 4-ке гораздо удобнее, её не трогают :-) она стабильна и сюрпризов не предвидится. А вот с 5-кой предвидится, разработчики платформы обещают "сервисные задачи" (наравне с индикаторами, скриптами и советниками) и наверняка что-то в отношениях DLL и нитей будет меняться несколько билдов подряд. Вот пока это не устаканется, версии для 5-ки не будет.
В процессе эксплуатации и по отзывам пользователей были выявлены проблемы связанные с зависимостями DLL от msvcrt и мелкий (мой ) баг с поиском той-же DLL. В хидере ATcl.mqh были прописаны относительные пути :-)
всё исправлено, можете взять исправленную версию (прикладываю), инструкция по установке - на традиционном месте http://luxtrade.tk/atcl:install
Для разработчиков DLL, нелишняя информация о проделанных манипуляциях:
- DLL компилируется с дефайном -D_CRTIMP_ALTERNATIVE который заставляет компилятор "инлайнить" почти всё что можно из CRT :-)
- DLL собирается теперь с ключом /MT что заставляет линкер использовать статическую линковку и не пораждать лишние зависимости. Redistributable (пакет поддержки VC) вроде как больше не надо таскать с собой повсюду
размер DLL-ки вырос, но зависимостей поубавилось и должно быть проще таскать библиотеку
PS/ небольшой апдейт - поменял прикреплённый архив. Библиотека собрана с полной поддержкой multithread
ATcl является библиотекой-интегратором и поэтому в первую очередь нужен сам по себе Tcl. Tcl свободно доступен и не имеет лицензионных отягощений (лицензии как правило BSD-like). Для работы с MT4 вам потребуется 32-х битная (это важно! MT4 32-х битный...
а кто будет контроллировать пайпы, реализовывать протокол и разбирать результаты ? это долго, медленно и только опросами.
Можно пару ссылок почитать про этот atcl чтобы не рыться во всём подряд, а более целенаправленно ознакомиться с темой.
Можно пару ссылок почитать про этот atcl чтобы не рыться во всём подряд, а более целенаправленно ознакомиться с темой.
главные ссылки на библиотеку-интегратор к MT4 (ту самую которую кую упорно) это вот текущая тема, плюс упомянутый в топике http://luxtrade.tk/atcl:start (исторически мой сайт, который в вечном беспорядке :-) )
сам по себе Tcl(корневой сайт) : http://www.tcl.tk
wiki: http://wiki.tcl.tk
"стандартная библиотека" : https://core.tcl.tk/tcllib/doc/tcllib-1-18/embedded/www/toc.html (ссылка на доки, наверное они в первую очередь интересны)
На сей момент ведущий дистрибьютер ActiveState : https://www.activestate.com/activetcl ,
Им "на пятки наступают" MagicSplat http://www.magicsplat.com/ и IronTcl https://irontcl.com/
Как язык и скриптовая платформа, Tcl мягко говоря проверен временем - первый релиз в 1990г, на сей момент в Linux/UNIX присутствует де-факто, сейчас уже и под под Android. 98% что в некоем урезанном виде он у вас на машине есть - python,ruby,R,maxima,octave и прочие используют его для GUI (tkinter тот же)
PS. надеюсь не грохнут пост и меня заодно за обилие ссылок ? Это всё бесплатно.
PPS. Для местных оутсорсеров - есть ещё "вкусный" баунти https://github.com/flightaware/Tcl-bounties. Но там остались только непростые задачи от 2500USD и там жёстская дисциплина.
С мыслями о будущем:
при помощи некоторых заплат и такой-то матери, вот такое вот получается :
хотя это и сильно-сильно эксперимент и даже в текущую версию я пока не буду включать патч позволяющий запускать Tk (во первых рано, других глюков полно, во вторых он сделан под пиво, надо пересмотреть потом)
зато видно что в итоге хочется получить и есть уверенность что технически это возможно. Да,да возможен ещё и полноценный скриптуемый GUI.
кстати, местным GUI-строителям, окошко (то которое с альфа каналом) с избытком описывается вот так (это tcl) :
Несколько привёл в порядок файлы - теперь в ZIPе они разложены по папкам Indicators, Scripts, Experts,Libraries,Include и по идее для установки библиотеки достаточно просто
распаковать архив внутрь каталога данных и всё должно встать на свои места и быть готовым к работе (разве что ещё сам Tcl надо поставить :-) ).
Предоставляемое API вот такое вот :
вроде довольно компактно и удобно.
упомянутый zip-архив прилагаю, если вдруг кому-то понадобиться и возникнут проблемы при установке пишите тут или в личку
крышесносящий пример
"компиляция на лету и использование C/C++ из ATcl внутри скрипта MQL"
Ну что-ж , принимаю поздравления с бетой ! :-)
Кратко возможности которые посредством ATcl теперь легко доступны из MT4 :
Возможности Tcl
simple - простой скриптовый язык portable - наработанные скрипты и алгоритмы вы можете использовать в любой системе (Windows,Linux,Android и прочие) event driven - внутренняя событийная модель object orientation - все возможности современного ООП threading - вы можете использовать все возможности многопоточного программирования - системные нити, мутексы, условные переменные, разделяемые переменные с возможностью постоянного хранения. virtual file system - прозрачный доступ к zip,tar,ftp,webdav как к файловой системе database - унифицированный интерфейс tdbc и sqlite входят в ядро tcl. Активно поддерживаются PostresSQL,MySQL,MonetDB, Oracle и любые ODBC базы. networking - клиент/сервер: tcp,http,mail,websocket,zmq. Практически любые протоколы и службы которые вам могут понадобиться. cryptography - контрольные суммы, электронные подписи, крипто-хеши. Симметричное и ассиметричное шифрование. Поддержка инфраструктуры открытых ключей, TLS,SASL windows - средства для работы в среде windows - registry, DDE, COM клиент/сервер, ldap клиент tcllib - Стандартная библиотека Tcl предоставляет дополнительные возможности (программные средства, обработка текста, математика и статистика и многое другое) c/c++ - Компилятор TinyC входит в состав библиотек, а пакет Critcl позволяет использовать системный компилятор C/C++ (vc,gcc,clang). Модули и функции можно компилировать и использовать «на лету» most known - многие библиотеки и системы предоставляют Tcl API, вы легко можете их использовать в своих программах
более полно в местом блоге: https://www.mql5.com/ru/blogs/post/715411 (который никто не читает :-))и на странице проекта http://luxtrade.tk/atcl:start
Рад буду ответить на любые вопросы по теме, выслушаю идеи и замечания.
Поздравляю!
Было бы полезно сделать несколько практических примеров, по аналогии с тем, что есть в кодобазе и статьях.
Например, связь с MySQL, Telegram или просто коннект двух терминалов через TCP.
Поздравляю!
Было бы полезно сделать несколько практических примеров, по аналогии с тем, что есть в кодобазе и статьях.
Например, связь с MySQL, Telegram или просто коннект двух терминалов через TCP.
в демах (в архиве):
- скрипт сохраняющий котировки в базу SQLite. Для MySQL всё так-же, просто он не у всех-же на машине есть :-)
- tcp сервер в виде индикатора и советника (два варианта) - после запуска принимает подключения на порт 8000 (можно задать в настройках при старте) и транслирует туда поступающие тики. Можно подключиться telnet ом и посмотреть
- индикатор http клиент, который периодически идёт на этот сайт, берёт страницу jobs, парсит её и выдаёт краткую информацию в чарт в виде Comment
демки конечно будут пополняться, можете предлагать идеи.
по ходу дела наверное сделаю демки иллюстрирующие
- "веб-сервер", показать что можно использовать броузер,и как это делается
- использование TSV (thread shared variables), расширенный аналог GlobalVariable - использование общих данных в приложениях
к ним надо ещё сценарии придумать :-) чтобы было понятно, кратко и хотя-бы немного полезно.
Был тут довольно увлекательный диалог по скайпу, некоторое оттуда считаю нужным озвучить, потому как считаю полезным :-)
1. Почему какой-то Tcl а не гораздо более популярные Python, Ruby
конечно во первых потому как я его хорошо знаю и использую не только для трейдинга. И немаловажен технологический момент - Python и Ruby не совместимы с threading-model метатрейдера. В теории их можно запустить, но надо или выкапывать очень низкий API или пачить сам язык.То-же относится к R и многим другим.
Чтобы подобные работали необходимо соблюсти условие "в рамках одного процесса и одной нити может независимо создаваться несколько изолированных инстансов".
Из известных мне скриптовых языков разве что ещё Lua такое умеет, но это сами понимаете, "язык без стандартов"..
Кстати выделенное жирным шрифтом необходимо соблюдать всем разработчикам DLL в своих изделиях
2. Как правильно и быстро обсчитать данные
Правильно и быстро - это проводить расчёты в metatrader. Он собственно для этого и сделан - получить данные, провести расчёты, выдать приказы. Глупо дублировать его возможности в своих DLL. В конце концов сам по себе MQL довольно похож на C++ и для программиста начать на нём писать - дело одного-двух дней. А в DLL надо делать то что платформа не охватывает и охватить физически не может - связь с базами, сервисами, интегрирование и прочее. И плюс то что может и должно по замыслу использоваться вне MetaTrader.
3. Где и когда версия для 5-ки
Как только, так сразу :-) Технически перетащить DLL из 4-ки в 5-ку несложно вообще, а скриптам всё равно. Tcl он и 32 и 64 бита. Но вести разработку на 4-ке гораздо удобнее, её не трогают :-) она стабильна и сюрпризов не предвидится. А вот с 5-кой предвидится, разработчики платформы обещают "сервисные задачи" (наравне с индикаторами, скриптами и советниками) и наверняка что-то в отношениях DLL и нитей будет меняться несколько билдов подряд. Вот пока это не устаканется, версии для 5-ки не будет.
В процессе эксплуатации и по отзывам пользователей были выявлены проблемы связанные с зависимостями DLL от msvcrt
и мелкий (мой ) баг с поиском той-же DLL. В хидере ATcl.mqh были прописаны относительные пути :-)
всё исправлено, можете взять исправленную версию (прикладываю), инструкция по установке - на традиционном месте http://luxtrade.tk/atcl:install
Для разработчиков DLL, нелишняя информация о проделанных манипуляциях:
- DLL компилируется с дефайном -D_CRTIMP_ALTERNATIVE который заставляет компилятор "инлайнить" почти всё что можно из CRT :-)
- DLL собирается теперь с ключом /MT что заставляет линкер использовать статическую линковку и не пораждать лишние зависимости. Redistributable (пакет поддержки VC) вроде как больше не надо таскать с собой повсюду
размер DLL-ки вырос, но зависимостей поубавилось и должно быть проще таскать библиотеку
PS/ небольшой апдейт - поменял прикреплённый архив. Библиотека собрана с полной поддержкой multithread