ATcl - MT4 için Tcl yorumlayıcısı - sayfa 4

 
Алексей Барбашин :

Kenelerden başka bir şey sıkıştırmak mümkün mü? )))

sadece tiki yok :-)

"Çıktığı" anda, yapıyı tamamlamak / değiştirmek imkansız olacaktır.. Bu nedenle, yukarıdaki tabloda bir şey eksikse, hemen söylemeye değer.

ATcl demosu - Cawt Excel

En basit kullanım senaryosu - kullanıcı/tüccar göstergeyi başlatır, Excel'i açar ve tabloyu doldurmaya başlar.

Kullanıcı bunu tamamlayabilir ve herhangi bir formül girebilir. Sonuç, MT4 tablosunda ve gösterge arabelleklerinde (çizgiler/oklar/zikzaklar) görüntülenecektir.

Yani Excel sahibi bir kişi MT4 için kendisi için bir gösterge yapabilecektir.

 

Festival ekran görüntüsü:

ATcl - Mutlu Zafer Bayramı!

Yaklaşan demodan:
Excel'de "anında" satırları formüllerine göre hesaplanır, oradan bir tebrik işareti alınır, faydalı olanlara bağlantılar tıklanabilir.
işte plakanın kendisi:
ATcl - tablo

 
Neden Excel? Belki daha işlevsel bir şey?
 
Алексей Тарабанов :
Neden Excel? Belki daha işlevsel bir şey?

Herhangi bir tüccarın Excel'i bilmesi gerçeğinden. (belki de, elbette, parayla çalışırken onu nasıl kullanacağını bilmeyen benzersiz insanlar vardır)

Ve bu demo örneğin onun hiç uğraşmadan kendi hesaplamalarıyla kendi indikatörünü yapmasına imkan verecek.
Ve bir programcı demoda genel olarak MS-Office ile nasıl çalışacağını ve ürünlerine, örneğin Word ve PowerPoint'teki raporları, OutLook ve OneNote notlarından çizelgeleri nasıl ekleyebileceğini görebilir.

OO::Calc seçeneği, OpenOffice API'lerinin olmaması nedeniyle uygun değildir.

 

Sürüm yayınlanmaya hazırlanıyor - yeni bir alana geçiş ve Set yöntemlerindeki API değişiklikleri nedeniyle eski demoları kontrol ediyorum ve rıhtımları düzenliyorum.

Web soketleriyle çalışmak için uzun süredir vaat edilen bir demo düzeltildi. Hata benimdi - Zamanlayıcının içindeki "ebedi döngüyü" yanlışlıkla büktüm :-) Terminal en beklenmedik yerlerde asılı kaldı ve o anda asla yakalanmadı. Ve şimdi taze bir görünümle geri döndü ve işte burada!

ATcl - web soketi

ekranda - aynı anda iki demo başlatılır, ilki periyodik ve doğru bir şekilde site sayfasını alır ve serbest çalışmayı ayrıştırır (görünüşe göre sonsuza kadar banyodayım)

ikincisi (kaydedilenler), Binance.com bağlantısını açan, mevcut sembole abone olan ve akışı gerçek zamanlı olarak okuyan aynı web soketidir.

 

Tk çalışmaya başladı - komut dosyalarıyla bir GUI oluşturmak mümkün olacak.

ATcl - Tk

mini panel, widget'larının düzenlendiği bir Tk penceresidir.

Her şey MT4'ten başlatılır, veriler pencereye aktarılır ve pencereden okunur.

Çizilen GUI'nin karmaşıklığına bağlı olmayan MQL kaynağı:

 #include <ATcl/ATcl.mqh>

bool hasTimer= false ;
ATcl *tcl= NULL ;
Tcl_Obj panel= 0 ,methodMessages= 0 ,methodOnTick= 0 ,methodDestroy= 0 ;

int OnInit ()
{
   // инициализируем библиотеку и интерпретатор разом
   if (ATcl_OnTkInit()== 0 || (tcl= new ATcl)== NULL || !tcl.Ready()) {
       return INIT_FAILED ;
   }
   // нам требуется Tk
   tcl.Eval( "package require Tk" );
   // "спрячем" корневое окно
   tcl.Eval( "wm withdraw ." );
   // загрузим исходник класса
   tcl.Eval( "source MQL4/Files/ATcl/TradePanel.tcl" );
   // создаём экземпляр - запускаем панельку
   tcl.Set( "Symbol" , _Symbol ); // подствим переменную в след.выражение
   panel=tcl.ObjEval( "TradePanel new .tradePanel $Symbol" );
   if (panel== 0 ) {
       return INIT_FAILED ;
   }
   tcl.Ref(panel);
   // будем пользоваться этими методами:
   methodMessages=tcl.Ref(tcl.Obj( "Messages" ));
   methodOnTick=tcl.Ref(tcl.Obj( "OnTick" ));
   methodDestroy=tcl.Ref(tcl.Obj( "destroy" ));
   hasTimer= EventSetMillisecondTimer ( 100 );
   
   return ( INIT_SUCCEEDED );
}
void OnDeinit ( const int reason)
{
   if (hasTimer) EventKillTimer ();
   if (tcl!= NULL ) {
       if (panel!= 0 )  tcl.Call(panel,methodDestroy);
      tcl.Unref(panel);
      tcl.Unref(methodMessages);
      tcl.Unref(methodOnTick);
      tcl.Unref(methodDestroy);
      tcl.Eval( "destroy ." );
       delete tcl;
   }
   ATcl_OnDeinit(reason);
}
void OnTick ()
{
   CheckMessages();
   tcl.Call(panel,methodOnTick,tcl.Obj( Bid ),tcl.Obj( Ask ));
}

void OnTimer ()
{
   CheckMessages();
   tcl.Eval( "update idletasks" );
}
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   if ( ! hasTimer) EventSetMillisecondTimer ( 100 );
   CheckMessages();
}

void OnGUI(Tcl_Obj msg) {
   tcl.Ref(msg);
   PrintFormat ( "On GUI: %s" ,tcl.String(msg));
   tcl.Unref(msg);
}

void CheckMessages() {
   tcl.Update();
   if (tcl.Call(panel,methodMessages)==TCL_OK) {
      Tcl_Obj msgs=tcl.Ref(tcl.Result());
       if (tcl.Count(msgs)> 0 ) {
         // есть сообщения от GUI
         for ( int i=tcl.Count(msgs)- 1 ;i>= 0 ;i--) {
            Tcl_Obj msg=tcl.ListIndex(msgs,i);
             if (msg!= 0 ) OnGUI(msg);
         }
      }
      tcl.Unref(msgs);
   }
}
 
Maxim Kuznetsov :

Tk çalışmaya başladı - komut dosyalarıyla bir GUI oluşturmak mümkün olacak.


mini panel, widget'larının düzenlendiği bir Tk penceresidir.

Her şey MT4'ten başlatılır, veriler pencereye aktarılır ve pencereden okunur.

Çizilen GUI'nin karmaşıklığına bağlı olmayan MQL kaynağı:

Süper! Beklemek...

 
Maxim Kuznetsov :

Tk çalışmaya başladı - komut dosyalarıyla bir GUI oluşturmak mümkün olacak.


mini panel, widget'larının düzenlendiği bir Tk penceresidir.

Her şey MT4'ten başlatılır, veriler pencereye aktarılır ve pencereden okunur.

Çizilen GUI'nin karmaşıklığına bağlı olmayan MQL kaynağı:

ve işte grafikleri (panel) uygulayan biraz desteklenmiş bir tcl kaynağı:
 # простая торговая панель
oo:: class create TradePanel {
variable W                      ; # имя окна Tk
variable Symbol          ; # символ
variable Bid             ; # значение Bid
variable Ask             ; # значение Ask
variable LabelBid       ; # имя виджета с Bid 
variable LabelAsk       ; # имя виджета с Ask
variable Outgoing       ; # простая очередь исходящих (чтобы MT её считывал, сами мы MT вызывать не можем)
constructor { w symbol } {
        set W $w
        set Symbol $symbol
        set Bid 0
        set Ask 0
        set LabelBid ""
        set LabelAsk ""
        set Outgoing {}
        my Draw
}
destructor {
        catch { destroy $W }
}
method Draw { } {
         # создаём окно
        set W [ toplevel $W ]   ; # toplevel окно
        wm protocol $W WM_DELETE_WINDOW {}      ; # запретим закрывать по "крестику"
        wm title $W $ Symbol              ; # выведем заголовок
         # сделаем выпадающее меню с единственным пунктом About
        set mainMenu [ menu $W.menu -tearoff 0 ]
        $mainMenu add cascade -label "Help" -menu $W.menu.help
        set helpMenu [ menu $W.menu.help -tearoff 0 ]
        $helpMenu add command -label "About" -command [ list tk_messageBox -parent $W -title "TradePanel" -message "ATcl demonstation" ]
         # назначим его как меню окна
        $W configure -menu $W.menu
         # и в окне всякие элементы
        set f [ frame $W.panel ]
        label $f.title -text $ Symbol -fg grey -font "{Arial Black}"
        set LabelBid [ label $f.bid  -fg grey -font "{Arial Black}" ]
        set LabelAsk [ label $f.ask  -fg grey -font "{Arial Black}" ]
        button $f.buy  -text "Buy"   -fg blue -font "{Arial Black}" -command [ list [ self ] OnBuyPressed ] ; # кнопка Buy - при нажатии вызовет собственный метод OnBuyPressed
        button $f.sell -text "Sell" -fg red -font "{Arial Black}" -command [ list [ self ] OnSellPressed ]
         # проще всего располагать элементы в таблице
        grid $f.title -row 0 -column 0 -columnspan 2 -sticky "ew"
        grid $f.bid -row 1 -column 0 -sticky "e"
        grid $f.ask -row 1 -column 1 -sticky "w"
        grid $f.sell -row 2 -column 0 -sticky "nsew"
        grid $f.buy -row 2 -column 1 -sticky "nsew"
        grid columnconfigure $f 0 -uniform same
        grid columnconfigure $f 1 -uniform same
         # фрейм с контролами - на всё окно
        pack $f -fill both -expand yes
        
         return $W
}
method OnBuyPressed {} {
         # при нажатии кнопки Buy :
         # добавить в исходящий список сообщение 
        lappend Outgoing [ list "buy" [ clock milliseconds ] ]
}
method OnSellPressed {} {
         # при нажатии кнопки Sell :
         # добавить в исходящий список сообщение 
        lappend Outgoing [ list "sell" [ clock milliseconds ] ]
}
# метод будет вызываться из MT когда приходит новый тик
# поменяем значения в виджетах и раскрасим заодно 
method OnTick { bid ask } {
         if { $bid == $ Bid } {
                $LabelBid configure -fg grey
        } elseif { $bid > $ Bid } {
                $LabelBid configure -fg blue
        } else {
                $LabelBid configure -fg red
        }
         if { $ask == $ Ask } {
                $LabelAsk configure -fg grey
        } elseif { $ask > $ Ask } {
                $LabelAsk configure -fg blue
        } else {
                $LabelAsk configure -fg red
        }
        set Bid $bid
        set Ask $ask
        $LabelAsk configure -text $ Ask
        $LabelBid configure -text $ Bid
}
# метод будет вызываться из MT чтобы считать все сообщения
method Messages {} {
        set msgs $Outgoing
        set Outgoing {}
         return $msgs
}

export OnBuyPressed OnSellPressed
export OnTick Messages
} ; # / class TradePanel

##### TEST CASE для автономного запуска #####
if { [ info exists argv0 ] && $argv0 == [ info script ] } {
        package require Tk
        set panel [ TradePanel new .tradePanel "EURUSD" ]
        $panel OnTick 1.2345 1.1234
        update
        wm withdraw .
        tkwait window .tradePanel
        exit
}
Grafiklerle ilgili küçük hatalar ekledim, bir fil kadar mutluyum!

Yarın kütüphaneyi yayınlayacağım. sabah akşamdan daha akıllıdır - öğleden sonra her şeyi tekrar kontrol edip yayınlayacağım
 

ATcl Beta 2 sürümü

Hafif bir gecikmeyle ATcl'nin yeni bir sürümü yayınlandı.

Sürüm ayrıntıları, bkz. http://nektomk.ru/atcl:beta2

Domain ile ilgili sorunlar olduğu için SourceForge üzerinde dağıtımın kullanılabilirliğini sağlamak için bir proje yapılmıştır: https://sourceforge.net/projects/mt-atcl/

Projeyi indirebilirsiniz. SF sayfasından veya normal indirme sayfasından: http://nektomk.ru/atcl:install

Arşiv de ektedir.

Yeni özellikler:

- WebSockets ile çalışma demosu eklendi

- Excel yönetimi ve onunla veri alışverişi demosu eklendi

- Tk çalışmaya başladı (ayrıca bir demo var) - artık en kapsamlı GUI'yi hızlı ve kolay bir şekilde oluşturabilirsiniz

Bilinen hata:

- en son anda tespit edildi: ATcl göstergeleri ve Tk kullanan bir Uzman Danışman aynı anda tek bir çizelgede yüklenirken bir çakışma var. Hatanın doğası açıktır, ancak henüz kodda yer almamıştır ve bu nedenle henüz düzeltilmemiştir.
Ayrı ayrı, hepsi harika çalışıyor, bu yüzden gecikmeli olsa da, bu hatayı içeren bir sürüm yayınlamaya karar verdim.

not. Ya sitedeki aksaklıklar ya da tarayıcı ama bu mesajı 3. kez yazıyorum.

ATcl - "beta 2" version
ATcl - "beta 2" version
  • nektomk.ru
Рад представить новую версию ATcl. Была продолжена работа по унификации и упрощению API, удалось добиться стабильной работы Tk в экспертах. Демки пополнились двумя полезными демонстрациями. В новой версии API Изменён синтаксис методов Set - они всегда принимают непосредственное MQL значение в качестве параметров. Для того чтобы присвоить...
Dosyalar:
atcl.zip  6651 kb
 
Maxim Kuznetsov :

ATcl Beta 2 sürümü

Hafif bir gecikmeyle ATcl'nin yeni bir sürümü yayınlandı.

Sürüm ayrıntıları, bkz. http://nektomk.ru/atcl:beta2

Domain ile ilgili sorunlar olduğu için SourceForge üzerinde dağıtımın kullanılabilirliğini sağlamak için bir proje yapılmıştır: https://sourceforge.net/projects/mt-atcl/

Projeyi indirebilirsiniz. SF sayfasından veya normal indirme sayfasından: http://nektomk.ru/atcl:install

Arşiv de ektedir.

Yeni özellikler:

- WebSockets ile çalışma demosu eklendi

- Excel yönetimi ve onunla veri alışverişi demosu eklendi

- Tk çalışmaya başladı (ayrıca bir demo var) - artık en kapsamlı GUI'yi hızlı ve kolay bir şekilde oluşturabilirsiniz

Bilinen hata:

- en son anda tespit edildi: ATcl göstergeleri ve Tk kullanan bir Uzman Danışman aynı anda tek bir çizelgede yüklenirken bir çakışma var. Hatanın doğası açıktır, ancak henüz kodda yer almamıştır ve bu nedenle henüz düzeltilmemiştir.
Ayrı ayrı, hepsi harika çalışıyor, bu yüzden gecikmeli olsa da, bu hatayı içeren bir sürüm yayınlamaya karar verdim.

not. Ya sitedeki aksaklıklar ya da tarayıcı ama bu mesajı 3. kez yazıyorum.

İyi! Test edelim! )))