ATcl - MT4的Tcl解释器 - 页 4

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

还有什么可以从蜱虫身上榨取的吗?)))

不仅仅是蜱虫 :-)

如果它将被 "释放",你将无法添加/修改结构...因此,如果在给定的表格中缺少什么东西--就值得马上告诉。

ATcl演示 - Cawt Excel

最简单的使用场景--用户/交易员启动该指标,它打开Excel并开始填表。

用户可以填充它并添加公式。结果将显示在MT4图表和指标缓冲区中(线/箭头/箭头)。

也就是说,一个Excel用户可以为MT4创建一个指标

 

假日截图 :

ATcl - 胜利日快乐!

从一个即将到来的演示中:
飞行中的线条是在Excel中使用其公式计算出来的,问候表也来自那里,所有有用的东西的链接都可以点击。
这里是表格本身。
ATcl - 表

 
为什么要用Excel?也许是更实用的东西?
 
Алексей Тарабанов:
为什么要用Excel?也许是更实用的东西?

因为每个交易员都知道Excel。(当然,可能有一些人与钱打交道,却不知道如何使用它)。

这个演示允许他们,例如,用自己的计算方法制作自己的指标,而不必考虑太多。
而程序员可以利用这个演示来学习如何使用MS-Office,并将Word和PowerPoint中的报告、OutLook中的时间表和OneNote中的笔记附在自己的产品中。

带有OO::Calc的版本不适合,因为没有OpenOffice的编程接口。

 

版本已经准备好发布--转移到新的领域,改变Set方法中的API,检查以前的演示和修复码头。

修正了承诺已久的与Web-sockets工作的演示。我的错误--不小心把 "永恒的循环 "放在了定时器里面:-)。终端挂在最出乎意料的地方,从来没有适时地抓住过。现在回来一看,原来是这样的!

ATcl - 网络插座

在截图中--同时运行两个演示,第一个定期并正确地获取网站的一个页面并解析自由度(在这里我可能永远被禁止)。

第二个(进入日志的)是打开Binance.com连接的同一个网络套接字,订阅当前符号并实时读取流。

 

Tk已经开始工作了--将有可能用脚本建立一个GUI。

ATcl - Tk

迷你面板是Tk窗口,它的小部件被布置在其中。

一切从MT4运行,数据传输到窗口并从窗口读取。

MQL-源,它不依赖于要绘制的GUI的复杂性。

#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已经开始工作了--将有可能用脚本建立一个GUI。


迷你面板是Tk窗口,它的小部件被布置在其中。

一切从MT4运行,数据传输到窗口并从窗口读取。

MQL-源,它不依赖于要绘制的GUI的复杂性。

超强的!展望未来...

 
Maxim Kuznetsov:

Tk已经开始工作了--将有可能用脚本建立一个GUI。


迷你面板是Tk窗口,它的小部件被布置在其中。

一切从MT4运行,数据传输到窗口并从窗口读取。

MQL-源,它不依赖于要绘制的GUI的复杂性。

这是稍微修改过的tcl sours,它实现了图形(面板)。
#  простая торговая панель
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
}
我刚刚完成了所有与图形有关的小错误,我对它很满意 !

我将在明天上午发布图书馆 - 我将在下午再次检查并发布它
 

ATcl Beta 2 发布

稍微推迟了一下,ATcl的新版本已经发布。

发布细节,见http://nektomk.ru/atcl:beta2

由于在域名方面存在问题,为了使该发行版可用,在SourceForge上做了一个项目:https://sourceforge.net/projects/mt-atcl/

该项目可以从SF页面 或通常的下载页面下载:http://nektomk.ru/atcl:install

还附有档案

新的特点。

- 添加了WebSocket处理演示

- 增加了Excel管理和数据交换演示

- Tk现在已经开始运行了(也有演示)--现在你可以快速、轻松地制作最铺张的GUI了

已知的错误。

- 在最后一刻检测到:在一个图表上同时加载ATcl指标和使用Tk的专家顾问时有冲突。错误的性质很清楚,但它还没有被记录在代码中,因此它还没有被修复。
分开来看,它们都能正常工作,所以我决定带着这个错误发布。

PS。不管是网站故障还是浏览器问题,但这个消息我已经填了第三次了。

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

ATcl Beta 2 发布

稍微推迟了一下,ATcl的新版本已经发布。

发布细节,见http://nektomk.ru/atcl:beta2

由于在域名方面存在问题,为了使该发行版可用,在SourceForge上做了一个项目:https://sourceforge.net/projects/mt-atcl/

该项目可以从SF页面 或通常的下载页面下载:http://nektomk.ru/atcl:install

该档案也附在后面

新的特点。

- 添加了WebSocket处理演示

- 增加了Excel管理和数据交换演示

- Tk现在已经开始运行了(也有演示)--现在你可以快速、轻松地制作最铺张的GUI了

已知的错误。

- 在最后一刻,我发现:在一个图表上同时加载ATcl指标和使用Tk的EA有冲突。错误的性质很清楚,但它还没有被记录在代码中,因此它还没有被修复。
分开来看,它们都能正常工作,所以我决定带着这个错误发布。

PS。不管是网站故障还是浏览器问题,但这个消息我已经填了第三次了。

很好!让我们来测试一下!)))