量化交易軟件:赫茲量化 函數(shù)庫中時間序指標(biāo)緩沖區(qū)數(shù)據(jù)對象
在函數(shù)庫中所有數(shù)據(jù)構(gòu)建和存儲的概念都建立在包含一組相同類型數(shù)據(jù)的集合列表之上。 它們可按所需順序進(jìn)行選擇、排序和過濾。 這樣可以獲取必要的數(shù)據(jù)集,從而進(jìn)一步深入比較和分析。 依據(jù)它們的結(jié)構(gòu),指標(biāo)緩沖區(qū)與早前創(chuàng)建的序列對象也沒有太大不同,它們也可被包含在它們的集合列表當(dāng)中,在其中我們可以快速找到包含數(shù)據(jù)的必要對象。 但是要創(chuàng)建一個集合,那么您必須為該集合準(zhǔn)備至少一個數(shù)據(jù)對象。 這些數(shù)據(jù)的完整集合將存儲在集合列表之中。 今天,我將創(chuàng)建一個數(shù)據(jù)對象,它包含一根柱線上有關(guān)指標(biāo)緩沖區(qū)的所有信息,且分別包含有關(guān)緩沖區(qū)所屬的指標(biāo)信息,由所創(chuàng)建對象描述的一根柱線的數(shù)據(jù)。 />
對于一個指標(biāo)單獨的每個緩沖區(qū),以及時間序列的每根柱線,將創(chuàng)建自己的數(shù)據(jù)對象,并按指標(biāo)的品種和時間幀將其組織到所屬集合列表之中。 因此,對于指標(biāo)的某個副本,我將為該指標(biāo)每個緩沖區(qū)時間序列的每根時間序列柱線設(shè)置一個數(shù)據(jù)集。
此刻,這種數(shù)據(jù)存儲的概念似乎有點過分,因為您始終可以直接利用指標(biāo)請求來獲取指標(biāo)緩沖區(qū)時間序列所需柱線的必要數(shù)據(jù)。 但進(jìn)一步,當(dāng)創(chuàng)建這些數(shù)據(jù)的集合時(在后續(xù)文章中),我們將能夠快速找到欲創(chuàng)建集合的任何指標(biāo)的必要數(shù)據(jù);并執(zhí)行基準(zhǔn)分析。 對于這種狀況,將數(shù)據(jù)存儲在集合緩存中似乎很適當(dāng)。
改進(jìn)庫類
首先,像往常一樣,添加新的函數(shù)庫消息。 在文件 \MQL5\Include\DoEasy\Data.mqh 里加入新的消息索引:
//--- CIndicatorsCollection ? MSG_LIB_SYS_FAILED_ADD_IND_TO_LIST, ? ? ? ? ? ? ? ?// Error. Failed to add indicator object to the list ? MSG_LIB_SYS_INVALID_IND_POINTER, ? ? ? ? ? ? ? ? ? // Error. Invalid pointer to indicator object is passed ? MSG_LIB_SYS_IND_ID_EXIST, ? ? ? ? ? ? ? ? ? ? ? ? ?// Error. Indicator object with ID already exists ? //--- CDataInd ? MSG_LIB_TEXT_IND_DATA_IND_BUFFER_NUM, ? ? ? ? ? ? ?// Indicator buffer number ? MSG_LIB_TEXT_IND_DATA_BUFFER_VALUE, ? ? ? ? ? ? ? ?// Indicator buffer value ? ?}; //+------------------------------------------------------------------+
且進(jìn)一步 - 添加與新索引相對應(yīng)的消息文本:
? {"Error. Failed to add indicator object to list"}, ? {"Error. Invalid pointer to indicator object passed"}, ? {"Error. There is already exist an indicator object with ID"}, ? ? {"Indicator buffer number"}, ? {"Indicator buffer value"}, ? ?}; //+---------------------------------------------------------------------+
由于指標(biāo)緩沖區(qū)數(shù)據(jù)對象會存儲在集合列表當(dāng)中,因此,為了對象的搜索和排序,必須接收存儲在列表中的其他函數(shù)庫對象的所有固有屬性。 在文件 \MQL5\Include\DoEasy\Defines.mqh 里定義所有必須的對象的新屬性 — 對象整數(shù)型屬性:
//+------------------------------------------------------------------+ //| ?Data for working with indicator data ? ? ? ? ? ? ? ? ? ? ? ? ? ?| //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Integer properties of indicator data ? ? ? ? ? ? ? ? ? ? ? ? ? ? | //+------------------------------------------------------------------+ enum ENUM_IND_DATA_PROP_INTEGER ?{ ? IND_DATA_PROP_TIME = 0, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Start time of indicator data bar period ? IND_DATA_PROP_PERIOD, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Indicator data period (timeframe) ? IND_DATA_PROP_INDICATOR_TYPE, ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Indicator type ? IND_DATA_PROP_IND_BUFFER_NUM, ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Indicator data buffer number ? IND_DATA_PROP_IND_ID, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Indicator ID ?}; #define IND_DATA_PROP_INTEGER_TOTAL (5) ? ? ? ? ? ? ? ? ? ? // Total number of indicator data integer properties #define IND_DATA_PROP_INTEGER_SKIP ?(0) ? ? ? ? ? ? ? ? ? ? // Number of indicator data properties not used in sorting //+------------------------------------------------------------------+