Può un paio di link per leggere su questo atcl non per scavare attraverso tutto, e più volutamente conoscere l'argomento.
I link principali alla libreria-integratore per MT4 (proprio quello su cui sto lavorando duramente) sono l'argomento attuale qui, più quello menzionato nel thread http://luxtrade.tk/atcl:start (storicamente il mio sito, che è in un costante casino :-) )
Come linguaggio e piattaforma di scripting, Tcl è a dir poco collaudato nel tempo - primo rilascio nel 1990, ora è presente de facto in Linux/UNIX, ora anche sotto Android. 98% lo avete sulla vostra macchina in qualche forma ridotta - python, ruby, R, maxima, octave e altri lo usano per l'interfaccia grafica (tkinter ecc.)
PS. spero che non uccidano il mio post e me insieme a un sacco di link? È tutto gratis.
PPS. Per gli outsourcer locali - c'è anche un "gustoso" bounty https://github.com/flightaware/Tcl-bounties. Ma ci sono solo compiti difficili da 2500USD e c'è una disciplina rigorosa.
До любого обращения к ATcl должна быть вызвана функций ATcl_OnInit() и в завершении скрипта/индикатора/советника ATcl_OnDeinit(const int reason). Между вызовами этих двух функций возможны обращения ко всем прочим функциям библиотеки. При разработке советников и индикторов также рекомендуется вызывать функции ATcl_OnEvent(..) ATcl_OnTimer...
con l'aiuto di alcune patch e di una tale madre, questo è ciò che otteniamo:
anche se questo è un esperimento, e anche nella versione attuale, non includerò ancora la patch per far funzionare Tk (in primo luogo, è troppo presto, gli altri glitch sono pieni, e in secondo luogo, è fatto per la birra, lo rivedrò più tardi)
Ma si può vedere che alla fine si vuole ottenere e c'è fiducia che tecnicamente è possibile. Sì, sì, una GUI completamente scrivibile è anche possibile.
a proposito, per i costruttori locali di GUI, la finestra (quella con il canale alfa) è eccessivamente descritta così (è tcl) :
Ho messo i file in ordine - ora nello ZIP sono messi nelle cartelle Indicators, Scripts, Experts, Libraries, Include e per installare la libreria è sufficiente per decomprimere l'archivio nella directory dei dati e tutto dovrebbe andare a posto ed essere pronto a lavorare (tranne che Tcl stesso deve essere messo :-) ).
L'API è così:
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);
};
Sembra essere abbastanza compatto e maneggevole.
Il suddetto zip-archive è allegato, se qualcuno ne ha bisogno e ha problemi con l'installazione, lo posti qui o di persona
Brevemente le caratteristiche che attraverso ATcl sono ora facilmente accessibili da MT4:
Caratteristiche Tcl
semplice - semplice linguaggio di scripting
Portatile - eseguendo script e algoritmi che puoi usare in qualsiasi sistema (Windows, Linux, Android e altri)
guidato dagli eventi - modello interno degli eventi
orientamento agli oggetti - tutte le moderne caratteristiche OOP.
threading - è possibile utilizzare tutte le caratteristiche della programmazione multithreading - thread di sistema, mutex, variabili condizionali, variabili condivise con possibilità di memorizzazione permanente.
file system virtuale - accesso trasparente a zip, tar, ftp, webdav come file system
database - interfaccia unificata tdbc e sqlite sono inclusi nel nucleo tcl. Supporta attivamente PostresSQL, MySQL, MonetDB, Oracle e qualsiasi database ODBC.
Networking - client/server: tcp, http, mail, websocket, zmq. Praticamente tutti i protocolli e i servizi di cui potreste aver bisogno.
crittografia - checksum, firme elettroniche, crypto hash. Crittografia simmetrica e asimmetrica. Supporto dell'infrastruttura a chiave pubblica, TLS, SASL.
windows - strumenti per l'ambiente windows - registro, DDE, COM client/server, client ldap
tcllib - la libreria standard di Tcl fornisce funzioni aggiuntive (strumenti di programmazione, elaborazione del testo, matematica e statistica, e altro)
c/c++ - Il compilatore TinyC è incluso nelle librerie e il pacchetto Critcl permette l'uso del compilatore C/C++ di sistema (vc,gcc,clang). I moduli e le funzioni possono essere compilati e utilizzati al volo.
Molte librerie e sistemi forniscono un'API Tcl, si può facilmente usarla nei propri programmi
Рад представить вам библиотеку ATcl v1 beta - интерпретатор Tcl для MT4. Безграничные возможности расширения и интеграции программ MT4 Расширяйте возможности ваших программ MQL, используйте СУБД, дополняйте сетевыми средствами, интегрируйте их с любыми программами используя Tcl. threading - вы можете использовать все возможности...
Sarebbe utile fare qualche esempio pratico, simile a quello che c'è in kodobase e negli articoli. Per esempio, la connessione a MySQL, Telegram o semplicemente la connessione di due terminali via TCP.
Sarebbe utile fare qualche esempio pratico, simile a quello che c'è in kodobase e negli articoli. Per esempio, la comunicazione con MySQL, Telegram, o semplicemente la connessione di due terminali via TCP.
in demo (in archivio):
- script che salva le citazioni in un database SQLite. Per MySQL è lo stesso, ma non tutti ce l'hanno :-)
- server tcp come indicatore e consulente (due varianti) - dopo l'avvio accetta la connessione sulla porta 8000 (può essere impostata nelle impostazioni all'avvio) e traduce lì i tick in arrivo. Si può fare un telnet e vedere
- indicatore client http, che va periodicamente al sito, prende la pagina dei lavori, la analizza e visualizza brevi informazioni nel grafico come Comment
le demo continueranno certamente a crescere, potete proporre delle idee.
Man mano che andiamo avanti, probabilmente farò dei demo che illustrano
- "web server" per mostrare che si può usare un browser, e come si fa.
- uso di TSV (thread shared variables), un analogo esteso di GlobalVariable - uso di dati condivisi nelle applicazioni
Devo inventare altri script :-) per renderlo chiaro, conciso e almeno un po' utile.
C'è stata una conversazione su Skype piuttosto affascinante, una parte della quale penso di dover dare voce perché la trovo utile :-)
1. Perché un po' di Tcl e non il molto più popolare Python, Ruby?
Naturalmente, non sarà il primo perché lo conosco bene e lo sto usando non solo per il trading. E il punto tecnologico è molto importante - Python e Ruby non sono compatibili con il modello di threading di Metatrader. Teoricamente possono essere eseguiti, ma devo o scavare API molto basse o rompere il linguaggio. Lo stesso vale per R e molti altri. Per farli funzionare, bisogna soddisfare la condizione "diverse istanze isolate possono essere create indipendentemente all'interno di un processo e di un thread". Lua è l'unico altro linguaggio di scripting che conosco, ma è "un linguaggio senza standard". A proposito, questo tipo di grassetto dovrebbe essereosservato da tutti gli sviluppatori di DLL nei loro prodotti
2. Come analizzare correttamente e rapidamente i dati
Corretto e veloce - è quellodi eseguire i calcoli in metatrader. Questo è ciò per cui Metatrader è progettato: ricevere dati, eseguire calcoli ed emettere ordini. Sarebbe sciocco duplicare le sue caratteristiche nella vostra DLL. Dopo tutto, MQL stesso è piuttosto simile al C++ e un programmatore impiega solo un giorno o due per iniziare a scrivere in esso. E nella DLL dobbiamo fare ciò che la piattaforma non copre e fisicamente non può coprire - comunicazione con i database, servizi, integrazione e così via. E in più le cose che possono e devono essere usate al di fuori di MetaTrader.
3. Dove e quando è disponibile la versione 5?
Il più presto possibile :-) Tecnicamente non è difficile trascinare la DLL dalla 4 alla 5, gli script non si preoccupano. Tcl è sia a 32 che a 64 bit. Ma è molto più conveniente sviluppare su 4, non si tocca :-) è stabile e non ci sono sorprese. Ma con il 5 vedremo, gli sviluppatori della piattaforma promettono "compiti di servizio" (insieme a indicatori, script e Expert Advisors) e sicuramente qualcosa nelle relazioni di DLL e thread cambierà diverse build di fila. Finché questo non sarà risolto, non ci sarà nessuna versione per la 5.
Durante il runtime e sulla base del feedback degli utenti, sono stati trovati alcuni problemi relativi alle dipendenze della DLL msvcrt. e un piccolo bug (mio) nel trovare la stessa DLL. I percorsi relativi nel gestore ATcl.mqh erano prescritti :-)
tutto risolto, potete ottenere la versione corretta (allegata), le istruzioni di installazione sono sul posto tradizionale http://luxtrade.tk/atcl:install
Per gli sviluppatori di DLL, questa è un'informazione utile:
- DLL compilata con define -D_CRTIMP_ALTERNATIVE che forza il compilatore a inlineare quasi tutto da CRT :-)
- La DLL è ora costruita con lo switch /MT, che forza il linker a usare lo static linking e a non causare dipendenze inutili. Il Redistributable (pacchetto di supporto VC) è come non doversi trascinare ovunque
La DLL è cresciuta in dimensioni, ma ci sono meno dipendenze e dovrebbe essere più facile portare in giro la libreria
PS/ piccolo aggiornamento - cambiato l'archivio allegato. La libreria è costruita con pieno supporto multithread
ATcl является библиотекой-интегратором и поэтому в первую очередь нужен сам по себе Tcl. Tcl свободно доступен и не имеет лицензионных отягощений (лицензии как правило BSD-like). Для работы с MT4 вам потребуется 32-х битная (это важно! MT4 32-х битный...
Chi controllerà i pip, implementerà il protocollo e analizzerà i risultati? è lungo, lento e solo tramite sondaggio.
Posso avere un paio di link da leggere su questo atcl, così non devi passare tutto, ma puoi essere più concentrato sull'argomento.
Può un paio di link per leggere su questo atcl non per scavare attraverso tutto, e più volutamente conoscere l'argomento.
I link principali alla libreria-integratore per MT4 (proprio quello su cui sto lavorando duramente) sono l'argomento attuale qui, più quello menzionato nel thread http://luxtrade.tk/atcl:start (storicamente il mio sito, che è in un costante casino :-) )
il Tcl (sito radice) stesso: http: //www.tcl.tk
wiki: http://wiki.tcl.tk
"libreria standard": https: //core.tcl.tk/tcllib/doc/tcllib-1-18/embedded/www/toc.html (link ai documenti, sono probabilmente di primario interesse)
Attualmente il principale distributore di ActiveState: https://www.activestate.com/activetcl ,
Sono "sulla scia" di MagicSplat http://www.magicsplat.com/ e IronTcl https://irontcl.com/
Come linguaggio e piattaforma di scripting, Tcl è a dir poco collaudato nel tempo - primo rilascio nel 1990, ora è presente de facto in Linux/UNIX, ora anche sotto Android. 98% lo avete sulla vostra macchina in qualche forma ridotta - python, ruby, R, maxima, octave e altri lo usano per l'interfaccia grafica (tkinter ecc.)
PS. spero che non uccidano il mio post e me insieme a un sacco di link? È tutto gratis.
PPS. Per gli outsourcer locali - c'è anche un "gustoso" bounty https://github.com/flightaware/Tcl-bounties. Ma ci sono solo compiti difficili da 2500USD e c'è una disciplina rigorosa.
Con pensieri sul futuro:
con l'aiuto di alcune patch e di una tale madre, questo è ciò che otteniamo:
anche se questo è un esperimento, e anche nella versione attuale, non includerò ancora la patch per far funzionare Tk (in primo luogo, è troppo presto, gli altri glitch sono pieni, e in secondo luogo, è fatto per la birra, lo rivedrò più tardi)
Ma si può vedere che alla fine si vuole ottenere e c'è fiducia che tecnicamente è possibile. Sì, sì, una GUI completamente scrivibile è anche possibile.
a proposito, per i costruttori locali di GUI, la finestra (quella con il canale alfa) è eccessivamente descritta così (è tcl) :
Ho messo i file in ordine - ora nello ZIP sono messi nelle cartelle Indicators, Scripts, Experts, Libraries, Include e per installare la libreria è sufficiente
per decomprimere l'archivio nella directory dei dati e tutto dovrebbe andare a posto ed essere pronto a lavorare (tranne che Tcl stesso deve essere messo :-) ).
L'API è così:
Sembra essere abbastanza compatto e maneggevole.
Il suddetto zip-archive è allegato, se qualcuno ne ha bisogno e ha problemi con l'installazione, lo posti qui o di persona
un esempio di tetto
"compilare al volo e usare C/C++ da ATcl dentro uno script MQL"
Beh, congratulazioni per la beta! :-)
Brevemente le caratteristiche che attraverso ATcl sono ora facilmente accessibili da MT4:
Caratteristiche Tcl
semplice - semplice linguaggio di scripting Portatile - eseguendo script e algoritmi che puoi usare in qualsiasi sistema (Windows, Linux, Android e altri) guidato dagli eventi - modello interno degli eventi orientamento agli oggetti - tutte le moderne caratteristiche OOP. threading - è possibile utilizzare tutte le caratteristiche della programmazione multithreading - thread di sistema, mutex, variabili condizionali, variabili condivise con possibilità di memorizzazione permanente. file system virtuale - accesso trasparente a zip, tar, ftp, webdav come file system database - interfaccia unificata tdbc e sqlite sono inclusi nel nucleo tcl. Supporta attivamente PostresSQL, MySQL, MonetDB, Oracle e qualsiasi database ODBC. Networking - client/server: tcp, http, mail, websocket, zmq. Praticamente tutti i protocolli e i servizi di cui potreste aver bisogno. crittografia - checksum, firme elettroniche, crypto hash. Crittografia simmetrica e asimmetrica. Supporto dell'infrastruttura a chiave pubblica, TLS, SASL. windows - strumenti per l'ambiente windows - registro, DDE, COM client/server, client ldap tcllib - la libreria standard di Tcl fornisce funzioni aggiuntive (strumenti di programmazione, elaborazione del testo, matematica e statistica, e altro) c/c++ - Il compilatore TinyC è incluso nelle librerie e il pacchetto Critcl permette l'uso del compilatore C/C++ di sistema (vc,gcc,clang). I moduli e le funzioni possono essere compilati e utilizzati al volo. Molte librerie e sistemi forniscono un'API Tcl, si può facilmente usarla nei propri programmi
più nel sito del blog: https://www.mql5.com/ru/blogs/post/715411 (che nessuno legge :-))e sulla pagina del progetto: http://luxtrade.tk/atcl:start
Felice di rispondere a qualsiasi domanda sull'argomento e di ascoltare idee e commenti.
Congratulazioni!
Sarebbe utile fare qualche esempio pratico, simile a quello che c'è in kodobase e negli articoli.
Per esempio, la connessione a MySQL, Telegram o semplicemente la connessione di due terminali via TCP.
Congratulazioni!
Sarebbe utile fare qualche esempio pratico, simile a quello che c'è in kodobase e negli articoli.
Per esempio, la comunicazione con MySQL, Telegram, o semplicemente la connessione di due terminali via TCP.
in demo (in archivio):
- script che salva le citazioni in un database SQLite. Per MySQL è lo stesso, ma non tutti ce l'hanno :-)
- server tcp come indicatore e consulente (due varianti) - dopo l'avvio accetta la connessione sulla porta 8000 (può essere impostata nelle impostazioni all'avvio) e traduce lì i tick in arrivo. Si può fare un telnet e vedere
- indicatore client http, che va periodicamente al sito, prende la pagina dei lavori, la analizza e visualizza brevi informazioni nel grafico come Comment
le demo continueranno certamente a crescere, potete proporre delle idee.
Man mano che andiamo avanti, probabilmente farò dei demo che illustrano
- "web server" per mostrare che si può usare un browser, e come si fa.
- uso di TSV (thread shared variables), un analogo esteso di GlobalVariable - uso di dati condivisi nelle applicazioni
Devo inventare altri script :-) per renderlo chiaro, conciso e almeno un po' utile.
C'è stata una conversazione su Skype piuttosto affascinante, una parte della quale penso di dover dare voce perché la trovo utile :-)
1. Perché un po' di Tcl e non il molto più popolare Python, Ruby?
Naturalmente, non sarà il primo perché lo conosco bene e lo sto usando non solo per il trading. E il punto tecnologico è molto importante - Python e Ruby non sono compatibili con il modello di threading di Metatrader. Teoricamente possono essere eseguiti, ma devo o scavare API molto basse o rompere il linguaggio. Lo stesso vale per R e molti altri.
Per farli funzionare, bisogna soddisfare la condizione "diverse istanze isolate possono essere create indipendentemente all'interno di un processo e di un thread".
Lua è l'unico altro linguaggio di scripting che conosco, ma è "un linguaggio senza standard".
A proposito, questo tipo di grassetto dovrebbe essere osservato da tutti gli sviluppatori di DLL nei loro prodotti
2. Come analizzare correttamente e rapidamente i dati
Corretto e veloce - è quello di eseguire i calcoli in metatrader. Questo è ciò per cui Metatrader è progettato: ricevere dati, eseguire calcoli ed emettere ordini. Sarebbe sciocco duplicare le sue caratteristiche nella vostra DLL. Dopo tutto, MQL stesso è piuttosto simile al C++ e un programmatore impiega solo un giorno o due per iniziare a scrivere in esso. E nella DLL dobbiamo fare ciò che la piattaforma non copre e fisicamente non può coprire - comunicazione con i database, servizi, integrazione e così via. E in più le cose che possono e devono essere usate al di fuori di MetaTrader.
3. Dove e quando è disponibile la versione 5?
Il più presto possibile :-) Tecnicamente non è difficile trascinare la DLL dalla 4 alla 5, gli script non si preoccupano. Tcl è sia a 32 che a 64 bit. Ma è molto più conveniente sviluppare su 4, non si tocca :-) è stabile e non ci sono sorprese. Ma con il 5 vedremo, gli sviluppatori della piattaforma promettono "compiti di servizio" (insieme a indicatori, script e Expert Advisors) e sicuramente qualcosa nelle relazioni di DLL e thread cambierà diverse build di fila. Finché questo non sarà risolto, non ci sarà nessuna versione per la 5.
Durante il runtime e sulla base del feedback degli utenti, sono stati trovati alcuni problemi relativi alle dipendenze della DLL msvcrt.
e un piccolo bug (mio) nel trovare la stessa DLL. I percorsi relativi nel gestore ATcl.mqh erano prescritti :-)
tutto risolto, potete ottenere la versione corretta (allegata), le istruzioni di installazione sono sul posto tradizionale http://luxtrade.tk/atcl:install
Per gli sviluppatori di DLL, questa è un'informazione utile:
- DLL compilata con define -D_CRTIMP_ALTERNATIVE che forza il compilatore a inlineare quasi tutto da CRT :-)
- La DLL è ora costruita con lo switch /MT, che forza il linker a usare lo static linking e a non causare dipendenze inutili. Il Redistributable (pacchetto di supporto VC) è come non doversi trascinare ovunque
La DLL è cresciuta in dimensioni, ma ci sono meno dipendenze e dovrebbe essere più facile portare in giro la libreria
PS/ piccolo aggiornamento - cambiato l'archivio allegato. La libreria è costruita con pieno supporto multithread