ATcl - Interprete Tcl per MT4 - pagina 4

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

C'è qualcos'altro che si può spremere dalle zecche? )))

Non sono solo zecche :-)

Se sarà "rilasciato", non sarà possibile aggiungere/modificare la struttura. Quindi se manca qualcosa nella tabella data - vale la pena di dirlo subito.

ATcl demo - Cawt Excel

Lo scenario d'uso più semplice - l'utente/trader avvia l'indicatore, apre Excel e inizia a riempire la tabella.

L'utente può riempirlo e aggiungere formule. Il risultato sarà visualizzato nel grafico MT4 e nei buffer degli indicatori (linee/frecce/indicatori).

Cioè, un utente di Excel può creare un indicatore per MT4

 

Schermata delle vacanze :

ATcl - felice giorno della vittoria!

Da una demo in arrivo:
Le linee al volo sono calcolate in Excel usando le sue formule, anche la tabella dei saluti è presa da lì, e i link a tutte le cose utili sono cliccabili.
Ecco la tabella stessa:
ATcl - tabella

 
Perché Excel? Forse qualcosa di più funzionale?
 
Алексей Тарабанов:
Perché Excel? Forse qualcosa di più funzionale?

Perché ogni trader conosce Excel. (Naturalmente, ci possono essere alcune persone che lavorano con il denaro e non sanno come usarlo).

Questa demo permette loro, per esempio, di fare il proprio indicatore con i propri calcoli senza dover pensare troppo.
E il programmatore può usare la demo per imparare a lavorare con MS-Office e allegare i rapporti di Word e PowerPoint, i programmi di OutLook e le note di OneNote ai propri prodotti.

La versione con OO::Calc non è adatta, perché non esiste un'interfaccia di programmazione di OpenOffice.

 

La versione è pronta per il rilascio - passando al nuovo dominio e cambiando l'API nei metodi Set, controllando le demo precedenti e fissando i dock.

Corretto il lungo demo promesso per lavorare con i Web-sockets. Errore mio - inavvertitamente ho fatto "eternal loop" dentro a timer :-). Il terminale si blocca nei posti più inaspettati e non l'ha mai preso a tempo debito. E ora è tornato con uno sguardo nuovo ed eccolo lì!

ATcl - presa web

Nello screenshot - eseguendo due demo contemporaneamente, il primo prende periodicamente e correttamente una pagina del sito e analizza il freelance (dove sono probabilmente bandito per sempre)

Il secondo (quello che viene visualizzato nel log) è lo stesso web socket che apre la connessione a Binance.com, si iscrive al simbolo corrente e legge il flusso in tempo reale

 

Tk ha iniziato a funzionare - sarà possibile costruire una GUI con degli script.

ATcl - Tk

Il mini-pannello è la finestra Tk in cui sono disposti i suoi widget.

Tutto funziona da MT4, i dati vengono trasferiti alla finestra e letti dalla finestra.

Il MQL-source, che non dipende dalla complessità della GUI da disegnare:

#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 ha iniziato a funzionare - sarà possibile costruire una GUI con degli script.


Il mini-pannello è la finestra Tk in cui sono disposti i suoi widget.

Tutto funziona da MT4, i dati vengono trasferiti alla finestra e letti dalla finestra.

Il MQL-source, che non dipende dalla complessità della GUI da disegnare:

Super! Guardando avanti...

 
Maxim Kuznetsov:

Tk ha iniziato a funzionare - sarà possibile costruire una GUI con degli script.


il mini-pannello è la finestra Tk in cui sono disposti i suoi widget.

Tutto funziona da MT4, i dati vengono trasferiti alla finestra e letti dalla finestra.

Il MQL-source, che non dipende dalla complessità della GUI da disegnare:

Ecco il sours tcl leggermente modificato che implementa la grafica (pannello):
#  простая торговая панель
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
}
Ho appena finito tutti i piccoli bug relativi alla grafica, ne sono felice!

Domani mattina posterò la biblioteca - la controllerò di nuovo nel pomeriggio e la posterò
 

Rilascio di ATcl Beta 2

Con un leggero ritardo, è stata rilasciata una nuova versione di ATcl.

Dettagli sul rilascio, vedere http://nektomk.ru/atcl:beta2

Poiché ci sono stati problemi con il dominio, per rendere disponibile la distribuzione è stato fatto un progetto su SourceForge: https://sourceforge.net/projects/mt-atcl/

Il progetto può essere scaricato dalla pagina SF o dalla solita pagina di download: http://nektomk.ru/atcl:install

archivio anche allegato

Nuove caratteristiche:

- Aggiunta la demo della gestione dei WebSocket

- Aggiunta la demo della gestione di Excel e dello scambio di dati

- Tk è ora attivo e funzionante (è disponibile anche la demo) - ora puoi creare rapidamente e facilmente la più tentacolare GUI

Bug noto:

- All'ultimo momento è stato rilevato: c'è un conflitto quando si carica simultaneamente su un grafico un indicatore ATcl e un Expert Advisor utilizzando Tk. La natura dell'errore è chiara, ma non è stato ancora registrato nel codice e quindi non è stato ancora risolto.
Separatamente, funzionano tutti bene, quindi ho deciso di rilasciarlo con questo bug.

PS. Se glitch del sito o del browser, ma questo messaggio che riempio 3a volta.

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

Rilascio di ATcl Beta 2

Con un leggero ritardo, è stata rilasciata una nuova versione di ATcl.

Dettagli sul rilascio, vedere http://nektomk.ru/atcl:beta2

Poiché ci sono stati problemi con il dominio, per rendere disponibile la distribuzione è stato fatto un progetto su SourceForge: https://sourceforge.net/projects/mt-atcl/

Il progetto può essere scaricato dalla pagina SF o dalla solita pagina di download: http://nektomk.ru/atcl:install

L'archivio è anche allegato

Nuove caratteristiche:

- Aggiunta la demo della gestione dei WebSocket

- Aggiunta la demo della gestione di Excel e dello scambio di dati

- Tk è ora attivo e funzionante (è disponibile anche la demo) - ora puoi creare rapidamente e facilmente la più tentacolare GUI

Bug noto:

- All'ultimo momento ho trovato: c'è un conflitto con il caricamento simultaneo di indicatori ATcl e EA usando Tk su un grafico. La natura dell'errore è chiara, ma non è stato ancora registrato nel codice e quindi non è stato ancora risolto.
Separatamente, funzionano tutti bene, quindi ho deciso di rilasciarlo con questo bug.

PS. Se glitch del sito o del browser, ma questo messaggio che riempio 3a volta.

Grande! Mettiamolo alla prova! )))