mql5语言的特点、微妙之处以及技巧 - 页 71

 

fxsaber:

讨论文章 "MetaTrader 5中交易策略优化的可视化"

fxsaber, 2018.02.22 08:39

在框架模式下,OnInit、OnDeinit、OnTick、OnTrade、OnTradeTransaction和OnTimer被忽略。只有OnChartEvent有效。

当然,由于OnChartEvent的原因,它需要对框架模式标志进行强制检查。

你从哪里得到这样一种隐含的自信?:-)

 
丹尼斯-基里琴科

你怎么能如此肯定?:-)

当然是来自实践。

 

那么一个问题。框架模式是否是一般指测试的模式?

 
丹尼斯-基里琴科

那么一个问题。框架模式是否是一般适用于测试的模式?

间接来说,是这样的。只是在这种模式下,专家顾问只能由测试人员在终端启动。

 

好的。如果专家顾问有OnTick()处理程序,那么,在框架模式下,它将无法工作?

我认为,我们应该在这里澄清,帧处理程序是由终端本身执行的,而所有通常的测试(OnTick(), OnTrade(), etc.)是传递给测试代理。),被传递给测试代理。因此,框架模式是一种特殊的复合测试模式,代理与终端进行互动。

所以它是这样的...


关于交易、自动交易系统和策略测试的论坛

mql5语言的特点、微妙之处以及技巧

fxsaber, 2018.02.22 09:22

间接地,它适用。只是,在这种模式下,EA只能由测试者本人在终端运行。


而为什么是间接的呢?例如,正常的优化也可以只在测试器中运行。

 
丹尼斯-基里琴科

好的。如果专家顾问有OnTick()处理程序,那么,在框架模式下,它将无法工作?

我认为,我们应该在这里澄清,帧处理程序是由终端本身执行的,而所有通常的测试(OnTick(), OnTrade(), etc.)是传递给测试代理。),被传递给测试代理。因此,框架模式是一种特殊的复合测试模式,代理与终端进行互动。

它是这样的。



而为什么是间接的呢?例如,正常的优化只能在测试器中运行。

因为它是一个战斗专家顾问,即使是在框架模式下。这就是为什么我们需要在OnChartEvent中检查框架标志,否则会发生这种麻烦。

sinput uint Range = 100;

#define  SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)

void OnTesterInit() { SETRANGE(Range, 0, 1, Range); }

void OnTesterDeinit() {}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
  static const bool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
  
//  if (!IsFrame) // без этой проверки Терминал (не только Агент) начнет выставлять ордера на реальном счете во время запуска Оптимизации
    OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
}


这似乎是第一次发出这样的声音。这意味着,市场产品创造了一个讨厌的漏洞...而这个漏洞是很难绕过的。而且很难发现它。

 
fxsaber:

因为即使在框架模式下,它也是一个战斗的EA。这就是为什么你需要在OnChartEvent中检查框架标志的原因,否则会发生这种麻烦。

这似乎是第一次发出这样的声音。这意味着,市场产品创造了一个讨厌的漏洞...而这个漏洞是很难绕过的。检测它也同样困难。

然而!如果这是真的,那么,我认为,这是在测试模式 下EA的不正确操作。

你能注意到这一点,很好!这是很好的。

 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2018.02.27 08:01

关于OBJ_CHART上的EA的结论

  • OnInit, OnDeinit, global constructor/destructor和OnChartEvent工作。
  • OnTimer、OnTick和OnBookEvent都不起作用。
  • 只有CHARTEVENT_CHART_CHANGE和自定义事件被捕获。
  • 通过OnChartEvent+EventChartCustom EA,可以为OnTimer和OnTick创建 "事件",但不包括OnBookEvent。

因此,有可能使任何交易专家顾问变得成熟--通过包括适当的指标(例子)使其在任何类型的图表上工作(OnTimer + OnTick)。

Lf OBJ_CHART是由CHART_IS_OBJECT定义的。

 

关于交易、自动交易系统和交易策略测试的论坛

关于 "管理性优化:退火法 "的讨论

fxsaber, 2018.02.28 08:45

只有在编译时存在的测试者_文件(内容不重要)才会被读取。

如果mq5在没有相应的文件时被编译,甚至它的进一步存在在EX5中也不会被察觉。

因此,如果你在OnTesterInit中为tester_file生成一个文件,请确保你在编译Expert Advisor时至少要有一个空的传递文件。

如果tester_file指令存在,优化器的缓存就不起作用。

 
而且你不能通过tester_file包含Files_Common文件夹中的文件...