ATcl - Interprète Tcl pour MT4 - page 4

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

Y a-t-il autre chose que vous pouvez tirer des tiques ? )))

Il n'y a pas que les tiques :-)

S'il est "libéré", il ne sera pas possible d'ajouter/modifier la structure. Donc, si quelque chose manque dans le tableau donné, il faut le dire tout de suite.

Démonstration de l'ATcl - Cawt Excel

Le scénario d'utilisation le plus simple - l'utilisateur/trader lance l'indicateur, il ouvre Excel et commence à remplir le tableau.

L'utilisateur peut le remplir et ajouter des formules. Le résultat sera affiché dans le graphique MT4 et dans les tampons des indicateurs (lignes/flèches/yngraphes).

Autrement dit, un utilisateur d'Excel peut créer un indicateur pour MT4.

 

Capture d'écran de vacances :

ATcl - joyeux jour de victoire !

D'une prochaine démo :
Les lignes à la volée sont calculées dans Excel à l'aide de ses formules, la table de salutations en est également issue, et les liens vers tous les éléments utiles sont cliquables.
Voici le tableau lui-même :
ATcl - table

 
Pourquoi Excel ? Peut-être quelque chose de plus fonctionnel ?
 
Алексей Тарабанов:
Pourquoi Excel ? Peut-être quelque chose de plus fonctionnel ?

Parce que tout trader connaît Excel. (Bien sûr, il peut y avoir des personnes qui travaillent avec de l'argent et qui ne savent pas comment l'utiliser).

Cette démo leur permet, par exemple, de créer leur propre indicateur avec leurs propres calculs sans avoir à trop réfléchir.
Et le programmeur peut utiliser la démo pour apprendre à travailler avec MS-Office et joindre les rapports de Word et PowerPoint, les plannings d'OutLook et les notes de OneNote à ses propres produits.

La version avec OO::Calc ne convient pas, car il n'y a pas d'interface de programmation OpenOffice.

 

La version est prête à être publiée - déplacement vers un nouveau domaine et modification de l'API dans les méthodes Set, vérification des démos précédentes et correction des docks.

Correction de la démo promise depuis longtemps pour le travail avec les Web-sockets. Mon erreur - j'ai fait par inadvertance "boucle éternelle" à l'intérieur de timer :-). Le terminal s'accroche dans les endroits les plus inattendus et je ne l'ai jamais attrapé en temps voulu. Je suis revenu avec un nouveau regard et c'était là !

ATcl - socket web

Dans la capture d'écran - en exécutant deux démos à la fois, la première prend périodiquement et correctement une page du site et analyse la freelance (où je suis probablement banni pour toujours)

La deuxième (ce qui est affiché dans le journal) est le même socket web qui ouvre la connexion Binance.com, s'abonne au symbole actuel et lit le flux en temps réel.

 

Tk a commencé à fonctionner - il sera possible de construire une interface graphique avec des scripts.

ATcl - Tk

Le mini-panel est la fenêtre Tk dans laquelle ses widgets sont disposés.

Tout fonctionne à partir de MT4, les données sont transférées vers la fenêtre et lues depuis la fenêtre.

La source MQL, qui ne dépend pas de la complexité de l'interface graphique à dessiner :

#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 a commencé à fonctionner - il sera possible de construire une interface graphique avec des scripts.


Le mini-panel est la fenêtre Tk dans laquelle ses widgets sont disposés.

Tout fonctionne à partir de MT4, les données sont transférées vers la fenêtre et lues depuis la fenêtre.

La source MQL, qui ne dépend pas de la complexité de l'interface graphique à dessiner :

Super ! Je suis impatient...

 
Maxim Kuznetsov:

Tk a commencé à fonctionner - il sera possible de construire une interface graphique avec des scripts.


le mini-panel est la fenêtre Tk dans laquelle ses widgets sont disposés.

Tout fonctionne à partir de MT4, les données sont transférées vers la fenêtre et lues depuis la fenêtre.

La source MQL, qui ne dépend pas de la complexité de l'interface graphique à dessiner :

Voici le sours tcl légèrement modifié qui implémente les graphiques (panneau) :
#  простая торговая панель
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
}
Je viens de terminer tous les petits bugs liés aux graphismes, j'en suis content !

Je posterai la bibliothèque demain matin - je la vérifierai à nouveau dans l'après-midi et la posterai.
 

ATcl Beta 2 release

Avec un léger retard, une nouvelle version d'ATcl a été publiée.

Pour plus de détails sur la version, voir http://nektomk.ru/atcl:beta2

Comme il y a eu des problèmes avec le domaine, pour rendre la distribution disponible, un projet sur SourceForge a été fait : https://sourceforge.net/projects/mt-atcl/.

Le projet peut être téléchargé à partir de la page SF ou de la page de téléchargement habituelle : http://nektomk.ru/atcl:install.

archive également jointe

Nouvelles fonctionnalités :

- Ajout d'une démo sur la gestion de WebSocket

- Ajout d'une démo sur la gestion d'Excel et l'échange de données

- Tk est maintenant opérationnel (la démo est également disponible) - vous pouvez maintenant créer rapidement et facilement l'interface graphique la plus tentaculaire.

Bogue connu :

- Au dernier moment, il a été détecté : il y a un conflit lors du chargement simultané sur un graphique d'un indicateur ATcl et d'un Expert Advisor utilisant Tk. La nature de l'erreur est claire, mais elle n'a pas encore été enregistrée dans le code et n'a donc pas encore été corrigée.
Séparément, ils fonctionnent tous bien, j'ai donc décidé de le publier avec ce bogue.

PS. Que ce soit des glitches du site ou du navigateur, mais ce message je le remplis 3ème fois.

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

ATcl Beta 2 release

Avec un léger retard, une nouvelle version d'ATcl a été publiée.

Pour plus de détails sur la version, voir http://nektomk.ru/atcl:beta2

Comme il y a eu des problèmes avec le domaine, pour rendre la distribution disponible, un projet sur SourceForge a été fait : https://sourceforge.net/projects/mt-atcl/.

Le projet peut être téléchargé à partir de la page SF ou de la page de téléchargement habituelle : http://nektomk.ru/atcl:install.

L'archive est également jointe

Nouvelles fonctionnalités :

- Ajout d'une démo sur la gestion de WebSocket

- Ajout d'une démo sur la gestion d'Excel et l'échange de données

- Tk est maintenant opérationnel (la démo est également disponible) - vous pouvez maintenant créer rapidement et facilement l'interface graphique la plus tentaculaire.

Bogue connu :

- Au tout dernier moment, j'ai trouvé : il y a un conflit avec le chargement simultané des indicateurs ATcl et de l'EA utilisant Tk sur un graphique. La nature de l'erreur est claire, mais elle n'a pas encore été enregistrée dans le code et n'a donc pas encore été corrigée.
Séparément, ils fonctionnent tous bien, j'ai donc décidé de le publier avec ce bogue.

PS. Que ce soit des glitches du site ou du navigateur, mais ce message je le remplis 3ème fois.

Super ! Testons-le ! )))

Raison: