2017-05-11 68 views
1

證券我使用API​​管理的MetaTrader 4交易平臺MT4交易平臺API管理器 - 讓每組

我需要得到所有證券每集團

例如 GROUP =初步| SECUTIRY_0 =外匯| SECUTIRY_1 = CFD | SECUTIRY_2 = |

我有一些小技巧如何下面去做:

    1. 要求證券配置後使用CfgRequestSymbolGroup(ConSymbolGroup配置),你得到了所有證券*
    1. 因此,您爲每個安全性獲得了ConSymbolGroup,現在配置[0]是forex,配置[1]是cfd和confi gurations [2]是例如金屬。*
  • 然後請求使用CfgRequestGroup(INT 總),你會得到ConGroup結構爲每個組羣的配置。
  • ConGroup具有ConGroupSec secgroups [MAX_SEC_GROUPS]參數 - 安全組設置*
  • 對指標是相同的,所以secgroups [0]是用於這個組的外匯設置,secgroups [1]是CFD等等。*

我的代碼是下面但可以沒有得到期望的結果,在下面的代碼中,我得到證券和組列表的名單,但不能得到索引根據上面的描述得到這種格式的結果

GROUP = preliminary | SECUTIRY_0 = Forex | SECUTIRY_1 = CFD | SECUTIRY_2 = |

// 1 step 
    // request all securities 
    // list with securities 
    ConSymbolGroup securities[MAX_SEC_GROUP]; 

    int result = ExtManager->CfgRequestSymbolGroup(securities); 

    // 2 step 
    // request all groups 
    // list with groups 

    ConGroup *groups = ExtManager->CfgRequestGroup(&total); 
    ConGroupSec secgroups[MAX_SEC_GROUPS]; 

    int index_secgroup = 0; 
    int index_security = 0; 


    for (int i = 0; i < MAX_SEC_GROUP; i++)  
     for (int i =0; i < total; i++)    
      ExtProcessor.PrintResponse(size,      
       "GROUP=%s|" 
       "SECUTIRY_0=%s|"  
       "SECUTIRY_1=%s|" 
       "SECUTIRY_2=%s|\r\n", 
       groups[i].group, 
       securities[0].name, 
       securities[1].name, 
       securities[2].name); 

} 
+1

雖然你而從MT讀取數據遇到這個問題,這個問題就自我是與MetaTrader無關。我強烈建議你將它與MT隔離開(創建虛擬類,從其中一個虛擬類引用到另一個虛擬類),並且會幫助你理解問題,或者幫助其他人回答你的問題(現在大家都認爲它是關於MT並跳過它)。你的代碼中的一個問題是你使用週期,它們都使用相同的變量'i' – Uriil

+0

@Uriil實際上這是問題,我有1.證券(持有所有證券)2.組(持有所有組)3 。secgroups(持有組的安全設置) - >問題在於,在證券和證券設計中,沒有任何可以確定哪個安全屬於哪個組的通用數據,我知道我們只能通過索引來識別它們返回響應 - > for循環如何使其正確,我擁有所有必要的數據,唯一仍然使用安全索引和secgroup索引來確定它們屬於哪個組,可以幫助for循環嗎? – ionluchian

+0

好吧,假設你有兩個組,其中一個有FOREX和CFD,另外一個FOREX和METALS。應該輸出什麼? – Uriil

回答

1

下面是代碼片段,這將給你所需要的數據,這樣你就可以輸出它,你需要:

ConSymbolGroup sgconfigurations[MAX_SEC_GROUP]; 
_manager->Manager->CfgRequestSymbolGroup(sgconfigurations); 

int total = 0; 
ConGroup* result = _manager->Manager->CfgRequestGroup(&total); 

for (int i = 0; i < total; i++) 
{ 
    for (int j = 0; j < MAX_SEC_GROUP; j++) { 
     if (result[i].secgroups[j].show == 1 && sgconfigurations[j].name != NULL && sgconfigurations[j].name[0] != '\0') { 
      char* groupName = result[i].group; 
      char* securityName = sgconfigurations[j].name; 
     } 
    } 
} 
+0

謝謝,似乎工作正常,我可以看到,在我的結果很多地方sgconfigurations [j] .name是emhpy,我們可以過濾不列出emhpy一次嗎?因爲enow得到正確的結果,但有很多emphy證券 – ionluchian

+0

我懷疑,結果[i] .secgroups [j] .show == 1'應該完成這項工作並隱藏未使用的秒。但是我可能錯了 – Uriil

+0

現在的回覆是這樣GROUP = WLD-STD-1-USD | SECURITY = DEMO-Forex | GROUP = WLD-STD-1-USD | SECURITY = | GROUP = WLD-STD-1-USD | SECURITY = DEMO-CFD | GROUP = WLD-STD-1-USD | SECURITY = | GROUP = WLD-STD-1-USD | SECURITY = | GROUP = WLD-STD-1-USD | SECURITY = |,如果你可以過濾這個SECURITY = |什麼時候emphy會是完美的 – ionluchian