ATcl - MT4的Tcl解释器 - 页 6

 
Maxim Kuznetsov:

在软件技术方面,有可能是的。只要不在云中,就可以从优化器中调用库。

在NS方面--你如何想象?

在优化器中进行一次传递,并将数据写入文件,然后传递给网络训练,训练后训练评估结果返回给MT4/5,网络(规则)被写入文件。而另一种观点是当我们使用NS逻辑的记录文件来进行优化(NS变体)和修复TS的标准指标。

 

我扩展了Tk图表演示 - 现在它也显示了订单表。

在一个单独的窗口中列出订单表

指向订单表的MQL代码
- 选择所有的订单并在OnOrderList方法中把它们发送给TCL。
- 在输出中,我们得到3个票据列表--新的票据、变化的票据和被删除的票据。

void
SendOrderList() 
{
   int total=OrdersTotal();
   Tcl_Obj list=tcl.Ref(tcl.Obj()); // пустой список
   for(int pos=0;pos<total;pos++) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) ||
         OrderMagicNumber()!=MAGIC ||
         OrderSymbol()!=_Symbol ||
         OrderCloseTime()!=0) continue;
      Tcl_Obj ord=tcl.Ref(tcl.List(
         tcl.Obj(OrderTicket()),
         tcl.Obj(OrderType()),
         tcl.Obj(OrderOpenTime()),
         tcl.Obj(OrderSymbol()),
         tcl.Obj(OrderLots()),
         tcl.Obj(OrderOpenPrice()),
         tcl.Obj(OrderStopLoss()),
         tcl.Obj(OrderTakeProfit()),
         tcl.Obj(OrderComment()),
         tcl.Obj(OrderSwap()),
         tcl.Obj(OrderCommission())
      ));
      tcl.AppendObj(list,ord);
      tcl.Unref(ord);
   }
   if (tcl.Call(panel,methodOnOrderList,list)!=TCL_OK) {
      PrintFormat("OrderSendList failed : %s",tcl.StringResult());
   } else {
      Tcl_Obj triplet=tcl.Ref(tcl.Result()); // 0-новые 1-изменённые 2-удалённые
      Tcl_Obj created=tcl.Ref(tcl.Index(triplet,0));  // список новых ордеров
      Tcl_Obj changed=tcl.Ref(tcl.Index(triplet,1));  // список изменённых ордеров
      Tcl_Obj removed=tcl.Ref(tcl.Index(triplet,2));  // список удалённых ордеров
      PrintOrderList("New orders",created);
      PrintOrderList("Modified orders",changed);
      PrintOrderList("Deleted orders",removed);
      // объекты больше ненужны
      tcl.Unref(removed);
      tcl.Unref(changed);
      tcl.Unref(created);
      tcl.Unref(triplet);
   }
}

和做主要工作的Tcl方法。
- 获得一个新的订单列表
- 与以前的通话进行比较
- 构建3个列表(新的、改变的、删除的)。
- 它创建了一个表格......这实际上是一棵树,可以分几个层次来制作。


# надо обновить внутренние структуры
# и вернуть триплет (список из трёх списков)
#   1 - список новых ордеров
#   2 - ордера которые поменялись
#    3 - ордера которые удалены
method OnOrderList { orderList } {
    set created {}
    set changed {}
    set removed {}
    foreach order $orderList {
        set ticket [ lindex $order 0 ]
        set known($ticket) $order
        if { ! [ info exists Orders($ticket) ] } {
            # новый тикет
            # добавить в список свежесозданных
            lappend created $ticket
            set Orders($ticket) $order
            continue
        }
        if { $Orders($ticket) != $order } {
            # что-то поменялось
            # добавить в список изменённых
            set Orders($ticket) $order
            lappend changed $ticket
        }
    }
    foreach ticket [ array names Orders ] {
        if { ! [ info exists known($ticket) ] } {
            # прежнего ордера нет в новом списке - значит удалён
            lappend removed $ticket
            unset Orders($ticket)
        }
    }
    # обновить грфику :-)
    foreach ticket $removed {
        my OnRemoveOrder $ticket
    }
    foreach ticket $changed {
        my OnChangeOrder $ticket
    }
    foreach ticket $created {
        my OnCreateOrder $ticket
    }
    return [ list $created $changed $removed ]
}

一切都非常紧凑。
你可以利用两种语言的优势--MQL接近交易环境,在数组中快速计数。
Tcl可以很容易地处理列表和哈希值。
MQL实现了一个艰难的交易算法,而脚本则处理与世界和用户的互动。

档案附在后面。

附加的文件:
atcl.zip  6662 kb
 

将报价导出到Excel的脚本

我做了一个简短的脚本,将报价直接导出到Excel。
不需要在CSV中输入任何条目或任何参数--只要把它扔在图表上,Excel表就会打开,所有的报价都会被复制到里面。

我已经尽可能地对文本进行了评论,并将其附上。我已经在我的网站http://nektomk.ru/atcl:ratestoexcel,提供了该脚本的详细信息。
数额超出了本论坛的范围,所以它在那里。也许当我有心情时,我会在当地的博客中复制它,这样信息就不会丢失了,这是肯定的。

所附脚本

PS/ 有没有人有一个make-文件用于批量编译mql? 这将改变一个mqh,推送make并重建一堆mq4,这些都是在依赖关系中列出的。

更新/复制本地博客上的文章https://www.mql5.com/ru/blogs/post/718304- 现在它可能不会消失了
RatesToExcel
  • nektomk.ru
Часто возникающий (и довольно практичный) вопрос у пользователей MetaTrader - «Как скопировать котировки в Excel?» . При помощи библиотеки ATcl это программируется довольно легко. В состав библиотеки входит «большая» программа работающая с Excel, но для частых потребностей сделал короткий скрипт, который делает самую простую вещь - экспорт...
附加的文件:
 

该邮件可以使用,但仍然需要更多的工作来完成......

同时,有一个问题要问大家--GUI-Builder会有需求吗?
对于Tk来说,它们是存在的,但由于文本中的脚本比绘图中的写得快,它们的需求量很小。

类似这样的事情。

PS/这样的GUI-builder的结果可以从MT4启动...

 
Maxim Kuznetsov:

该邮件可以使用,但仍需要更多的工作来完成......

但同时有一个问题要问大家--对GUI-Builder会有需求吗?
,对Tk来说,它们是有需求的,但由于用文本写脚本比用绘图写脚本要快,所以需求量不大。

类似这样的事情。

PS/这样一个GUI-builder的结果,现在在 "这样的母亲 "的帮助下,可以从MT4开始。

多么有趣的东西...只是如何应用它们?

啊,我有一个想法,只是图形界面--创建像决策树一样的交易逻辑!也就是说,在图形编辑器(即shell)中创建一棵树,并使用一个按钮将其转换为简单的规则,甚至直接转换为代码!这就是所谓的 "树"。然而,规则也可以在代码中以一种非常紧凑的方式来阅读。

我们为什么需要它?这种方法允许详细说明交易策略,例如,我们可以很容易地将其分为时间序列--不仅决定是否交易,而且决定是否在这个时间和这个时间以不同方式进行交易。改变战术的迹象有很多,但写在代码中不是很方便,其次,它很难直观地阅读 - 你可能会犯很多错误。

对这样的想法感兴趣,以应用你的才能?

 
Aleksey Vyazmikin:

多么有趣的东西...但如何应用它们呢?

啊,我有一个想法,只是图形界面--创建像决策树一样的交易逻辑!也就是说,我们在图形编辑器(即shell)中创建一棵树,并使用一个按钮将其转换为简单的规则,甚至直接转换成代码然而,规则也可以在代码中以一种非常紧凑的方式来阅读。

我们为什么需要它?这种方法允许详细说明交易策略,例如,我们可以很容易地将其分为时间序列--不仅决定是否交易,而且决定是否在这个时间和这个时间以不同方式进行交易。改变战术的迹象有很多,但写在代码中不是很方便,其次,它很难直观地阅读 - 你可能会犯很多错误。

对这样一个应用你的才能的想法感兴趣吗?

我不明白 "图形化决策树 "的想法。:-) 也许你的天赋还不够 :-)

 
Maxim Kuznetsov:

我完全不明白 "图形化决策树 "的想法:-) 也许你没有足够的天赋 :-)

想象一下,一个有一套规则的数据表



这些规则在代码中以下列方式排列

      for(int i=1;i<StrokTotal_Buy; i++)
        {
         UslovieSumm_Buy=
                          Sravnenief(arr_Vektor_Week,arrRead_Buy_01[i])+
                          Sravnenief(arr_Vektor_Day,arrRead_Buy_02[i])+
                          Sravnenief(arr_Vektor_Don,arrRead_Buy_03[i])+
                          Sravnenief(arr_DonProc,arrRead_Buy_04[i])+
                          Sravnenief(arr_iDelta_H1,arrRead_Buy_05[i])+
                          Sravnenief(arr_iDelta_H3,arrRead_Buy_06[i])+
                          Sravnenief(arr_iDelta_H4,arrRead_Buy_07[i])+
                          Sravnenief(arr_iDelta_H6,arrRead_Buy_08[i])+
                          Sravnenief(arr_iDelta_H12,arrRead_Buy_09[i])+
                          Sravnenief(arr_iDelta_D1,arrRead_Buy_10[i])+
                          Sravnenief(arr_iDelta_W1,arrRead_Buy_11[i])+
                          Sravnenief(arr_iDelta_MN1,arrRead_Buy_12[i])+
                          Sravnenief(arr_RSI_Open_M1,arrRead_Buy_13[i])+
                          Sravnenief(arr_RSI_Open_H1,arrRead_Buy_14[i])+
                          Sravnenief(arr_BB_Center_Open,arrRead_Buy_15[i])+
                          Sravnenief(arr_BB_Up_Open,arrRead_Buy_16[i])+
                          Sravnenief(arr_BB_Down_Open,arrRead_Buy_17[i])+
                          Sravnenief(arr_TimeH,arrRead_Buy_18[i])+
                          Sravnenief(arr_Den_Nedeli,arrRead_Buy_19[i])+
                          Sravnenief(arr_iDelta_Max_H1,arrRead_Buy_20[i])+
                          Sravnenief(arr_iDelta_Min_H1,arrRead_Buy_21[i])+
                          Sravnenief(arr_iDelta_Max_D1,arrRead_Buy_22[i])+
                          Sravnenief(arr_iDelta_Min_D1,arrRead_Buy_23[i]);                                                                              
;




         if(UslovieSumm_Buy==23)
           {
            Pattern_Buy=1;
            Pravilo_Buy=i;
            break;
           }
        }

如果我们有一个规则值和一个计算值(指标值/时间/其他模式)相吻合,那么就会执行一个交易行动,例如。

这种交易决策方法是非常紧凑和通用的--我们可以用这种简单的方式来编码,例如,许多策略--赋予它们不同的魔法符号。

但问题是,我们需要的只是这种编程风格的环境。这个环境应该看起来像一个决策树(一个原始框图),我们可以在其中创建块(计算结果,例如arr_iDelta_Max_D1,具有预定义的值(1,2,3,4 ...n)和/或具有限制值的可能性,以这种方式创建许多不同的组),从这个块将为每个变量的值或变量的值范围分支,等等,直到下一个块,如此循环。因此,我们将有一套规则,顺便说一下,每条规则不一定要使用所有的区块。

这让你明白了吗?如果你需要解释,请问。

 
Aleksey Vyazmikin:

呈现一个带有一组规则的数据表格



这些规则的编码如下

如果我们有一个规则值和计算值(指标值/时间/其他模式)的重合,那么,例如,一个交易行动被执行。

这种交易决策方法是非常紧凑和通用的--我们可以用这种简单的方式来编码,例如,许多策略--赋予它们不同的魔法符号。

但问题是,我们需要的只是这种编程风格的环境。这个环境应该看起来像一个决策树(一个原始框图),我们可以在其中创建块(计算结果,例如arr_iDelta_Max_D1,具有预定义的值(1,2,3,4 ...n)和/或具有限制值的可能性,以这种方式创建许多不同的组),从这个块将为每个变量的值或变量的值范围分支,等等,直到下一个块,如此循环。因此,我们将有一套规则,顺便说一下,每条规则不一定要使用所有的区块。

这让你明白了吗?如果你需要解释,请问。

像Xcos (http://www.scilab.org/en/scilab/features/xcos)和模拟中类似的花哨的东西?
我在tcl中见过它--一个他们用箭头连接块的环境......他们就是这样对声音/视频/图形处理进行编程的。http://wiki.tcl.tk/8565,似乎有很多东西,他们甚至把Maxima卡在一些块中。
如果是这样--将密切关注
Xcos / Features / Scilab / Home - Scilab
Xcos / Features / Scilab / Home - Scilab
  • Scilab Enterprises
  • www.scilab.org
Xcos is a graphical editor to design hybrid dynamical systems models. Models can be designed, loaded, saved, compiled and simulated.
 
Maxim Kuznetsov:
像Xcos (http://www.scilab.org/en/scilab/features/xcos)和模拟中类似的时尚?
我在tcl中看到过--他们用箭头连接块的环境......他们就是这样对声音/视频/图形处理进行编程的。http://wiki.tcl.tk/8565,似乎有很多东西,他们甚至把Maxima塞进一些块中。
如果是这样--将密切关注

是的,这就是方法!这就是方法。最主要的是不要把事情复杂化,要做一个正确的解释器,使所有的块都收集在一行中(一个分支),用MQL的程序已经可以工作了。

 
Aleksey Vyazmikin:

是的,这就是方法!最主要的是不要把事情复杂化,要做一个正确的解释器,使所有的块都收集在一行中(一个分支),这样就已经可以和MQL中的程序一起工作了。

我不认为我想过度复杂化,例如我不想乱用bwise代码。

最多,我将调整它与ATcl一起使用(即把数据从Mql转移到它的输入端)并取得输出。
当然,我将不得不写一些HowTo "如何绘制方块并将其附在EA上"。并在与作者交流时练习英语 :-)