ATcl - Tcl-Interpreter für MT4 - Seite 4

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

Gibt es noch etwas, das man aus Zecken herausquetschen kann? )))

Es sind nicht nur Zecken :-)

Wenn es "freigegeben" wird, ist es nicht möglich, die Struktur hinzuzufügen/zu ändern. Wenn also in der angegebenen Tabelle etwas fehlt, sollte man es sofort mitteilen.

ATcl-Demo - Cawt Excel

Das einfachste Anwendungsszenario: Der Benutzer/Händler startet den Indikator, öffnet Excel und beginnt, die Tabelle zu füllen.

Der Benutzer kann sie ausfüllen und Formeln hinzufügen. Das Ergebnis wird im MT4-Chart und in den Indikatorpuffern (Linien/Pfeile/Gygraphen) angezeigt.

Das heißt, ein Excel-Benutzer kann einen Indikator für MT4 erstellen

 

Bildschirmfoto Urlaub :

ATcl - Herzlichen Glückwunsch zum Sieg!

Aus einer kommenden Demo :
Die fliegenden Linien werden in Excel mit Hilfe der dortigen Formeln berechnet, die Begrüßungstabelle stammt ebenfalls von dort, und die Links zu all den nützlichen Dingen sind anklickbar.
Hier ist die Tabelle selbst:
ATcl - Tabelle

 
Warum Excel? Vielleicht etwas Funktionelleres?
 
Алексей Тарабанов:
Warum Excel? Vielleicht etwas Funktionelleres?

Denn jeder Händler kennt Excel. (Natürlich mag es Menschen geben, die mit Geld arbeiten und nicht wissen, wie man damit umgeht).

Mit dieser Demo können sie z. B. ihren eigenen Indikator mit eigenen Berechnungen erstellen, ohne viel nachdenken zu müssen.
Und der Programmierer kann die Demo nutzen, um zu lernen, wie man mit MS-Office arbeitet und die Berichte in Word und PowerPoint, Zeitpläne aus OutLook und Notizen aus OneNote an seine eigenen Produkte anhängt

Die Version mit OO::Calc ist nicht geeignet, da es keine OpenOffice-Programmierschnittstelle gibt.

 

Die Version ist bereit für die Veröffentlichung - Umzug in eine neue Domain und Änderung der API in Set-Methoden, Überprüfung früherer Demos und Korrektur von Docks.

Die lange versprochene Demo für die Arbeit mit Web-Sockets wurde korrigiert. Mein Fehler - ich habe versehentlich "Ewige Schleife" innerhalb des Timers hinzugefügt :-). Das Terminal hängt an den unerwartetsten Stellen und hat es nie rechtzeitig erwischt. Und jetzt kam ich mit einem frischen Blick zurück und da war es!

ATcl - Web-Socket

Im Screenshot - laufen zwei Demos auf einmal, die erste regelmäßig und korrekt nimmt eine Seite der Website und analysiert freiberuflich (wo ich bin wahrscheinlich für immer verboten)

Der zweite (der ins Log geht) ist derselbe Websocket, der die Binance.com-Verbindung öffnet, das aktuelle Symbol abonniert und den Stream in Echtzeit liest

 

Tk hat angefangen zu arbeiten - es wird möglich sein, eine GUI mit Skripten zu erstellen.

ATcl - Tk

das Mini-Panel ist das Tk-Fenster, in dem die Widgets angeordnet sind.

Alles läuft von MT4 aus, Daten werden in das Fenster übertragen und aus dem Fenster gelesen.

Die MQL-Quelle, die nicht von der Komplexität der zu zeichnenden GUI abhängt:

#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 hat angefangen zu arbeiten - es wird möglich sein, eine GUI mit Skripten zu erstellen.


Das Mini-Panel ist das Tk-Fenster, in dem die Widgets angeordnet sind.

Alles läuft von MT4 aus, Daten werden in das Fenster übertragen und aus dem Fenster gelesen.

Die MQL-Quelle, die nicht von der Komplexität der zu zeichnenden GUI abhängt:

Super! Nach vorne schauen...

 
Maxim Kuznetsov:

Tk hat angefangen zu arbeiten - es wird möglich sein, eine GUI mit Skripten zu erstellen.


Das Mini-Panel ist das Tk-Fenster, in dem die Widgets angeordnet sind.

Alles läuft von MT4 aus, Daten werden in das Fenster übertragen und aus dem Fenster gelesen.

Die MQL-Quelle, die nicht von der Komplexität der zu zeichnenden GUI abhängt:

Hier ist das leicht modifizierte tcl sours, das die Grafik (Panel) implementiert:
#  простая торговая панель
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
}
Ich habe gerade ein paar kleine Fehler im Zusammenhang mit der Grafik behoben, ich bin sehr zufrieden damit!

Ich werde die Bibliothek morgen früh einstellen - ich werde sie am Nachmittag noch einmal überprüfen und einstellen
 

ATcl Beta 2 Veröffentlichung

Mit leichter Verspätung ist eine neue Version von ATcl veröffentlicht worden.

Einzelheiten zur Veröffentlichung siehe http://nektomk.ru/atcl:beta2

Da es Probleme mit der Domain gab, wurde, um die Distribution verfügbar zu machen, ein Projekt auf SourceForge erstellt: https://sourceforge.net/projects/mt-atcl/

Das Projekt kann von der SF-Seite oder von der üblichen Download-Seite heruntergeladen werden: http://nektomk.ru/atcl:install

Archiv auch im Anhang

Neue Funktionen:

- Demo zur WebSocket-Behandlung hinzugefügt

- Demo zur Excel-Verwaltung und zum Datenaustausch hinzugefügt

- Tk ist jetzt einsatzbereit (Demo ist auch verfügbar) - jetzt können Sie schnell und einfach die umfangreichste GUI erstellen

Bekannter Fehler:

- Im letzten Moment wurde festgestellt, dass beim gleichzeitigen Laden eines ATcl-Indikators und eines Expert Advisors mit Tk auf einem Chart ein Konflikt besteht. Die Art des Fehlers ist klar, aber er wurde noch nicht im Code protokolliert und daher auch noch nicht behoben.
Einzeln funktionieren sie alle einwandfrei, daher habe ich beschlossen, sie mit diesem Fehler zu veröffentlichen.

PS. Ob Website-Störungen oder Browser, aber diese Nachricht fülle ich 3 Mal.

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

ATcl Beta 2 Veröffentlichung

Mit leichter Verspätung ist eine neue Version von ATcl veröffentlicht worden.

Einzelheiten zur Veröffentlichung siehe http://nektomk.ru/atcl:beta2

Da es Probleme mit der Domain gab, wurde ein Projekt auf SourceForge erstellt, um die Distribution verfügbar zu machen: https://sourceforge.net/projects/mt-atcl/

Das Projekt kann von der SF-Seite oder von der üblichen Download-Seite heruntergeladen werden: http://nektomk.ru/atcl:install

Das Archiv ist ebenfalls beigefügt

Neue Funktionen:

- Demo zur WebSocket-Behandlung hinzugefügt

- Demo zur Excel-Verwaltung und zum Datenaustausch hinzugefügt

- Tk ist jetzt einsatzbereit (Demo ist auch verfügbar) - jetzt können Sie schnell und einfach die umfangreichste GUI erstellen

Bekannter Fehler:

- Im letzten Moment habe ich herausgefunden, dass es einen Konflikt beim gleichzeitigen Laden von ATcl-Indikatoren und EA mit Tk auf einem Chart gibt. Die Art des Fehlers ist klar, aber er wurde noch nicht im Code protokolliert und daher auch noch nicht behoben.
Einzeln funktionieren sie alle einwandfrei, daher habe ich beschlossen, sie mit diesem Fehler zu veröffentlichen.

PS. Ob Website-Störungen oder Browser, aber diese Nachricht fülle ich 3 Mal.

Großartig! Testen wir es! )))