2011-06-27 19 views
1

我寫了一個簡單的DLL作爲爲MetaTrader 4,自定義指標,其因此被稱爲部分: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); 
} 

這工作得很好,它的繪製預計在圖表上,但不幸的是,它不會更新新的傳入嘀嗒聲 - 它只是在初始呼叫時進行繪製。我可以添加什麼進一步的代碼來使用傳入的tick來更新DLL?幾乎所有我的搜索想出了變化對使用

ExtCountedBars = IndicatorCounted(); 

強制while循環來計算,但這些都適用於包含在.MQ4文件本身的計算。我想強制DLL重新計算。其次,我希望這種重新計算只能在酒吧完成時纔會發生,而不是在所有的時間點都到達時發生。

回答

1

對於新的酒吧唯一的事情,我的技巧是將最後一個酒吧(酒吧[0])的日期時間信息保存在一個變量中,如果它已經改變,這意味着一個新的酒吧來了。

datetime lastBarDateTime; 

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

    lastBarDateTime = Time[0]; 

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

對於DLL部分,我實際上不知道你在那裏使用DLL代碼。