2017-05-11 6 views
1

Je suis l'aide du gestionnaire de l'API pour la plateforme de trading MetaTrader 4MT4 API plateforme de trading Manager - obtenir des titres par groupe

je dois obtenir tous les titres par GROUPE

par exemple GROUP = préliminaire | SECUTIRY_0 = Forex | SECUTIRY_1 = CFD | SECUTIRY_2 = |

j'ai quelques conseils comment le faire ci-dessous.

    1. Après demande config de titres à l'aide CfgRequestSymbolGroup (configurations ConSymbolGroup) vous avez obtenu tous les titres *
    1. Donc vous avez ConSymbolGroup pour chaque sécurité et maintenant que les configurations [0] est forex, les configurations [1] est cfd et confi guration [2] est des métaux par exemple. *
    1. Puis demander config groupe à l'aide CfgRequestGroup (int totale), vous obtiendrez la structure ConGroup pour chaque groupe.
    1. ConGroup a ConGroupSec secgroups [MAX_SEC_GROUPS] paramètres -. Paramètres du groupe de sécurité *
    1. Les indices seront être le même si secgroups [0] est forex paramètres pour ce groupe, secgroups [1] est cfd et ainsi de suite. *

mon code est ci-dessous, mais peut pas obtenir le résultat souhaité, dans le code ci-dessous je reçois la liste avec SECURITIES ET LA LISTE AVEC GROUPES mais ne peut pas obtenir des index basés sur la description ci-dessus pour obtenir le résultat dans ce format

GROUPE = préliminaire | 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

Bien que vous rencontrez ce problème lors de la lecture des données de MT, le problème lui-même est pas lié à MetaTrader. Je vous suggère fortement de l'isoler de MT (créer des classes factices, des références de l'un d'eux à l'autre) et vous aider à comprendre le problème, ou cela aidera d'autres personnes à répondre à votre question (tout le monde pense que c'est à propos de MT et le saute). Le seul problème dans votre code est que vous utilisez des cycles, qui utilisent la même variable 'i' – Uriil

+0

@Uriil en fait c'est la question, j'ai 1. titres (détenir tous les titres) 2. groupes (tenir tous les groupes) 3 .secgroups (détenir les paramètres de sécurité pour les groupes) -> le problème est que dans les titres et la sécurité il n'y a pas de données communes que je peux indétecter quelle sécurité appartient à quel groupe, la réponse est que nous ne pouvons les identifier que par des indices rensponse est retourné -> pour la boucle comment le rendre correct, j'ai toutes les données nécessaires, la seule chose restait à utiliser l'index de sécurité et l'index secgroup pour identifier pour quel groupe ils appartiennent, pourriez-vous aider avec la boucle for? – ionluchian

+0

Ok, disons que vous avez deux groupes et l'un d'eux a FOREX et CFD et le deuxième FOREX et METALS. Quelle devrait être la sortie? – Uriil

Répondre

1

Voici l'extrait de code qui vous donnera besoin de données, de sorte que vous pouvez produire comme vous avez besoin:

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

merci, semble fonctionner correctement, je peux voir que sgconfigurations [j]. nom dans mon résultat dans beaucoup d'endroits est emhpy, pourrions-nous filtrer ne pas lister l'emhpy une fois? parce que le résultat obtenu est correct, mais avec beaucoup de titres emphy – ionluchian

+0

Je soupçonne que 'result [i] .secgroups [j] .show == 1' devrait faire le travail et cacher les secondes inutilisées. Cependant, je peux me tromper – Uriil

+0

maintenant la réponse est comme ceci GROUPE = WLD-STD-1-USD | SÉCURITÉ = DEMO-Forex | GROUPE = WLD-STD-1-USD | SECURITE = | GROUPE = WLD-STD-1-USD | SECURITE = DEMO-CFD | GROUPE = WLD-STD-1-USD | SECURITE = | GROUPE = WLD-STD-1-USD | SECURITE = | GROUPE = WLD-STD-1-USD | SECURITE = |, si vous pouvez filtrer cette SECURITE = | Quand est-ce que emphy sera parfait – ionluchian