Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 273

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
Bon après-midi. J'ai besoin d'aide. S'il y a un ordre de vente fermé, l'ordre suivant ne peut être ouvert que pour l'achat. Qu'est-ce qui ne va pas dans ce code ? Veuillez me conseiller.

On vous a déjà dit que la deuxième ligne de ce fragment contient une erreur : avant d'appeler la fonction OrderType(), l'ordre doit être sélectionné à l'aide de la fonction OrderSelect().

Il y a une erreur à la ligne 3 : Mais y a-t-il un ordre avec le numéro 1 ? Si le numéro minimum était 1, c'est-à-dire que le compte commence avec 1, alors le numéro maximum serait égal au numéro (qu'il y ait 5 ordres au total: numéros d'ordre 1, 2, 3, 4, 5). Mais les commandes sont numérotées à partir de 0 - mettez le curseur sur OrdersHistoryTotal et appuyez sur F1 pour voir un exemple. Quel est donc le nombre maximum de commandes ?

 
Aleksey Vyazmikin:

Vous avez suggéré plus tôt de diviser le jour du mois par 7 et d'arrondir, ce qui est fait dans le deuxième tableau.

Je ne comprends pas votre algorithme.

Voici ce que je pense :

1) Déterminer le jour de la semaine du premier jour du mois.

2. Trouvez combien de jours il reste jusqu'à la fin de la semaine (de mercredi (3) à lundi 7-3 = 4).

3. Le 5ème jour - le début de la deuxième semaine

4. ensuite, dans la boucle, nous recherchons une semaine, si le nombre est compris entre 5 + 7 * x et 5 + 7 * (x +1), où x est le nombre de semaines moins un, alors nous avons trouvé la semaine.

Mais c'est compliqué, il y a peut-être un moyen plus simple ?

Alexey, nous parlons de choses différentes. Le problème n'était pas de déterminer quelle semaine du mois correspond au numéro du mois, mais le premier jour de la semaine portant ce nom dans le mois. Il s'agit de tâches différentes et, par conséquent, de solutions différentes.

Depuis 63 ans, je n'arrive toujours pas à comprendre comment calculer le nombre de semaines dans un mois. Par exemple, en Russie, le lundi est considéré comme le premier jour de la semaine. Si le mois commence le dimanche, comment compte-t-on le lundi ? La deuxième semaine a-t-elle commencé ? Ou quoi ? La question est rhétorique, il n'est pas nécessaire de lancer une polémique à ce sujet.

 
Alexey Viktorov:

Alexei, nous parlons de choses différentes. Le problème n'était pas de déterminer dans quelle semaine du mois se trouve le numéro du mois, mais de savoir si c'est le premier jour de la semaine portant ce nom dans ce mois. Il s'agit de tâches différentes et, par conséquent, de solutions différentes.

Depuis 63 ans, je ne comprends toujours pas comment compter le nombre de semaines dans le mois. Disons qu'en Russie, le premier jour de la semaine est le lundi. Si le mois commence le dimanche, comment le lundi est-il compté ? La deuxième semaine a-t-elle commencé ? Ou quoi ? La question est rhétorique, il n'est pas nécessaire de lancer une polémique à ce sujet.


Je vois. C'est une question définitive pour moi...

 
Alexey Viktorov:

Alexei, nous parlons de choses différentes. Le problème n'était pas de déterminer dans quelle semaine du mois se trouve le numéro du mois, mais de savoir si c'est le premier jour de la semaine portant ce nom dans ce mois. Il s'agit de tâches différentes et, par conséquent, de solutions différentes.

Depuis 63 ans, je n'arrive toujours pas à comprendre comment calculer le nombre de semaines dans un mois. Par exemple, en Russie, le lundi est considéré comme le premier jour de la semaine. Si le mois commence le dimanche, comment compte-t-on le lundi ? La deuxième semaine a-t-elle commencé ? Ou quoi ? La question est rhétorique, il n'est pas nécessaire de lancer une polémique à ce sujet.

J'ai cherché la réponse sur Yandex - 4 façons. J'aime la quatrième voie: la "transversalité". Le 1er janvier commence la première semaine de l'année, sept jours plus tard, le 8 janvier la deuxième semaine de l'année et ainsi de suite jusqu'à la fin de l'année. C'est la même chose mois après mois
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu C'est très compliqué. Il doit y avoir une option plus simple. Quelqu'un peut-il partager ?
//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//+-------------------------------------------------------+

#property strict
string Дни[7]={"Вс","Понедельник","Вторник","Среда","Четверг","Пятница","Сб"};
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  Alert("Сейчас на компьютере: ", TimeToStr(TimeLocal(),TIME_DATE));
  Alert("Последний тик с сервера: ", TimeToStr(TimeCurrent(),TIME_DATE), " Число ", День, " ", Дни[ДеньН]);

  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;
  Alert("ДеньНеделиПервогоЧисла = ", Дни[ДеньНачалаМесяца]);

  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;

  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
voici l'algorithme ci-dessus lu de bas en haut
 
STARIJ:

On vous a déjà dit que la deuxième ligne de ce fragment contient une erreur : avant d'appeler la fonction OrderType(), l'ordre doit être sélectionné à l'aide de la fonction OrderSelect().

Il y a une erreur à la ligne 3 : Mais y a-t-il un ordre avec le numéro 1 ? Si le numéro minimum était 1, c'est-à-dire que le compte commence avec 1, alors le numéro maximum serait égal au numéro (disons qu'il y a 5 ordres au total : numéros d'ordre 1, 2, 3, 4, 5). Mais les commandes sont numérotées à partir de 0 - mettez le curseur sur OrdersHistoryTotal et appuyez sur F1 pour voir un exemple. Quel est donc le nombre maximum de commandes ?

int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
   int tip=OrderType();
   

Est-ce que c'est correct maintenant ?

 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))   - так какой наибольший номер ордера?
   int tip=OrderType();

et maintenant c'est bon ?

écrire un script et après chaque instruction afficher l'information + GetLastError() avec Alert() - voir l'exemple de script juste au dessus
 
STARIJ:
écrire un script et après chaque opérateur imprimer l'information + GetLastError() avec Alert() - voir l'exemple de script ci-dessus

mais il vaut mieux prendre le code d'erreur de la variable _LastError pour l'imprimer, sinon on risque de détruire la logique avec un léger "debug print".

GetLastError() fait en même temps une chose peu évidente pour GetXXX() - elle change son état interne en remettant le code d'erreur à 0.

 
Maxim Kuznetsov:

seulement pour l'impression, il est préférable de prendre le code d'erreur de la variable _LastError, sinon il est possible de détruire la logique par un léger "debug print".

GetLastError() fait en même temps une chose peu évidente pour GetXXX() - il change l'état interne, remettant le code d'erreur à 0.

C'est une question de goût - soit vous stockez le code d'erreur dans une variable et réinitialisez l'erreur, soit vous le stockez dans _LastError pour une utilisation ultérieure.

 
STARIJ:
voici l'algorithme ci-dessus à lire de bas en haut
C'était rapide. Comment allez-vous chercher les bars ? Dans une boucle ou en utilisant la structure temporelle ?