Her şeyi karıştırmamak, ancak konuyu daha bilinçli bir şekilde tanımak için bu atcl hakkında birkaç bağlantı okuyabilirsiniz.
MT4 entegratör kitaplığına (sürekli kullandığım) ana bağlantılar, güncel konu ve ayrıca http://luxtrade.tk/atcl:start (tarihsel olarak benim sitem, sürekli kargaşa içinde: -))
Bir dil ve komut dosyası oluşturma platformu olarak, Tcl, en hafif şekilde ifade etmek için zamana göre test edilmiştir - ilk sürüm 1990'daydı, şu anda Linux / UNIX'te fiili olarak mevcut, şimdi de Android altında. %98'i bazı kesik formlarda makinenizde bulunur - python, ruby, R, maxima, octav ve diğerleri onu GUI için kullanır (tkinter aynıdır)
not. Umarım bağlantıların bolluğu için gönderiyi ve beni aynı anda çökertmezler mi? Hepsi ücretsiz.
P.P.S. Yerel taşeronlar için - ayrıca "lezzetli" bir ödül var https://github.com/flightaware/Tcl-bounties . Ancak 2500USD'den sadece zor görevler kaldı ve zorlu bir disiplin var.
До любого обращения к ATcl должна быть вызвана функций ATcl_OnInit() и в завершении скрипта/индикатора/советника ATcl_OnDeinit(const int reason). Между вызовами этих двух функций возможны обращения ко всем прочим функциям библиотеки. При разработке советников и индикторов также рекомендуется вызывать функции ATcl_OnEvent(..) ATcl_OnTimer...
bazı yamalar ve falan bir annenin yardımıyla, şöyle ortaya çıkıyor:
Bu çok ama çok bir deneme olmasına rağmen ve şu anki sürümde bile, Tk'yi çalıştırmanıza izin veren bir yama henüz eklemeyeceğim (birincisi, erken, bir sürü başka hata var ve ikincisi, bira için yapılmış , daha sonra gözden geçirmem gerekiyor)
ama sonunda onu elde etmek istediğiniz açık ve bunun teknik olarak mümkün olduğuna dair bir güven var. Evet, evet, tam kodlu bir GUI de mümkündür.
Bu arada, yerel GUI oluşturucular için, pencere (alfa kanalına sahip olan) bolca şu şekilde açıklanmıştır (bu tcl'dir):
set symbol "symbol"set bid "bid"set ask "ask"set lots 0.1set minLot 0.01set maxLot 1set lotStep 0.01
proc TradeFrame { w } {
# всё в отдельном фрейме
frame $w
# виджеты
label $w.symbol -textvariable symbol
label $w.bid -textvariable bid
label $w.ask -textvariable ask
button $w.buy -text "BUY" -command {Trade buy}
button $w.sell -text "SELL" -command {Trade sell}
global minLot
global maxLot
global lotStep
ttk::spinbox $w.lots -font "Courier 12" - from $minLot -to $maxLot -increment $lotStep -textvariable lots
# размещение в таблице
grid $w.symbol -row 0 -column 0 -columnspan 2 -sticky "ew"
grid $w.bid -row 1 -column 0 -sticky "e"
grid $w.ask -row 1 -column 1 -sticky "w"
grid $w.buy -row 2 -column 0 -sticky "nsew"
grid $w.sell -row 2 -column 1 -sticky "nsew"
grid $w.lots -row 3 -column 0 -columnspan 2 -sticky "ew"
# настройка таблицы
grid rowconfigure $w 2 -weight 1
grid columnconfigure $w 0 -uniform same -weight 1
grid columnconfigure $w 1 -uniform same -weight 1
# привязки и прочие настройки
# $w.lots set $minLot
return $w
}
proc TradeWindow { w } {
toplevel $w
wm title $w "TradePanel"
wm attributes $w -alpha 0.75
TradeFrame $w.panel
pack $w.panel -fill both -expand yes
raise $w
}
proc Trade { op } {
global symbol
global lots
tk_messageBox -message "Your request $op $lots $symbol lots"
}
Dosyaları biraz temizledim - şimdi ZIP'de Göstergeler, Komut Dosyaları, Uzmanlar, Kitaplıklar, Dahil Et klasörlerinde düzenlenmiştir ve teorik olarak kitaplığı kurmak oldukça basittir veri dizini içindeki arşivi açın ve her şey yerine oturmalı ve çalışmaya hazır olmalıdır (Tcl'nin kendisini de yüklemeniz gerekmesi dışında :-) ).
Sağlanan API şu şekildedir:
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 );
};
oldukça kompakt ve kullanışlı görünüyor.
Bahsedilen zip arşivini ekliyorum, aniden birinin ihtiyacı olursa ve kurulum sırasında sorun çıkarsa, buraya veya kişisel olarak yazın.
Kısaca, artık MT4'ten ATcl üzerinden kolayca erişilebilen özellikler şunlardır:
Tcl Özellikleri
basit - basit komut dosyası dili
taşınabilir - geliştirilen komut dosyalarını ve algoritmaları herhangi bir sistemde kullanabilirsiniz (Windows, Linux, Android ve diğerleri)
olay odaklı - dahili olay modeli
nesne yönelimi - modern OOP'nin tüm özellikleri
iş parçacığı oluşturma - çok iş parçacıklı programlamanın tüm özelliklerini kullanabilirsiniz - sistem iş parçacıkları, muteksler, koşul değişkenleri, kalıcı depolama ile paylaşılan değişkenler.
sanal dosya sistemi - dosya sistemi olarak zip, tar, ftp, webdav'a şeffaf erişim
veritabanı - birleşik bir arabirim tdbc ve sqlite, tcl çekirdeğinin bir parçasıdır. PostresSQL, MySQL, MonetDB, Oracle ve herhangi bir ODBC veritabanları aktif olarak desteklenmektedir.
ağ iletişimi - istemci/sunucu: tcp,http,mail,websocket,zmq. İhtiyaç duyabileceğiniz hemen hemen tüm protokoller ve hizmetler.
kriptografi - sağlama toplamları, elektronik imzalar, kripto karmaları. Simetrik ve asimetrik şifreleme. Açık Anahtar Altyapısı, TLS, SASL Desteği
windows - Windows ortamında çalışmak için araçlar - kayıt defteri, DDE, COM istemcisi/sunucusu, ldap istemcisi
tcllib - Tcl standart kitaplığı ek özellikler sağlar (yazılım araçları, kelime işleme, matematik ve istatistik ve daha fazlası)
c/c++ - TinyC derleyicisi kitaplıklarda bulunur ve Critcl paketi, sistem C/C++ derleyicisini (vc,gcc,clang) kullanmanıza izin verir. Modüller ve işlevler anında derlenebilir ve kullanılabilir
en bilinenleri - bir çok kitaplık ve sistem Tcl API sağlar, programlarınızda rahatlıkla kullanabilirsiniz
Рад представить вам библиотеку ATcl v1 beta - интерпретатор Tcl для MT4. Безграничные возможности расширения и интеграции программ MT4 Расширяйте возможности ваших программ MQL, используйте СУБД, дополняйте сетевыми средствами, интегрируйте их с любыми программами используя Tcl. threading - вы можете использовать все возможности...
Codebase ve makalelerdekine benzer bazı pratik örnekler yapmak faydalı olacaktır. Örneğin, MySQL, Telegram ile iletişim veya sadece iki terminalin TCP üzerinden bağlantısı.
Codebase ve makalelerdekilere benzeterek bazı pratik örnekler yapmak faydalı olacaktır. Örneğin, MySQL, Telegram ile iletişim veya sadece iki terminalin TCP üzerinden bağlantısı.
demolarda (arşivlenmiş):
- tırnakları SQLite veritabanına kaydeden komut dosyası. MySQL için her şey aynıdır, sadece herkesin makinede olmamasıdır :-)
- bir gösterge ve bir danışman şeklinde tcp sunucusu (iki seçenek) - başlattıktan sonra, 8000 numaralı bağlantı noktasına bağlantıları kabul eder (başlangıçta ayarlarda ayarlanabilir) ve gelen keneleri orada yayınlar. ohm'a telnet atıp görebilirsin
- Periyodik olarak bu siteye giden http client göstergesi, işler sayfasını alır, ayrıştırır ve grafiğe yorum şeklinde kısa bilgiler verir.
Demolar elbette yenilenecektir, fikir sunabilirsiniz.
yol boyunca, muhtemelen gösteren demolar yapacağım
- "web sunucusu", bir tarayıcının kullanılabileceğini ve nasıl yapıldığını gösterir
- GlobalVariable'ın genişletilmiş bir analogu olan TSV'yi (iş parçacığı paylaşımlı değişkenler) kullanma - uygulamalarda paylaşılan verileri kullanma
:-) açık, özlü ve en azından biraz kullanışlı hale getirmek için onlar için komut dosyaları bulmanız gerekir.
Burada oldukça etkileyici bir Skype diyaloğu vardı, bir kısmını seslendirmeyi gerekli görüyorum çünkü faydalı olduğunu düşünüyorum :-)
1. Neden biraz Tcl ve daha popüler değil Python, Ruby
Tabii ki, öncelikle, çünkü onu iyi tanıyorum ve onu sadece ticaret için kullanmıyorum. Ve teknolojik nokta da önemlidir - Python ve Ruby, metatrader'ın iş parçacığı modeliyle uyumlu değildir. Teorik olarak çalıştırılabilirler, ancak ya çok düşük bir API kazmanız ya da dilin kendisine yama yapmanız gerekir.Aynı şey R ve diğerleri için de geçerlidir. Bunların çalışması için, " bir işlem ve bir iş parçacığı içinde birkaç yalıtılmış örnek bağımsız olarak oluşturulabilir " koşulunun gözlemlenmesi gerekir. Bildiğim betik dillerinden bunu sadece Lua yapabilir, ancak bunu kendiniz anlıyorsunuz, "standartları olmayan bir dil" .. Bu arada, tüm DLL geliştiricileri ürünlerinde kalın yazı tipine dikkat etmelidir.
2. Verileri doğru ve hızlı bir şekilde nasıl hesaplayabilirim?
Metatrader'da hesaplamaları doğru ve hızlı bir şekilde yapmaktır. Aslında bunun için yapılır - veri elde etmek, hesaplamalar yapmak, emir vermek. Yeteneklerini DLL'lerinizde çoğaltmak aptalca. Sonunda, MQL'nin kendisi C++'a oldukça benzer ve bir programcının içinde yazmaya başlaması bir veya iki gün meselesidir. Ve DLL'de, platformun kapsamadığı ve fiziksel olarak kapsayamayacağı şeyleri yapmanız gerekir - veritabanları, hizmetler, entegrasyon vb. ile iletişim. Ayrıca MetaTrader dışında nelerin kullanılabilecekleri ve nelerin kullanılması gerektiği.
3. 5-ki için sürüm nerede ve ne zaman
En kısa sürede, yani hemen :-) Teknik olarak, bir DLL dosyasını 4'ten 5'e sürüklemek hiç de zor değil, ancak betiklerin umurunda değil. Tcl hem 32 hem de 64 bittir. Ama 4-ke'de geliştirmek çok daha uygun, dokunmuyorlar :-) stabil ve sürpriz beklenmiyor. Ancak 5'inde, platform geliştiricilerinin "hizmet görevleri" (göstergeler, komut dosyaları ve danışmanlarla birlikte) vaat etmesi bekleniyor ve kesinlikle DLL ve iş parçacıkları arasındaki ilişkide bir şeyler art arda birkaç yapıyı değiştirecek. Yerleşene kadar bu, 5 için bir sürüm olmayacak.
Çalışma sırasında ve kullanıcı incelemelerine göre msvcrt'den DLL bağımlılıkları ile ilgili sorunlar tespit edildi. ve aynı DLL'nin aranmasıyla ilgili küçük bir (benim) hata. Göreli yollar ATcl.mqh başlığına yazılmıştır :-)
DLL geliştiricileri için yapılan manipülasyonlar hakkında faydalı bilgiler:
- DLL, tanımlı -D_CRTIMP_ALTERNATIVE ile derlenir ve bu, derleyiciyi CRT'den mümkün olan hemen hemen her şeyi "satır içi" yapmaya zorlar :-)
- DLL artık /MT anahtarıyla oluşturulmuştur; bu, bağlayıcıyı statik bağlantı kullanmaya ve gereksiz bağımlılıklar oluşturmamaya zorlar. Yeniden dağıtılabilir (VC destek paketi) türünün artık taşınmasına gerek yok
DLL'nin boyutu büyüdü, ancak bağımlılıklar azaldı ve kitaplığı taşımak daha kolay olmalı
PS/ küçük güncelleme - ekli arşivi değiştirdi. Kitaplık tam çoklu iş parçacığı desteği ile oluşturulmuştur
ATcl является библиотекой-интегратором и поэтому в первую очередь нужен сам по себе Tcl. Tcl свободно доступен и не имеет лицензионных отягощений (лицензии как правило BSD-like). Для работы с MT4 вам потребуется 32-х битная (это важно! MT4 32-х битный...
ve boruları kim kontrol edecek, protokolü uygulayacak ve sonuçları ayrıştıracak? uzun, yavaş ve sadece anketler.
Her şeyi karıştırmamak, ancak konuyu daha bilinçli bir şekilde tanımak için bu atcl hakkında birkaç bağlantı okuyabilirsiniz.
Her şeyi karıştırmamak, ancak konuyu daha bilinçli bir şekilde tanımak için bu atcl hakkında birkaç bağlantı okuyabilirsiniz.
MT4 entegratör kitaplığına (sürekli kullandığım) ana bağlantılar, güncel konu ve ayrıca http://luxtrade.tk/atcl:start (tarihsel olarak benim sitem, sürekli kargaşa içinde: -))
Tcl'nin kendisi (kök site): http://www.tcl.tk
wiki: http://wiki.tcl.tk
"standart kitaplık": https://core.tcl.tk/tcllib/doc/tcllib-1-18/embedded/www/toc.html
Şu anda ActiveState'in lider distribütörü: https://www.activestate.com/activetcl ,
MagicSplat http://www.magicsplat.com/ ve IronTcl https://irontcl.com/ tarafından basılıyorlar.
Bir dil ve komut dosyası oluşturma platformu olarak, Tcl, en hafif şekilde ifade etmek için zamana göre test edilmiştir - ilk sürüm 1990'daydı, şu anda Linux / UNIX'te fiili olarak mevcut, şimdi de Android altında. %98'i bazı kesik formlarda makinenizde bulunur - python, ruby, R, maxima, octav ve diğerleri onu GUI için kullanır (tkinter aynıdır)
not. Umarım bağlantıların bolluğu için gönderiyi ve beni aynı anda çökertmezler mi? Hepsi ücretsiz.
P.P.S. Yerel taşeronlar için - ayrıca "lezzetli" bir ödül var https://github.com/flightaware/Tcl-bounties . Ancak 2500USD'den sadece zor görevler kaldı ve zorlu bir disiplin var.
Gelecekle ilgili düşüncelerle:
bazı yamalar ve falan bir annenin yardımıyla, şöyle ortaya çıkıyor:
Bu çok ama çok bir deneme olmasına rağmen ve şu anki sürümde bile, Tk'yi çalıştırmanıza izin veren bir yama henüz eklemeyeceğim (birincisi, erken, bir sürü başka hata var ve ikincisi, bira için yapılmış , daha sonra gözden geçirmem gerekiyor)
ama sonunda onu elde etmek istediğiniz açık ve bunun teknik olarak mümkün olduğuna dair bir güven var. Evet, evet, tam kodlu bir GUI de mümkündür.
Bu arada, yerel GUI oluşturucular için, pencere (alfa kanalına sahip olan) bolca şu şekilde açıklanmıştır (bu tcl'dir):
Dosyaları biraz temizledim - şimdi ZIP'de Göstergeler, Komut Dosyaları, Uzmanlar, Kitaplıklar, Dahil Et klasörlerinde düzenlenmiştir ve teorik olarak kitaplığı kurmak oldukça basittir
veri dizini içindeki arşivi açın ve her şey yerine oturmalı ve çalışmaya hazır olmalıdır (Tcl'nin kendisini de yüklemeniz gerekmesi dışında :-) ).
Sağlanan API şu şekildedir:
oldukça kompakt ve kullanışlı görünüyor.
Bahsedilen zip arşivini ekliyorum, aniden birinin ihtiyacı olursa ve kurulum sırasında sorun çıkarsa, buraya veya kişisel olarak yazın.
akıllara durgunluk veren örnek
"anında derleme ve bir MQL betiği içinde ATcl'den C/C++ kullanma"
Beta için tebrikleri kabul ediyorum! :-)
Kısaca, artık MT4'ten ATcl üzerinden kolayca erişilebilen özellikler şunlardır:
Tcl Özellikleri
basit - basit komut dosyası dili taşınabilir - geliştirilen komut dosyalarını ve algoritmaları herhangi bir sistemde kullanabilirsiniz (Windows, Linux, Android ve diğerleri) olay odaklı - dahili olay modeli nesne yönelimi - modern OOP'nin tüm özellikleri iş parçacığı oluşturma - çok iş parçacıklı programlamanın tüm özelliklerini kullanabilirsiniz - sistem iş parçacıkları, muteksler, koşul değişkenleri, kalıcı depolama ile paylaşılan değişkenler. sanal dosya sistemi - dosya sistemi olarak zip, tar, ftp, webdav'a şeffaf erişim veritabanı - birleşik bir arabirim tdbc ve sqlite, tcl çekirdeğinin bir parçasıdır. PostresSQL, MySQL, MonetDB, Oracle ve herhangi bir ODBC veritabanları aktif olarak desteklenmektedir. ağ iletişimi - istemci/sunucu: tcp,http,mail,websocket,zmq. İhtiyaç duyabileceğiniz hemen hemen tüm protokoller ve hizmetler. kriptografi - sağlama toplamları, elektronik imzalar, kripto karmaları. Simetrik ve asimetrik şifreleme. Açık Anahtar Altyapısı, TLS, SASL Desteği windows - Windows ortamında çalışmak için araçlar - kayıt defteri, DDE, COM istemcisi/sunucusu, ldap istemcisi tcllib - Tcl standart kitaplığı ek özellikler sağlar (yazılım araçları, kelime işleme, matematik ve istatistik ve daha fazlası) c/c++ - TinyC derleyicisi kitaplıklarda bulunur ve Critcl paketi, sistem C/C++ derleyicisini (vc,gcc,clang) kullanmanıza izin verir. Modüller ve işlevler anında derlenebilir ve kullanılabilir en bilinenleri - bir çok kitaplık ve sistem Tcl API sağlar, programlarınızda rahatlıkla kullanabilirsiniz
blog sitesinde daha eksiksiz: https://www.mql5.com/en/blogs/post/715411 (kimse okumaz :-))ve proje sayfasında http://luxtrade.tk/atcl:start
Konuyla ilgili herhangi bir soruyu yanıtlamaktan, fikirleri ve yorumları dinlemekten memnuniyet duyacağım.
Tebrikler!
Codebase ve makalelerdekine benzer bazı pratik örnekler yapmak faydalı olacaktır.
Örneğin, MySQL, Telegram ile iletişim veya sadece iki terminalin TCP üzerinden bağlantısı.
Tebrikler!
Codebase ve makalelerdekilere benzeterek bazı pratik örnekler yapmak faydalı olacaktır.
Örneğin, MySQL, Telegram ile iletişim veya sadece iki terminalin TCP üzerinden bağlantısı.
demolarda (arşivlenmiş):
- tırnakları SQLite veritabanına kaydeden komut dosyası. MySQL için her şey aynıdır, sadece herkesin makinede olmamasıdır :-)
- bir gösterge ve bir danışman şeklinde tcp sunucusu (iki seçenek) - başlattıktan sonra, 8000 numaralı bağlantı noktasına bağlantıları kabul eder (başlangıçta ayarlarda ayarlanabilir) ve gelen keneleri orada yayınlar. ohm'a telnet atıp görebilirsin
- Periyodik olarak bu siteye giden http client göstergesi, işler sayfasını alır, ayrıştırır ve grafiğe yorum şeklinde kısa bilgiler verir.
Demolar elbette yenilenecektir, fikir sunabilirsiniz.
yol boyunca, muhtemelen gösteren demolar yapacağım
- "web sunucusu", bir tarayıcının kullanılabileceğini ve nasıl yapıldığını gösterir
- GlobalVariable'ın genişletilmiş bir analogu olan TSV'yi (iş parçacığı paylaşımlı değişkenler) kullanma - uygulamalarda paylaşılan verileri kullanma
:-) açık, özlü ve en azından biraz kullanışlı hale getirmek için onlar için komut dosyaları bulmanız gerekir.
Burada oldukça etkileyici bir Skype diyaloğu vardı, bir kısmını seslendirmeyi gerekli görüyorum çünkü faydalı olduğunu düşünüyorum :-)
1. Neden biraz Tcl ve daha popüler değil Python, Ruby
Tabii ki, öncelikle, çünkü onu iyi tanıyorum ve onu sadece ticaret için kullanmıyorum. Ve teknolojik nokta da önemlidir - Python ve Ruby, metatrader'ın iş parçacığı modeliyle uyumlu değildir. Teorik olarak çalıştırılabilirler, ancak ya çok düşük bir API kazmanız ya da dilin kendisine yama yapmanız gerekir.Aynı şey R ve diğerleri için de geçerlidir.
Bunların çalışması için, " bir işlem ve bir iş parçacığı içinde birkaç yalıtılmış örnek bağımsız olarak oluşturulabilir " koşulunun gözlemlenmesi gerekir.
Bildiğim betik dillerinden bunu sadece Lua yapabilir, ancak bunu kendiniz anlıyorsunuz, "standartları olmayan bir dil" ..
Bu arada, tüm DLL geliştiricileri ürünlerinde kalın yazı tipine dikkat etmelidir.
2. Verileri doğru ve hızlı bir şekilde nasıl hesaplayabilirim?
Metatrader'da hesaplamaları doğru ve hızlı bir şekilde yapmaktır. Aslında bunun için yapılır - veri elde etmek, hesaplamalar yapmak, emir vermek. Yeteneklerini DLL'lerinizde çoğaltmak aptalca. Sonunda, MQL'nin kendisi C++'a oldukça benzer ve bir programcının içinde yazmaya başlaması bir veya iki gün meselesidir. Ve DLL'de, platformun kapsamadığı ve fiziksel olarak kapsayamayacağı şeyleri yapmanız gerekir - veritabanları, hizmetler, entegrasyon vb. ile iletişim. Ayrıca MetaTrader dışında nelerin kullanılabilecekleri ve nelerin kullanılması gerektiği.
3. 5-ki için sürüm nerede ve ne zaman
En kısa sürede, yani hemen :-) Teknik olarak, bir DLL dosyasını 4'ten 5'e sürüklemek hiç de zor değil, ancak betiklerin umurunda değil. Tcl hem 32 hem de 64 bittir. Ama 4-ke'de geliştirmek çok daha uygun, dokunmuyorlar :-) stabil ve sürpriz beklenmiyor. Ancak 5'inde, platform geliştiricilerinin "hizmet görevleri" (göstergeler, komut dosyaları ve danışmanlarla birlikte) vaat etmesi bekleniyor ve kesinlikle DLL ve iş parçacıkları arasındaki ilişkide bir şeyler art arda birkaç yapıyı değiştirecek. Yerleşene kadar bu, 5 için bir sürüm olmayacak.
Çalışma sırasında ve kullanıcı incelemelerine göre msvcrt'den DLL bağımlılıkları ile ilgili sorunlar tespit edildi.
ve aynı DLL'nin aranmasıyla ilgili küçük bir (benim) hata. Göreli yollar ATcl.mqh başlığına yazılmıştır :-)
her şey düzeltildi, düzeltilmiş sürümü (ekli), kurulum talimatlarını alabilirsiniz - geleneksel http://luxtrade.tk/atcl:install adresinden
DLL geliştiricileri için yapılan manipülasyonlar hakkında faydalı bilgiler:
- DLL, tanımlı -D_CRTIMP_ALTERNATIVE ile derlenir ve bu, derleyiciyi CRT'den mümkün olan hemen hemen her şeyi "satır içi" yapmaya zorlar :-)
- DLL artık /MT anahtarıyla oluşturulmuştur; bu, bağlayıcıyı statik bağlantı kullanmaya ve gereksiz bağımlılıklar oluşturmamaya zorlar. Yeniden dağıtılabilir (VC destek paketi) türünün artık taşınmasına gerek yok
DLL'nin boyutu büyüdü, ancak bağımlılıklar azaldı ve kitaplığı taşımak daha kolay olmalı
PS/ küçük güncelleme - ekli arşivi değiştirdi. Kitaplık tam çoklu iş parçacığı desteği ile oluşturulmuştur