OrdersTotal retourne 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Bien que je comprenne qu'il devrait retourner 1, ou est-ce que je le lis mal ?
Les ordres ne sont pas des positions. Un ordre est un ordre non exécuté d'ouvrir une position, tandis qu'une position est le résultat de l'exécution d'un ordre.
Merci, je vois, donc on va utiliser la fonction PositionsTotal.
Et le premier problème ?
J'ai écrit ce code et quelque chose n'est pas clair où l'erreur pourrait être
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
Le journal affiche les résultats suivants
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Samedi
pour autant que je sache, le 5e jour est le vendredi.
J'ai écrit ce code et quelque chose n'est pas clair où l'erreur pourrait être
Le journal affiche les résultats suivants
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Samedi
pour autant que je sache, le 5e jour est le vendredi.
Pour toute valeur de day_of_week, vous obtiendrez la valeur "Saturday". Parce qu'il n'y a pas d'opérateurs de rupture entre les cas
2 points plus obscurs
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Renvoie un blanc ou un espace, mais pas un nom de caractère.
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Retourne 1 alors que j'en ai au moins 10 d'ouverts.
Mais si vous mettez false au lieu de true, tout semble fonctionner correctement.
Renvoie un blanc ou un espace, mais pas le nom du caractère.
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }C'est probablement correct si vous voulez passer en revue tout ce qui se trouve dans le DC. Si vous ne voulez que ce qui se trouve dans la table des terminaux, alors changez false en true.
C'est ce que je dis : le vrai ne marche pas !
C'est ce que je dis, ça ne marche pas avec le vrai !
Il fonctionne, je l'ai vérifié sur trois sociétés de courtage (j'ai recherché tous les symboles qui sont négociés dans les sociétés de courtage).
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
Et ce code va passer en revue tout ce qui est sélectionné dans la fenêtre "Market Watch".
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
Ce que je ne comprends pas, c'est ceci. Pourquoi faire une telle recherche dans OnTick().
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Je lance le testeur sur EURUSD, tout fonctionne, les deux ordres sont envoyés. Si nous décommentons la ligne, l'ordre GBPUSD n'est pas ouvert et il y a une erreur dans le journal :
2010.06.02 10:34:26 Core 1 n'a pas réussi à vendre instantanément 1.00 GBPUSD à 0.00000 [Arrêts invalides].
2010.06.02 10:34:26 Core 1 Aucun prix pour le symbole GBPUSD
J'ai essayé SymbolInfoTick, même chose.
Connaissez-vous le SymbolInfoTick ou le SymbolInfoDouble ?