[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 227

 
Neo333:
Bonjour, voici le problème : l'EA définit des ordres limites en attente, puis le prix évolue et les ordres deviennent des ordres au marché. Tout fonctionne, mais sur certains ordres il y a un problème absolument pas clair, puisque tous les ordres sont fixés par une certaine constante fixe "K", la distance entre eux devrait toujours être une constante (Rn+1 = Rn + "K"). Cependant, nous n'avons pas de chance ; l'ordre est ouvert, le prix est indiqué et tout est vérifié mais la distance entre l'ordre précédent et le suivant n'est pas égale à "K". Si nous vérifions les résultats des opérations arithmétiques avec les prix, c'est-à-dire si nous soustrayons simplement et vérifions le résultat, il est égal à "K" ; cependant la comparaison logique == montre toujours faux et cela conduit l'EA à ouvrir constamment des ordres à ce prix et donc à "penser" qu'il n'y a pas d'ordre à cet endroit. Désolé si c'est trop long, je voulais juste expliquer plus en détail. Honnêtement, je ne sais vraiment pas quoi faire :(
Si vous comparez par ==, alors utilisez NormalizeDouble, en général le meilleur MathAbs(Price1-Price2)<delta
 
VladimirR:

Merci beaucoup ! Mais il y a ceci 2011.09.30 21:26:49 TestGenerator : unmatched data error (volume limit 13634 at 2011.07.19 20:00 exceeded)

D'après ce que j'ai compris, ce message ne concerne pas l'Expert Advisor, mais j'aimerais quand même savoir comment le comprendre ?



Incohérence dans l'histoire du calendrier. https://www.mql5.com/ru/forum/108760
 
sergeev:

Aidez à réparer la fonction


73
Eugene1 30.09.2011 16:19

J'essaie d'écrire une fonction qui détermine le prix de clôture du dernier ordre (par l'heure la plus proche de l'heure actuelle).

Je l'écris comme ça :


Mais

faire

uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) {
int ticketDateTime=0 ;
int orderTicket=-1 ;
double closePrice = 0 ;
int ordTotal = OrdersTotal() ;
if (smb == "0") smb = Symbol() ;
for (int i = 0 ; i < ordTotal ; i++) {
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
si (OrderSymbol() == smb || smb == "") {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
si (cmd < OP_BUY || OrderType() == cmd) {
si (mMin < 0 || (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) {
si (ticketDateTime < OrderCloseTime()) {
ticketDateTime = OrderCloseTime() ;
orderTicket = OrderTicket() ;
closePrice = OrderClosePrice() ;
}
}
}
}
}
}
}
if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY ) ;
return(closePrice) ;
}

Mais pour une raison quelconque, la fonction renvoie les données de la toute première commande qui a été ouverte dans le testeur.

En fait, c'est mon objectif intermédiaire. Je voulais écrire une fonction qui donnerait le dernier prix de clôture d'un ordre partiel (pas pour le volume total du lot). Mais je ne sais pas comment faire...

int ordTotal = OrdersTotal();

Au lieu de cela...

int ordTotal = OrdersHistoryTotal();

... Suivant ...

if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );

Ici, je vois que vos connaissances ne sont pas très bonnes. Lors de la sélection d'une commande par ticket, le paramètre pool est ignoré. C'est-à-dire qu'il est inutile d'écrire MODE_HISTORY - ce paramètre ne concerne que la sélection par index.

Si un ordre a été sélectionné par ticket, vous devez vérifier l'heure de fermeture pour vous assurer qu'il a été sélectionné dans la liste des ordres fermés. Il doit être supérieur à zéro - seules les positions fermées ont ce paramètre >0.

 
Sur l'échelle de temps de 5 minutes dans le terminal de trading MT4, l'historique n'est pas affiché. Cela peut-il être résolu ?
 
rosman:
Sur l'échelle de temps de 5 minutes dans le terminal de trading MT4, l'historique n'est pas affiché. Cela peut-il être résolu ?
Je m'excuse pour la question stupide. Je voulais dire que l'historique avant novembre 2010 n'est pas affiché :)
 
rosman:
Je m'excuse pour la question brutale. Je voulais dire que l'historique avant novembre 2010 n'est pas affiché :)

Alors elle n'existe pas. Vous pouvez également préciser. Essayez de créer plus de barres sur le graphique dans les paramètres MT4.

Il est résolu en téléchargeant ou en achetant un historique plus long.

 
Zhunko:

Alors elle n'existe pas. Vous pouvez également préciser. Essayez de créer plus de barres sur le graphique dans les paramètres de MT4.

Ce problème peut être résolu en téléchargeant ou en achetant des historiques plus longs.

Service>Paramètres>Onglet Graphiques >le nombre maximum de barres dans la fenêtre était de 65 000 --> je l'ai changé pour 100 000 ou plus, toujours seulement novembre 2010 est le dernier. L'archive des cotations pour cet instrument et cette période est entièrement chargée - jusqu'à novembre 1999.
 
Quel est le nombre maximum de barres dans l'histoire ? Peut-être que l'histoire est déjà coupée.
 
Zhunko:
Quel est le nombre maximum de barres dans l'histoire ? Peut-être que l'histoire est déjà coupée.
vaut 10.000.000.
 
Téléchargez l'archive. Je vais regarder le mien.