Metatrader 4上的DLL不';t使用传入的滴答声进行更新

Metatrader 4上的DLL不';t使用传入的滴答声进行更新,dll,metatrader4,Dll,Metatrader4,我已经编写了一个简单的DLL,作为Metatrader 4自定义指示器的一部分,因此称为: int start( ) { double Rates[][6]; int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 ); for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = EMPTY; } GetSM

我已经编写了一个简单的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重新计算。其次,我希望这种重新计算只在一个条完成时发生,而不是在所有和每一个勾号到达时发生。

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

datetime lastBarDateTime;

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

    lastBarDateTime = Time[0];

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

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

对于仅在新条上使用的东西,我的技术是将最后一条(条[0])的日期时间信息保留在变量中,如果它已更改,则意味着新条已出现

datetime lastBarDateTime;

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

    lastBarDateTime = Time[0];

    // codes to run on a new bar ...
}
对于DLL部分,我实际上无法理解您在代码中使用DLL的位置