2017-05-11 39 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