Maxim Kuznetsov: Wer kontrolliert die Pips, setzt das Protokoll um und analysiert die Ergebnisse? Das ist langwierig, langsam und erfolgt nur durch Abfragen.
Könnte ich ein paar Links zu diesem Thema bekommen, damit Sie nicht alles durchgehen müssen, sondern sich mehr auf das Thema konzentrieren können?
Kann ein paar Links zu lesen über diese atcl nicht durch alles zu graben, und mehr gezielt mit dem Thema vertraut zu machen.
Die wichtigsten Links zum Bibliotheks-Integrator für MT4 (an dem ich gerade hart arbeite) sind das aktuelle Thema hier, sowie das im Thread http://luxtrade.tk/atcl:start erwähnte (historisch gesehen meine Seite, die in einem ständigen Chaos ist :-) )
die Tcl-Seite (Root-Site) selbst: http: //www.tcl.tk
Als Sprache und Skripting-Plattform ist Tcl gelinde gesagt altbewährt - die erste Veröffentlichung erfolgte 1990, heute ist es de facto in Linux/UNIX vorhanden, jetzt auch für Android. 98% der Benutzer haben es in irgendeiner abgespeckten Form auf ihrem Rechner - Python, Ruby, R, Maxima, Octave und andere verwenden es für die grafische Benutzeroberfläche (tkinter usw.)
PS. Ich hoffe, dass sie meinen Beitrag und mich nicht zusammen mit einer Menge Links löschen werden. Es ist alles kostenlos.
PPS. Für lokale Outsourcer gibt es auch eine "leckere" Prämie https://github.com/flightaware/Tcl-bounties. Aber es gibt nur schwierige Aufgaben ab 2500USD und es herrscht eine strenge Disziplin.
До любого обращения к ATcl должна быть вызвана функций ATcl_OnInit() и в завершении скрипта/индикатора/советника ATcl_OnDeinit(const int reason). Между вызовами этих двух функций возможны обращения ко всем прочим функциям библиотеки. При разработке советников и индикторов также рекомендуется вызывать функции ATcl_OnEvent(..) ATcl_OnTimer...
mit Hilfe von einigen Patches und einer solchen Mutter, das ist, was wir bekommen:
obwohl dies ein Experiment ist, und auch in der aktuellen Version, werde ich noch nicht den Patch, um Tk laufen (erstens ist es zu früh, die anderen Pannen sind voll, und zweitens, es ist für Bier gemacht, werde ich später überprüfen)
Aber man kann sehen, was man am Ende erreichen will und darauf vertrauen, dass es technisch möglich ist. Ja, eine vollständig skriptfähige GUI ist ebenfalls möglich.
Übrigens, für lokale GUI-Entwickler ist das Fenster (das mit dem Alphakanal) exzessiv wie folgt beschrieben (es ist tcl) :
Ich habe die Dateien in die richtige Reihenfolge gebracht - jetzt sind sie im ZIP in den Ordnern Indicators, Scripts, Experts, Libraries, Include und um die Bibliothek zu installieren, reicht es, einfach um das Archiv in das data-Verzeichnis zu entpacken, und alles sollte an seinem Platz sein und funktionieren (außer, dass Tcl selbst eingefügt werden muss :-) ).
Die API funktioniert folgendermaßen:
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);
};
Scheint ziemlich kompakt und brauchbar zu sein.
Das obige Zip-Archiv ist angehängt, falls jemand es braucht und Probleme mit der Installation hat, kann er es hier oder persönlich posten
Kurz gesagt, die Funktionen, die durch ATcl sind jetzt leicht zugänglich von MT4 :
Tcl-Funktionen
simple - einfache Skriptsprache
Portabel - laufende Skripte und Algorithmen, die Sie auf jedem System (Windows, Linux, Android und andere) verwenden können
Ereignisgesteuert - internes Ereignismodell
Objektorientierung - alle modernen OOP-Merkmale.
Threading - Sie können alle Funktionen der Multithreading-Programmierung nutzen - System-Threads, Mutexe, bedingte Variablen, gemeinsame Variablen mit der Möglichkeit der permanenten Speicherung.
virtuelles Dateisystem - transparenter Zugriff auf zip,tar,ftp,webdav als Dateisystem
Datenbank - eine einheitliche tdbc- und sqlite-Schnittstelle ist im tcl-Kern enthalten. Es unterstützt aktiv PostresSQL, MySQL, MonetDB, Oracle und jede ODBC-Datenbank.
Vernetzung - Client/Server: tcp,http,mail,websocket,zmq. Praktisch alle Protokolle und Dienste, die Sie benötigen.
Kryptographie - Prüfsummen, elektronische Signaturen, Krypto-Hashes. Symmetrische und asymmetrische Verschlüsselung. Unterstützung der Infrastruktur für öffentliche Schlüssel, TLS, SASL.
Windows - Windows-Umgebungstools - Registrierung, DDE, COM-Client/Server, Ldap-Client
tcllib - Die Standardbibliothek von Tcl bietet zusätzliche Funktionen (Programmierwerkzeuge, Textverarbeitung, Mathematik und Statistik und mehr)
c/c++ - Der TinyC-Compiler ist in den Bibliotheken enthalten, und das Critcl-Paket ermöglicht die Verwendung des System-C/C++-Compilers (vc, gcc, clang). Module und Funktionen können während des laufenden Betriebs kompiliert und verwendet werden.
Viele Bibliotheken und Systeme bieten eine Tcl-API, die Sie leicht in Ihren Programmen verwenden können
Рад представить вам библиотеку ATcl v1 beta - интерпретатор Tcl для MT4. Безграничные возможности расширения и интеграции программ MT4 Расширяйте возможности ваших программ MQL, используйте СУБД, дополняйте сетевыми средствами, интегрируйте их с любыми программами используя Tcl. threading - вы можете использовать все возможности...
Es wäre nützlich, einige praktische Beispiele zu machen, ähnlich wie in kodobase und in Artikeln. Zum Beispiel die Verbindung zu MySQL, Telegram oder einfach die Verbindung zweier Terminals über TCP.
Es wäre nützlich, einige praktische Beispiele zu machen, ähnlich wie in kodobase und in Artikeln. Zum Beispiel die Kommunikation mit MySQL, Telegram oder einfach die Verbindung zweier Terminals über TCP.
in Dems (im Archiv):
- Ein Skript zum Speichern von Zitaten in einer SQLite-Datenbank. Für MySQL ist es dasselbe, aber nicht jeder hat es :-)
- tcp-Server als Indikator und Advisor (zwei Varianten) - nach dem Start nimmt er eine Verbindung auf Port 8000 an (kann beim Start in den Einstellungen festgelegt werden) und übersetzt dort eingehende Ticks. Sie können telnet und sehen
- http-Client-Indikator, der in regelmäßigen Abständen die Website aufruft, die Auftragsseite analysiert und eine Zusammenfassung der Informationen in der Tabelle als Kommentar anzeigt
Demos werden sicherlich weiter wachsen, Sie können Ideen vorschlagen.
Im weiteren Verlauf werde ich wahrscheinlich Demos erstellen, die Folgendes veranschaulichen
- "Webserver", um zu zeigen, dass man einen Browser verwenden kann und wie das geht.
- Verwendung von TSV (thread shared variables), ein erweitertes Analogon von GlobalVariable - Verwendung von gemeinsamen Daten in den Anwendungen
Ich muss mir noch mehr Skripte ausdenken :-), um sie klar, prägnant und zumindest ein wenig nützlich zu machen.
Es gab eine ziemlich faszinierende Skype-Konversation, von der ich denke, dass ich einiges wiedergeben muss, weil ich es nützlich finde :-)
1. Warum Tcl und nicht das viel populärere Python oder Ruby?
Natürlich wird es nicht das erste sein, denn ich kenne es gut und benutze es nicht nur für den Handel. Und der technologische Punkt ist sehr wichtig - Python und Ruby sind nicht mit dem Threading-Modell von Metatrader kompatibel. Theoretisch können sie ausgeführt werden, aber ich muss entweder eine sehr niedrige API ausgraben oder die Sprache brechen. Das Gleiche gilt für R und viele andere. Damit sie funktionieren, muss die Bedingung "mehrere isolierte Instanzen können unabhängig voneinander innerhalb eines Prozesses und eines Threads erstellt werden" erfüllt sein. Lua ist die einzige andere mir bekannte Skriptsprache, die das kann, aber sie ist "eine Sprache ohne Standards". Diese fettgedruckte Schrift sollte übrigensvon allen DLL-Entwicklern in ihren Produktenbeachtet werden
2. Wie man Daten richtig und schnell analysiert
Richtig und schnell - ist es, Berechnungen in Metatrader durchzuführen. Genau dafür ist der Metatrader gedacht - um Daten zu empfangen, Berechnungen durchzuführen und Aufträge zu erteilen. Es wäre töricht, seine Funktionen in Ihrer DLL zu duplizieren. Schließlich ist MQL selbst C++ sehr ähnlich und ein Programmierer braucht nur ein oder zwei Tage, um mit dem Schreiben zu beginnen. Und in der DLL müssen wir das tun, was die Plattform nicht abdeckt und physisch nicht abdecken kann - Kommunikation mit Datenbanken, Dienste, Integration und so weiter. Und auch die Dinge, die außerhalb von MetaTrader verwendet werden können und sollten.
3. Wo und wann ist die Version 5 erhältlich?
So bald wie möglich :-) Technisch gesehen ist es einfach, die DLL von 4 auf 5 zu ziehen, Skripten ist das egal. Tcl ist sowohl 32 als auch 64 Bit. Aber es ist viel bequemer, auf 4 zu entwickeln, es wird nicht berührt :-) es ist stabil und es werden keine Überraschungen erwartet. Aber mit der 5 werden wir sehen, die Plattform-Entwickler versprechen "Service-Aufgaben" (zusammen mit Indikatoren, Skripte und Expert Advisors) und sicherlich etwas in Bezug auf DLL und Threads wird mehrere Builds in einer Reihe zu ändern. Solange dies nicht geklärt ist, wird es keine Version für 5 geben.
Während der Laufzeit und aufgrund von Benutzer-Feedback wurden einige Probleme im Zusammenhang mit msvcrt DLL-Abhängigkeiten gefunden. und ein kleiner Fehler (meiner) beim Auffinden derselben DLL. Relative Pfade im ATcl.mqh Handler waren vorgeschrieben :-)
alles behoben, können Sie die korrigierte Version (beigefügt), Installationsanweisungen sind auf der traditionellen Ort http://luxtrade.tk/atcl:install
Für DLL-Entwickler ist dies eine nützliche Information:
- DLL kompiliert mit define -D_CRTIMP_ALTERNATIVE, was den Compiler zwingt, fast alles von CRT zu inlinen :-)
- Die DLL wird jetzt mit dem Schalter /MT erstellt, der den Linker zwingt, statisches Linking zu verwenden und keine unnötigen Abhängigkeiten zu verursachen. Mit dem Redistributable (VC-Support-Paket) müssen Sie nicht mehr überall herumschleppen.
Die DLL ist zwar größer geworden, aber es gibt weniger Abhängigkeiten und es sollte einfacher sein, die Bibliothek herumzuschleppen
PS/ kleines Update - habe das angehängte Archiv geändert. Die Bibliothek ist mit vollständiger Multithread-Unterstützung ausgestattet
ATcl является библиотекой-интегратором и поэтому в первую очередь нужен сам по себе Tcl. Tcl свободно доступен и не имеет лицензионных отягощений (лицензии как правило BSD-like). Для работы с MT4 вам потребуется 32-х битная (это важно! MT4 32-х битный...
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Wer kontrolliert die Pips, setzt das Protokoll um und analysiert die Ergebnisse? Das ist langwierig, langsam und erfolgt nur durch Abfragen.
Könnte ich ein paar Links zu diesem Thema bekommen, damit Sie nicht alles durchgehen müssen, sondern sich mehr auf das Thema konzentrieren können?
Kann ein paar Links zu lesen über diese atcl nicht durch alles zu graben, und mehr gezielt mit dem Thema vertraut zu machen.
Die wichtigsten Links zum Bibliotheks-Integrator für MT4 (an dem ich gerade hart arbeite) sind das aktuelle Thema hier, sowie das im Thread http://luxtrade.tk/atcl:start erwähnte (historisch gesehen meine Seite, die in einem ständigen Chaos ist :-) )
die Tcl-Seite (Root-Site) selbst: http: //www.tcl.tk
wiki: http://wiki.tcl.tk
"Standardbibliothek" : https://core.tcl.tk/tcllib/doc/tcllib-1-18/embedded/www/toc.html (Link zu den Dokumenten, sie sind wahrscheinlich von primärem Interesse)
Derzeit der führende Verteiler von ActiveState: https: //www.activestate.com/activetcl,
Sie sind "auf den Fersen" von MagicSplat http://www.magicsplat.com/ und IronTcl https://irontcl.com/
Als Sprache und Skripting-Plattform ist Tcl gelinde gesagt altbewährt - die erste Veröffentlichung erfolgte 1990, heute ist es de facto in Linux/UNIX vorhanden, jetzt auch für Android. 98% der Benutzer haben es in irgendeiner abgespeckten Form auf ihrem Rechner - Python, Ruby, R, Maxima, Octave und andere verwenden es für die grafische Benutzeroberfläche (tkinter usw.)
PS. Ich hoffe, dass sie meinen Beitrag und mich nicht zusammen mit einer Menge Links löschen werden. Es ist alles kostenlos.
PPS. Für lokale Outsourcer gibt es auch eine "leckere" Prämie https://github.com/flightaware/Tcl-bounties. Aber es gibt nur schwierige Aufgaben ab 2500USD und es herrscht eine strenge Disziplin.
Mit Gedanken an die Zukunft:
mit Hilfe von einigen Patches und einer solchen Mutter, das ist, was wir bekommen:
obwohl dies ein Experiment ist, und auch in der aktuellen Version, werde ich noch nicht den Patch, um Tk laufen (erstens ist es zu früh, die anderen Pannen sind voll, und zweitens, es ist für Bier gemacht, werde ich später überprüfen)
Aber man kann sehen, was man am Ende erreichen will und darauf vertrauen, dass es technisch möglich ist. Ja, eine vollständig skriptfähige GUI ist ebenfalls möglich.
Übrigens, für lokale GUI-Entwickler ist das Fenster (das mit dem Alphakanal) exzessiv wie folgt beschrieben (es ist tcl) :
Ich habe die Dateien in die richtige Reihenfolge gebracht - jetzt sind sie im ZIP in den Ordnern Indicators, Scripts, Experts, Libraries, Include und um die Bibliothek zu installieren, reicht es, einfach
um das Archiv in das data-Verzeichnis zu entpacken, und alles sollte an seinem Platz sein und funktionieren (außer, dass Tcl selbst eingefügt werden muss :-) ).
Die API funktioniert folgendermaßen:
Scheint ziemlich kompakt und brauchbar zu sein.
Das obige Zip-Archiv ist angehängt, falls jemand es braucht und Probleme mit der Installation hat, kann er es hier oder persönlich posten
ein Beispiel auf dem Dach
"Kompilieren im laufenden Betrieb und Verwendung von C/C++ aus ATcl innerhalb eines MQL-Skripts".
Also, herzlichen Glückwunsch zur Beta! :-)
Kurz gesagt, die Funktionen, die durch ATcl sind jetzt leicht zugänglich von MT4 :
Tcl-Funktionen
simple - einfache Skriptsprache Portabel - laufende Skripte und Algorithmen, die Sie auf jedem System (Windows, Linux, Android und andere) verwenden können Ereignisgesteuert - internes Ereignismodell Objektorientierung - alle modernen OOP-Merkmale. Threading - Sie können alle Funktionen der Multithreading-Programmierung nutzen - System-Threads, Mutexe, bedingte Variablen, gemeinsame Variablen mit der Möglichkeit der permanenten Speicherung. virtuelles Dateisystem - transparenter Zugriff auf zip,tar,ftp,webdav als Dateisystem Datenbank - eine einheitliche tdbc- und sqlite-Schnittstelle ist im tcl-Kern enthalten. Es unterstützt aktiv PostresSQL, MySQL, MonetDB, Oracle und jede ODBC-Datenbank. Vernetzung - Client/Server: tcp,http,mail,websocket,zmq. Praktisch alle Protokolle und Dienste, die Sie benötigen. Kryptographie - Prüfsummen, elektronische Signaturen, Krypto-Hashes. Symmetrische und asymmetrische Verschlüsselung. Unterstützung der Infrastruktur für öffentliche Schlüssel, TLS, SASL. Windows - Windows-Umgebungstools - Registrierung, DDE, COM-Client/Server, Ldap-Client tcllib - Die Standardbibliothek von Tcl bietet zusätzliche Funktionen (Programmierwerkzeuge, Textverarbeitung, Mathematik und Statistik und mehr) c/c++ - Der TinyC-Compiler ist in den Bibliotheken enthalten, und das Critcl-Paket ermöglicht die Verwendung des System-C/C++-Compilers (vc, gcc, clang). Module und Funktionen können während des laufenden Betriebs kompiliert und verwendet werden. Viele Bibliotheken und Systeme bieten eine Tcl-API, die Sie leicht in Ihren Programmen verwenden können
mehr auf der Blog-Seite: https://www.mql5.com/ru/blogs/post/715411 (die niemand liest :-))und auf der Projektseite: http://luxtrade.tk/atcl:start
Ich beantworte gerne alle Fragen zu diesem Thema und habe ein offenes Ohr für Ideen und Kommentare.
Herzlichen Glückwunsch!
Es wäre nützlich, einige praktische Beispiele zu machen, ähnlich wie in kodobase und in Artikeln.
Zum Beispiel die Verbindung zu MySQL, Telegram oder einfach die Verbindung zweier Terminals über TCP.
Herzlichen Glückwunsch!
Es wäre nützlich, einige praktische Beispiele zu machen, ähnlich wie in kodobase und in Artikeln.
Zum Beispiel die Kommunikation mit MySQL, Telegram oder einfach die Verbindung zweier Terminals über TCP.
in Dems (im Archiv):
- Ein Skript zum Speichern von Zitaten in einer SQLite-Datenbank. Für MySQL ist es dasselbe, aber nicht jeder hat es :-)
- tcp-Server als Indikator und Advisor (zwei Varianten) - nach dem Start nimmt er eine Verbindung auf Port 8000 an (kann beim Start in den Einstellungen festgelegt werden) und übersetzt dort eingehende Ticks. Sie können telnet und sehen
- http-Client-Indikator, der in regelmäßigen Abständen die Website aufruft, die Auftragsseite analysiert und eine Zusammenfassung der Informationen in der Tabelle als Kommentar anzeigt
Demos werden sicherlich weiter wachsen, Sie können Ideen vorschlagen.
Im weiteren Verlauf werde ich wahrscheinlich Demos erstellen, die Folgendes veranschaulichen
- "Webserver", um zu zeigen, dass man einen Browser verwenden kann und wie das geht.
- Verwendung von TSV (thread shared variables), ein erweitertes Analogon von GlobalVariable - Verwendung von gemeinsamen Daten in den Anwendungen
Ich muss mir noch mehr Skripte ausdenken :-), um sie klar, prägnant und zumindest ein wenig nützlich zu machen.
Es gab eine ziemlich faszinierende Skype-Konversation, von der ich denke, dass ich einiges wiedergeben muss, weil ich es nützlich finde :-)
1. Warum Tcl und nicht das viel populärere Python oder Ruby?
Natürlich wird es nicht das erste sein, denn ich kenne es gut und benutze es nicht nur für den Handel. Und der technologische Punkt ist sehr wichtig - Python und Ruby sind nicht mit dem Threading-Modell von Metatrader kompatibel. Theoretisch können sie ausgeführt werden, aber ich muss entweder eine sehr niedrige API ausgraben oder die Sprache brechen. Das Gleiche gilt für R und viele andere.
Damit sie funktionieren, muss die Bedingung "mehrere isolierte Instanzen können unabhängig voneinander innerhalb eines Prozesses und eines Threads erstellt werden" erfüllt sein.
Lua ist die einzige andere mir bekannte Skriptsprache, die das kann, aber sie ist "eine Sprache ohne Standards".
Diese fettgedruckte Schrift sollte übrigens von allen DLL-Entwicklern in ihren Produkten beachtet werden
2. Wie man Daten richtig und schnell analysiert
Richtig und schnell - ist es , Berechnungen in Metatrader durchzuführen. Genau dafür ist der Metatrader gedacht - um Daten zu empfangen, Berechnungen durchzuführen und Aufträge zu erteilen. Es wäre töricht, seine Funktionen in Ihrer DLL zu duplizieren. Schließlich ist MQL selbst C++ sehr ähnlich und ein Programmierer braucht nur ein oder zwei Tage, um mit dem Schreiben zu beginnen. Und in der DLL müssen wir das tun, was die Plattform nicht abdeckt und physisch nicht abdecken kann - Kommunikation mit Datenbanken, Dienste, Integration und so weiter. Und auch die Dinge, die außerhalb von MetaTrader verwendet werden können und sollten.
3. Wo und wann ist die Version 5 erhältlich?
So bald wie möglich :-) Technisch gesehen ist es einfach, die DLL von 4 auf 5 zu ziehen, Skripten ist das egal. Tcl ist sowohl 32 als auch 64 Bit. Aber es ist viel bequemer, auf 4 zu entwickeln, es wird nicht berührt :-) es ist stabil und es werden keine Überraschungen erwartet. Aber mit der 5 werden wir sehen, die Plattform-Entwickler versprechen "Service-Aufgaben" (zusammen mit Indikatoren, Skripte und Expert Advisors) und sicherlich etwas in Bezug auf DLL und Threads wird mehrere Builds in einer Reihe zu ändern. Solange dies nicht geklärt ist, wird es keine Version für 5 geben.
Während der Laufzeit und aufgrund von Benutzer-Feedback wurden einige Probleme im Zusammenhang mit msvcrt DLL-Abhängigkeiten gefunden.
und ein kleiner Fehler (meiner) beim Auffinden derselben DLL. Relative Pfade im ATcl.mqh Handler waren vorgeschrieben :-)
alles behoben, können Sie die korrigierte Version (beigefügt), Installationsanweisungen sind auf der traditionellen Ort http://luxtrade.tk/atcl:install
Für DLL-Entwickler ist dies eine nützliche Information:
- DLL kompiliert mit define -D_CRTIMP_ALTERNATIVE, was den Compiler zwingt, fast alles von CRT zu inlinen :-)
- Die DLL wird jetzt mit dem Schalter /MT erstellt, der den Linker zwingt, statisches Linking zu verwenden und keine unnötigen Abhängigkeiten zu verursachen. Mit dem Redistributable (VC-Support-Paket) müssen Sie nicht mehr überall herumschleppen.
Die DLL ist zwar größer geworden, aber es gibt weniger Abhängigkeiten und es sollte einfacher sein, die Bibliothek herumzuschleppen
PS/ kleines Update - habe das angehängte Archiv geändert. Die Bibliothek ist mit vollständiger Multithread-Unterstützung ausgestattet