【问题标题】:How to download data from an SQL-database and annotate an MT4-chart如何从 SQL 数据库下载数据并注释 MT4 图表
【发布时间】:2018-04-10 21:26:34
【问题描述】:

我最近下载了 MetaTrader 终端平台 (MT4)。

我有自己的回测引擎,它将一些输出存储在我的 SQL 服务器数据库中。输出取决于我正在测试的模型。但是,输出可以像进入交易的时间一样简单。

我想知道什么

是否可以在 MQL4 中下载来自 SQL 服务器数据库的数据,然后注释 图表带有简单的“B”表示买入或“S”表示卖出?

所以我运行了一个回测模拟(即从 2010 年到 2011 年的 EURUSD)并存储了买入和卖出条目的时间。然后我想去我的 MetaTrader 4 平台并运行一个脚本,该脚本将从我的 SQL 数据库和我的 EURUSD 图表上下载所有买入和卖出条目的时间,并标记这些 XTO-s。

【问题讨论】:

    标签: mql4


    【解决方案1】:

    是的,这是可能的

    MQL4 语言,包括“New”-MQL4(又名 MQL4.5),具有用于导入基于 DLL 的服务的语法支持,允许重新集成工具、封闭式语法MQL4 不允许以更自然的方式获利。

    //+------------------------------------------------------------------+  // msMOD(s) 2014  >>> [dev]_test_(python)_.PUB__(mql).SUB_with_KBD_and_SIG___StatefullGrammarFSA
    //| Ver 4.00, Build 509                          [dev]__********.mq4 |  // msMOD(s) 2013    
    //+------------------------------------------------------------------+  //              
    #property copyright "[dev] msMOD(s) (c) 1987-2014"                      //              
    // ---------------------------------------------------------------------<#import>.start
    #import  "msLIB_services.ex4"
             void  msLIB.aSnapshot.MAKE();
    #import
    // ---------------------------------------------------------------------<#import>.end
    // ZMQ LIBRARY |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    #include <mql4zmq.mqh>                                                  // Include the libzmq.dll abstraction wrapper
    // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    

    这样您的代码,无论是MQL4-Script 还是MQL4-ExpertAdvisor 都可以与外部进程通信,包括。任何正常工作的 DBMS。

    小心

    代码设计和集成架构应该牢记几个重要特性。 MQL4 从早期开始就不是一个普通的顺序处理器,即MQL-CustomIndicator 与这种范式相去甚远。代码(MQL4-Script 的情况除外)充当事件驱动工厂,由传入市场事件的异步流启动。用户有责任采取一切措施不违反此Alpha&Omega 原则的MQL4 原则的实时稳定性。换句话说,一个糟糕的设计,可能会导致一些 I/O 阻塞(由于 RDBMS 处理等),很可能是交易终端崩溃的原因,这是任何人都不愿意经历的最后一件事(无论是在实时交易还是回测阶段),不是吗?

    因此,一个健全的非阻塞、异构、并行多处理集成架构和代码设计将用于此任务。

    如果专业完成,效果会很好

    牢记上述内容,可以让非常智能、快速和(几乎)无限的架构与交易终端一起工作。有多个案例,通过 python 在 MT4/MQL4 代码和 AI/ML 引擎之间进行近实时消息传递,快速 FIX-Protocol 流引擎用于从流动资金池提供者实时数据输入,使用远程 NVIDIA/GPU 计算结构,远程协同集成 IRC/skype/email 信号配置渠道。

    因此,可以做到的哲学已经到位。从这个意义上说,SQL 没有什么额外的。在同样的意义上,贴标签是微不足道的。正如您的想象,MQL4 允许构建(再次,使用近实时设计)响应/交互式 GUI 层,允许在几个 [msec] 稳定性障碍内以纯图形方式与交易终端一起工作方式(很久以前,一键交易营销标签只带有点击购买/点击销售)与线控制/图形对象可视化交易辅助工具完全交互,无论是用于全自动交易执行(使用规则集的间接 GUI 配置),还是用于增强交易风格。

    是的,可以使您的 MT4 交易终端成为一种“远程可编程图表显示”,不是由 FX-Market 驱动,而是由云处理器驱动,您的远程策略测试引擎在其中...

    【讨论】:

    • 据我了解(如果我错了,请纠正我)EA 交易和自定义指标是事件驱动的,因此当市场事件发生时它们会被调用。甚至没有驱动脚本,所以这是我应该创建代码的地方。是否可以停止图表更新以解决稳定性问题?当我回来测试时,我不关心图表的更新。
    • 对,MQL4-Script 没有来自事件队列的触发器,正确。尽管如此,我不会依赖发送一个盲目的 SQL 查询和等待,而是实现一个异步代理接口,它可以调解 MQL4 前端/SQL 后端处理和队列管理,一个接一个地服务,为了避免 MQL4 阻塞和 MQL4 端过载情况,当在“block-buster”答案中获得大量字节时(没有提到 HFT 案例规模是列表中的第一个问题:o))
    • 问上面问,你的代码不知道MT4-Graph是在线的还是离线的。您可以轻松地在离线图表上激活您的MQL4-Script 代码,它不会“监听”任何更新,尽管如此设计。另一个问题是在 MT4-HistoryCentre(一个数据库,您的图形将从中获取 PriceDOMAIN 数据以绘制蜡烛/柱)中已经有“相关的 OHLCV 数据”——但这是另一个需要解决的问题。
    • 感谢您提供非常详细的回答。想我明白了,现在会尝试离开并实施它。关于数据问题,我相信我可以将我的价格数据放在历史中心。
    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2012-12-22
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多