OrdersHistoryTotal() renvoie 0
4 réponses
Steve Green
il y a 5 ans #238359
Bonjour,
J'essaie d'obtenir la taille du dernier ordre pour un numéro magique et un symbole donné mais OrdersHistoryTotal() renvoie toujours 0 même si j'ai des ordres dans mon onglet Account History sur mon terminal mt4 ?
Mon code est le suivant.
extern int lv_hour = 6 ;
extern int lv_minute = 0 ;
extern int lv_orderMagicNumber = 0 ; // entrez le nombre magique correct ici
int lv_count = 0 ;
double lv_DefaultPositionSize = 5 ;
double lv_ReturnPositionSize = 0 ;
void start()
{
if (TimeHour(Time[0]) == lv_hour && Minute() == lv_minute && lv_count == 0)
{
lv_ReturnPositionSize = sqGetLastPositionSize(lv_orderMagicNumber) ;
if (lv_ReturnPositionSize != 0)
{
lv_DefaultPositionSize = lv_ReturnPositionSize ; //couvrir la taille de la position par défaut
}
printf("lv_DefaultPositionSize = " +lv_DefaultPositionSize) ;
lv_count = 1 ; // s'assure qu'il ne s'imprime qu'une fois dans le journal
}
}
double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal() ; i>=0 ; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
return(OrderLots()) ;
}
}
}
retour(0) ;
}
Merci d'avance
Steve
coensio
il y a 5 ans #238361
Par exemple, vous pouvez faire un peu de débogage et voir où cela ne va pas.
double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal() ; i>=0 ; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol())
{
Print("Symbole :",OrderSymbol()) ;
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
Print("Magie : ",OrderMagicNumber()) ;
return(OrderLots()) ;
}
}
}
retour(0) ;
}
Il s'agit d'une fausse déclaration.
Steve Green
il y a 5 ans #238362
Merci Coensie,
Avez-vous exécuté votre code ? Il n'entre même pas dans l'instruction if(OrderSelect) car OrderSymbol() renvoie NULL et je suppose que OrderSelect renvoie false, c'est pourquoi ?
voir la modification de votre fonction sqGetLastPositionSize ci-dessous :
double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal() ; i>=0 ; i-) {
Print("OrderSymbol() :",OrderSymbol()) ;
Print("Symbol() :",Symbol()) ;
Print("OrderMagicNumber() :",OrderMagicNumber()) ;
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol())
{
Print("Symbole :",OrderSymbol()) ;
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
Print("Magie : ",OrderMagicNumber()) ;
return(OrderLots()) ;
}
}
}
retour(0) ;
}
Des idées ?
coensio
il y a 5 ans #238365
Celui-ci a été vérifié sur mon compte :
double sqGetLastPositionSize(int orderMagicNumber)
{
for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i-)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if(OrderSymbol() == Symbol())
{
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber)
{
Print("Magic :",OrderMagicNumber()," OrderLots : ",LotsCommande()) ;
return(OrderLots()) ;
}
}
}
retour(0) ;
}
Il s'agit d'une fausse déclaration.
Steve Green
il y a 5 ans #238369
Cela ne fonctionne toujours pas, peut-être parce qu'il s'agit d'un compte de démonstration ?
Ma dernière commande était :
166861186 2019.01.24 08:00:01 acheter 0,79 usdjpy 109,625 109,690 0,000 2019.01.24 08:37:29 109,691 0,00 0,00 0,00 47,53
Voici ce que j'ai obtenu à partir de votre code :
2019.01.26 12:39:35.900 USDJPY,H1 : 109397 tick events (24 barres, 110397 bar states) traités en 0:00:00.016 (temps total 0:00:02.359)2019.01.26 12:39:35.900 USDJPY,H1 : 109397 tick events (24 barres, 110397 bar states) traités en 0:00:00.016 (temps total 0:00:02.359)2019.01.26 12:39:35.892 2019.01.25 06:00:00 dummy USDJPY,H1 : lv_DefaultPositionSize = 52019.01.26 12:39:35.889 2019.01.25 00:00:00 dummy inputs : lv_hour=6 ; lv_minute=0 ; lv_orderMagicNumber=2670682 ; 2019.01.26 12:39:33.536 TestGenerator : current spread 14 used
Affichage de 4 réponses de 1 à 4 (sur un total de 4)