1

我编写了一个简单的 DLL 作为 Metatrader 4 的自定义指标的一部分,它被称为:

int start( ) {
    double Rates[][6];
    int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 ); 

    for( int zz = MaximumRecords; zz >= 0; zz-- ) { 
        OutPut[zz] = EMPTY; 
    }

    GetSMAArray( Rates, MaximumRecords, Periods, OutPut );

    return(0); 
}

这可以正常工作,因为它在图表上按预期绘制,但不幸的是,它不会随着新的传入报价更新 - 它只是在其初始调用时绘制。我可以添加哪些进一步的代码来使 DLL 使用传入的滴答声进行更新?几乎我所有的搜索都提出了使用的变化

ExtCountedBars = IndicatorCounted();

强制while循环进行计算,但这些都适用于 .mq4 文件本身中包含的计算。我想强制 DLL 重新计算。其次,我希望这种重新计算仅在柱完成时发生,而不是在所有和每个刻度到达时发生。

4

1 回答 1

1

对于仅在新柱上的事情,我的技术是将最后一根柱的 (Bars[0]) 日期时间信息保存在一个变量中,如果它发生了变化,这意味着一个新柱已经到来。

datetime lastBarDateTime;

int start(){
    if(Time[0]==lastBarDateTime)
    return(0);

    lastBarDateTime = Time[0];

    // codes to run on a new bar ...
}

对于 DLL 部分,我实际上无法理解您在该代码中使用 DLL 的位置。

于 2011-09-21T14:27:36.297 回答