文章 "创建一个人工交易助手" - 页 6

 
zhixiong Li:
你好,德米特里,这个交易面板可以在 MT4 历史测试模式下使用吗?在进行历史回溯测试时,OnChartEvent()函数 似乎没有被执行?请教我如何解决这个问题?非常感谢,Robison。
是的,在测试模式下,MT4 和 MT5 不会产生运行 OnChartEvent 函数的事件。但如果您想在 MT4 的测试模式下使用某些 psnel,您必须创建一个函数,在每个 tick 上检查按钮的状态。但这种方法在 MT5 中不起作用。
谢谢、
德米特里
 

您好。在您的文章中,我不明白面板的 "移动性 "是如何实现的,如何使面板随鼠标移动并最小化。请解释一下。并告诉我是否有可能在 mql4 中实现同样的功能。

 
Aleksandr Teleguz:

您好。在您的文章中,我不明白面板的 "移动性 "是如何实现的,如何使面板随鼠标移动并最小化。请解释一下。并告诉我是否有可能在 mql4 中实现同样的功能。

日安,
在我的文章中,我在编写面板时使用了标准库。其中已经实现了您指定的功能。mql4 中也有类似功能的库。


Dmitry。

 

德米特里,你好!我正在 MT4 上制作一个面板,我借鉴了你的经验,但问题是,在切换 TF 时,大约第 3 次面板就开始复制并分开。在 MT5 中,您的示例一切正常,但在 MT4 中我遇到了问题。也许您知道从哪里可以找到答案?)

 
Eugeny Kotovschikov:

德米特里,你好!我正在 MT4 上制作一个面板,我借鉴了你的经验,但问题是,在切换 TF 时,大约第 3 次面板开始复制并分开。在 MT5 中,您的示例一切正常,但在 MT4 中我遇到了问题。也许您知道从哪里可以找到答案?)


您好,Eugene。
您需要在 OnDeinit 中编写从图表中强制移除面板的函数。问题是,MT4 在更改图表时不会关闭程序并调用 OnDeinit 函数。在CAppDialog 类中第一次去初始化 后,去初始化 原因 会写入 私有变量m_deinit_reason 。但在更改时间框架时,MT4 不会从内存中删除该类。在随后尝试删除该类时,该类会读取变量的值,由于它不是空的,所以什么也不会做。

//+------------------------------------------------------------------+
//| 应用程序对话去初始化功能
//+------------------------------------------------------------------+
void CAppDialog::Destroy(const int reason)
  {
//--- 已经被毁了吗?
   if(m_deinit_reason!=WRONG_VALUE)
      return;
//---

但一个更简单也可能更正确的变体是通过使用 "*"引用类来声明面板类。在这个变体中,你需要对代码做一些小的修改

CTradePanel *TradePanel;
//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   // 启动类 CTradePanel
   TradePanel=new CTradePanel();
   if(CheckPointer(TradePanel)==POINTER_INVALID)
      return INIT_FAILED;
   // 创建贸易小组
   if(!TradePanel.Create(ChartID(),"Trade Panel"))
     {
      return (INIT_FAILED);
     }
   // 运行贸易小组
   TradePanel.Run();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(CheckPointer(TradePanel)!=POINTER_INVALID)
     {
      TradePanel.Destroy(reason);
      delete TradePanel;
     }
  }

该变体将在去初始化时强制删除贸易面板类,然后重新创建它。


Dmitry。

 
Dmitriy Gizlyk:

下午好,Eugene。
我需要在 OnDeinit 中编写强制从图表中删除面板的函数。问题是,在更改图表时,MT4 不会启动程序关闭并调用 OnDeinit 函数。在CAppDialog 类中进行第一次去初始化 后,去初始化 原因 会写入 私有变量m_deinit_reason 。但在更改时间框架时,MT4 不会从内存中删除该类。在随后尝试删除该类时,该类会读取变量的值,由于它不是空的,所以什么也不会做。

但一个更简单也可能更正确的变体是通过使用 "*"引用类来声明面板类。在这个变体中,你需要对代码做一些小的修改

该变体将在去初始化时强制删除贸易面板类,然后重新创建它。


Dmitry。


德米特里,非常感谢,第二种方法奏效了。))))。

 
Dmitriy Gizlyk:
如何能创建一个类似面板在mt4测试历史数据时手动下单功能??

历史回测不可能使用按钮来操作的。

 
Yupeng Xiao:

历史回测不可能使用按钮来操作的。


MT4测试仪不产生事件,但按钮本身工作。 因此,对于MT4测试仪,您可以在每个刻度上检查按钮的状态。

 

你好,迪米特里

干得不错。您能解释一下如何更改面板的背景颜色吗?我知道我可以编辑 Defines.mqh 文件中的宏定义,但我想知道是否有办法不编辑该文件也能做到这一点。

在此先表示感谢。


萨维奥

 

非常好的想法!非常容易使用,方便初学者使用 mt5 。谢谢