【问题标题】:mql4 Expert Advisor - OnTick() does not do anything in [ Strategy Tester ]mql4 EA 交易 - OnTick() 在 [ Strategy Tester ] 中不做任何事情
【发布时间】:2018-03-02 18:53:05
【问题描述】:

部分代码:

int OnInit()
{   
    Print( "SL mover started" );

    return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{   
     modifySLs();
}

void modifySLs()
{
     int i, total = OrdersTotal();

     Alert( total );

     Print( "modify runs" );

     for( i = 0; i <  total; i++ ) {

          modifySLIfNeededForSelectedOrder( i );
     }
}

为什么OnTick() 不运行?

当我在 Strategy Tester 中运行时,它不会在日志中打印任何消息,也不会调用 Alert() 函数。 OnInit() 函数有效 - 在日志中打印“SL mover started”。

【问题讨论】:

  • @Darius-v 以下建议的解决方案对您的 Strategy Tester 实验有何帮助?

标签: mql4


【解决方案1】:

MQL4 文档对此有明确说明:

Alert() 函数在策略测试器中不起作用。

所以最好删除它。

Print() 函数在 Strategy Tester 优化期间不起作用。

因此,除非您的 Strategy Tester 选中了基因优化复选框,否则这应该不会造成任何问题。

如果对确实“进入”OnTick() 代码块有疑问,可以为其配备一个非阻塞的智能线人:

int aGlobatTickCOUNTER = 0;
void OnTick()
{
     Comment( "[OnTick()].INF::", ++aGlobalTickCOUNTER );

     modifySLs();
}

【讨论】:

    【解决方案2】:

    它运行。你认为它不执行的天气,它执行。有用。 Ontick() 函数在根据图表在最后一个浮点中更改值时运行一次。 但问题是您看不到它正在工作,因为战略测试仪不允许Alerts()print() 函数。它只允许执行OrderSend(),OrderClose(),Ordermodify()等函数。

    【讨论】:

    • 这不是真的 - 策略测试员将Print()-calls 记录到日志中,可以在日志中看到。这只是onTick() 的问题 - 这就是 OP 提出这个有效问题的原因。
    • 我也遇到了同样的问题。但我发现我的 OnTick 方法被声明为“int OnTick()”。当我将其更改为“void OnTick()”时,它开始工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多