ATcl - Intérprete Tcl para MT4 - página 4

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

¿Hay algo más que se pueda exprimir de las garrapatas? )))

No son sólo garrapatas :-)

Si se "libera", no será posible añadir/modificar la estructura. Así que si falta algo en la tabla dada - vale la pena decirlo de inmediato.

Demostración ATcl - Cawt Excel

El escenario de uso más simple - el usuario/operador inicia el indicador, éste abre Excel y comienza a llenar la tabla.

El usuario puede rellenarlo y añadir fórmulas. El resultado se mostrará en el gráfico de MT4 y en los búferes de los indicadores (líneas/flechas/gráficos).

Es decir, un usuario de Excel puede crear un indicador para MT4

 

Captura de pantalla de las vacaciones :

ATcl - ¡Feliz día de la victoria!

De una próxima demo :
Las líneas sobre la marcha se calculan en Excel utilizando sus fórmulas, la tabla de saludo se toma de allí también, y los enlaces a todas las cosas útiles son clicables.
Aquí está la tabla propiamente dicha:
ATcl - tabla

 
¿Por qué Excel? ¿Tal vez algo más funcional?
 
Алексей Тарабанов:
¿Por qué Excel? ¿Tal vez algo más funcional?

Porque todo comerciante conoce Excel. (Por supuesto, puede haber personas que trabajen con dinero y no sepan utilizarlo).

Esta demostración les permite, por ejemplo, hacer su propio indicador con sus propios cálculos sin tener que pensar demasiado.
Y el programador puede utilizar la demostración para aprender a trabajar con MS-Office y adjuntar los informes de Word y PowerPoint, los horarios de OutLook y las notas de OneNote a sus propios productos

La versión con OO::Calc no es adecuada, porque no hay interfaz de programación de OpenOffice.

 

La versión está lista para ser lanzada - moviendo al nuevo dominio y cambiando la API en los métodos de Set, revisando las demos anteriores y arreglando los docks.

Corregida la demo prometida desde hace tiempo para trabajar con Web-sockets. Mi error - inadvertidamente añadí "bucle eterno" dentro del temporizador :-). El terminal se cuelga en los lugares más inesperados y nunca lo cogió a tiempo. ¡Y ahora volví con una nueva mirada y ahí estaba!

ATcl - socket web

En la captura de pantalla - la ejecución de dos demos a la vez, la primera periódicamente y correctamente toma una página del sitio y analiza independiente (donde probablemente estoy para siempre prohibido)

El segundo (lo que va en el registro) es el mismo socket web que abre la conexión de Binance.com , se suscribe al símbolo actual y lee el flujo en tiempo real

 

Tk ha empezado a funcionar - será posible construir una GUI con scripts.

ATcl - Tk

el minipanel es la ventana Tk en la que se disponen sus widgets.

Todo se ejecuta desde MT4, los datos se transfieren a la ventana y se leen desde la ventana.

La fuente MQL, que no depende de la complejidad de la interfaz gráfica de usuario que se va a dibujar:

#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 empezado a funcionar - será posible construir una GUI con scripts.


El minipanel es la ventana Tk en la que se disponen sus widgets.

Todo se ejecuta desde MT4, los datos se transfieren a la ventana y se leen desde la ventana.

La fuente MQL, que no depende de la complejidad de la interfaz gráfica de usuario que se va a dibujar:

¡Super! Mirando hacia adelante...

 
Maxim Kuznetsov:

Tk ha empezado a funcionar - será posible construir una GUI con scripts.


El minipanel es la ventana Tk en la que se disponen sus widgets.

Todo se ejecuta desde MT4, los datos se transfieren a la ventana y se leen desde la ventana.

La fuente MQL, que no depende de la complejidad de la interfaz gráfica de usuario que se va a dibujar:

Aquí está el tcl ligeramente modificado que implementa los gráficos (panel):
#  простая торговая панель
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
}
¡Acabo de terminar todos los pequeños errores relacionados con los gráficos, estoy contento con él !

Mañana por la mañana publicaré la biblioteca - la revisaré de nuevo por la tarde y la publicaré
 

Lanzamiento de ATcl Beta 2

Con un ligero retraso, se ha publicado una nueva versión de ATcl.

Detalles de la publicación, véase http://nektomk.ru/atcl:beta2

Como hubo problemas con el dominio, para que la distribución esté disponible, se ha hecho un proyecto en SourceForge: https://sourceforge.net/projects/mt-atcl/

El proyecto puede descargarse desde la página de SF o desde la página de descargas habitual: http://nektomk.ru/atcl:install

También se adjunta el archivo

Nuevas características:

- Demostración de manejo de WebSocket añadida

- Demostración de gestión e intercambio de datos de Excel añadida

- Tk ya está en marcha (la demo también está disponible) - ahora puede hacer rápida y fácilmente la interfaz gráfica de usuario más extensa

Error conocido:

- En el último momento se detectó: hay un conflicto al cargar simultáneamente en un gráfico un indicador ATcl y un Asesor Experto usando Tk. La naturaleza del error está clara, pero aún no se ha registrado en el código y, por tanto, aún no se ha solucionado.
Por separado, todos funcionan bien, así que he decidido publicarlo con este error.

PS. Si los fallos del sitio o el navegador, pero este mensaje me llenan 3ª vez.

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

Lanzamiento de ATcl Beta 2

Con un ligero retraso, se ha publicado una nueva versión de ATcl.

Detalles de la publicación, véase http://nektomk.ru/atcl:beta2

Como hubo problemas con el dominio, para que la distribución esté disponible, se ha hecho un proyecto en SourceForge: https://sourceforge.net/projects/mt-atcl/

El proyecto puede descargarse desde la página de SF o desde la página de descargas habitual: http://nektomk.ru/atcl:install

También se adjunta el archivo

Nuevas características:

- Demostración de manejo de WebSocket añadida

- Demostración de gestión e intercambio de datos de Excel añadida

- Tk ya está en marcha (la demo también está disponible) - ahora puede hacer rápida y fácilmente la interfaz gráfica de usuario más extensa

Error conocido:

- En el último momento he encontrado: hay un conflicto con la carga simultánea de indicadores ATcl y EA usando Tk en un gráfico. La naturaleza del error está clara, pero aún no se ha registrado en el código y, por tanto, aún no se ha solucionado.
Por separado, todos funcionan bien, así que he decidido publicarlo con este error.

PS. Si los fallos del sitio o el navegador, pero este mensaje me llenan 3ª vez.

¡Genial! ¡Vamos a probarlo! )))

Razón de la queja: