Questions des débutants MQL5 MT5 MetaTrader 5 - page 186

 
veuillez me conseiller le meilleur indicateur de signal sur ce site... à condition qu'il soit gratuit bien sûr !
 
barabashkakvn:
Et "beaucoup de calculs basés sur l'histoire" aboutissent à un tableau dynamique?

Cela existe, oui :) Plus précisément, plusieurs tableaux dynamiques sont utilisés, mais ils ne sont pas censés atteindre une taille trop importante.

En ce qui concerne la division en deux, le segment à prendre et le nombre d'entrées ne semblent pas faire de différence. En moyenne, une journée est traitée en 2500-3500 ms, mais une semaine doit attendre quelques minutes. Je n'ai pas de bûche appropriée sous la main pour le moment, je ne peux pas être sûr de la quantité. Mais un ordre de grandeur de plus que 5x par jour, et la plupart du temps est passé sur le dernier ou les deux derniers jours. Un mois, par contre, peut être laissé toute la nuit et au matin, il sera probablement encore accroché >.>.

 
Lone_Irbis:


Et pour ce qui est de la division en deux, il ne semble pas y avoir de différence entre la section à prendre et le nombre d'entrées.

Inclure un test avant avec un rapport 1 / 2. Il divisera automatiquement l'historique en périodes. En outre, vous découvrirez également si cela en vaut la peine.
 
Lone_Irbis:
Je me demande s'il existe quelque part un article intitulé "les raisons les plus courantes de la lenteur de l'EA" ? J'essaie de comprendre pourquoi le conseiller expert dans le testeur de stratégie vole au début mais ralentit ensuite. Elle n'en est pas au stade de développement où cela peut être critique (la vitesse est suffisante pour le développement des mécanismes et outils de base). Mais il est tout de même gênant que les segments de plus d'une semaine n'aient pas de sens, car après cela, la vitesse tend déjà vers zéro.

Essayez de mettre un baril de peinture sur ses roues et de le glisser derrière vous au besoin.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

Линейное торможение - ошибка программиста или особенность работы MT4?
Линейное торможение - ошибка программиста или особенность работы MT4?
  • www.mql5.com
Такая работа просто убивает возможность оперативной настройки советника.
 
MetaDriver:

Essayez de mettre le baril de peinture sur ses roues et de le faire glisser derrière vous au besoin.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

C'est une parabole intéressante :) Merci pour le conseil. Il ne reste plus qu'à trouver ce baril particulier... Ou plutôt des barils. Cependant, j'ai déjà un vague soupçon de manipulateurs de nouvelles et de niveaux de résistance...
 
Lone_Irbis:
C'est une parabole amusante :) Merci pour le conseil. Il ne reste plus qu'à trouver le baril... Ou plutôt des barils. Cependant, j'ai déjà un vague soupçon de manipulateurs de nouvelles et de niveaux de résistance...
Le plus souvent, un tel baril est "le début des temps" - le conseiller expert tente de réanalyser son propre historique de trading (ou d'autres informations accumulées) à chaque barre (tick).
 
Je me suis récemment recentré sur la création de panneaux, et ma question est donc la suivante. Je suis en train de créer deux étiquettes OBJ_RECTANGLE_LABEL et OBJ_LABEL et je ne sais pas comment faire glisser OBJ_RECTANGLE_LABEL sur le graphique pour que OBJ_LABEL soit glissé exactement comme un seul. Peut-être qu'il existe un mécanisme qui les relie les uns aux autres et qu'une action sur l'un provoque la même chose sur l'autre (tous les autres) ?
 
MetaDriver:
Le plus souvent, un tel baril est "le début des temps" - l'historique de ses propres transactions (ou toute autre information accumulée) qu'un conseiller expert tente de réanalyser à chaque barre (tick).

О ! De façon assez surprenante, le problème a été trouvé et corrigé en quelques minutes. En effet, le problème se situait dans l'historique des transactions, qui reprenait chaque tick. La fonction que j'ai hérité du code a la "the simplest Expert Advisor for mql5" qui a été utilisé au début. Je n'y ai plus pensé depuis. Cela semble fonctionner, alors je me dis : pourquoi s'embêter avec ça... De toute évidence, je ferais mieux d'examiner les restes de ce code :) Juste au cas où quelqu'un aurait fait une recherche sur Google avec des décalages similaires, je vais poster le fragment problématique et mon travail créatif sur le sujet pour tenter de résoudre ce problème. Je ne sais pas dans quelle mesure ma version est plus "correcte" par rapport à la source. Il est probable que ce soit exactement le même code merdique que tout ce que j'écris. [Moi, bien sûr, je m'en fiche. Je veux dire, si quelqu'un pense à utiliser la pièce du bas : prenez en compte que l'auteur est un shitcoder autodidacte. Mais au moins, rien ne semble être cassé et le robot vole comme un jet :) Eh bien, comparé à ce que c'était, au moins. Les deux mois d'essai sont passés en une minute environ, ce qui est tout de même un beau contraste avec les 6 heures et plus de l'original ;)

C'était :

// Эта функция вызывалась дважды за каждый тик. С ее помощью записывались две глобальные переменные: 
// с ценой последнего ордера и числом открытых ордеров (да, взятый за исходник код был примером самого простейшего мартина). 
double History(bool LastPrice = false){
   long Ticket, OldTicket = 0, PosID, Magic, Dir;
   double PriceOpen = 0, Count = 0;
   ENUM_DEAL_TYPE CheckDir;
   if(Sell) CheckDir = DEAL_TYPE_SELL; 
   else if(Buy) CheckDir = DEAL_TYPE_BUY;
   
   HistorySelect(0, Now);
   int HistoryTotal = HistoryDealsTotal();
   // Проблемное место было тут: в цикле перебиралась вся история торговли, что в начале немного. 
   // Но даже за сутки счетчик доходил до сотни (не рискну предположить, сколько там набиралось за месяц). 
   // И этот бессмысленный и беспощадный процесс повторялся на каждом тике вообще без всякой на то причины.
   for (int i=0; i < HistoryTotal; i++){ 
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Dir    = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if(LastPrice) { // Этой частью добывалась цена
         if(PosID == PositionID && Magic == MagicNumber && Dir == CheckDir) {
            if(Ticket > OldTicket) {
               PriceOpen = HistoryDealGetDouble(Ticket, DEAL_PRICE);
               OldTicket = Ticket;
            }
         }
      }
      
      else { // А тут оно считало ордера
         if(PosID == PositionID && Magic == MagicNumber) Count++;
      }                              
   }
   
   if(LastPrice) return(PriceOpen);
   else return(Count);
}

Devenu :

// Вызывается она теперь только в конце функций создания/изменения/закрытия позиций. Если открытых нет - глобальные переменные просто обнуляются.
// Хотя в принципе, если вызывать ее не каждый тик, а только на изменениях, вероятно и старая версия не тормозила бы так уж сильно
void History(){
   long Ticket, PosID, Magic, Dir;
   bool GotPrice = false;
   Total = 0;
   HistorySelect(0, Now);
   int HistoryTotal = HistoryDealsTotal();
   
   // Похоже, что быстрее будет считать с обратного конца
   for(int i=HistoryTotal;i>=0;i--){
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Dir    = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if(PosID == PositionID && Magic == MagicNumber) {
         // Корявую конструкцию заменяем на... другую корявую конструкцию... но она хотя бы компактнее :)
         Total++; 
         if(!GotPrice){
            LastOrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
            GotPrice = true; // Раз уж нужная цена всегда в начале списка, на ней и остановимся
         }
      }
      // Чтобы не перепахивать всю торговую историю, если номер позиции уже меньше нашего (но больше ноля) - прерываем цикл
      else if(PosID > 0 && PosID < PositionID) break; 
   }
}

En tout cas, merci pour votre aide :) Sans ce conseil, il ne me serait probablement pas venu à l'esprit de regarder dans ces coins poussiéreux du code avant longtemps...

 
Lone_Irbis:

О ! De façon assez surprenante, le problème a été trouvé et corrigé en quelques minutes. En effet, le problème se situait dans l'historique des transactions, qui reprenait chaque tick. La fonction que j'ai hérité du code a la "the simplest Expert Advisor for mql5" qui a été utilisé au début. Je n'y ai plus pensé depuis. Cela semble fonctionner, alors je me dis : pourquoi s'embêter avec ça... De toute évidence, je ferais mieux d'examiner les restes de ce code :) Juste au cas où quelqu'un aurait fait une recherche sur Google avec des décalages similaires, je vais poster le fragment problématique et mon travail créatif sur le sujet pour tenter de résoudre ce problème. Je ne sais pas dans quelle mesure ma version est plus "correcte" par rapport à la source. Il est probable que ce soit exactement le même code merdique que tout ce que j'écris. [Moi, bien sûr, je m'en fiche. Je veux dire, si quelqu'un pense à utiliser la pièce du bas : prenez en compte que l'auteur est un shitcoder autodidacte. Mais au moins, rien ne semble être cassé et le robot vole comme un jet :) Eh bien, comparé à ce que c'était, au moins. Les deux mois d'essai sont passés en une minute environ, ce qui est tout de même un beau contraste avec les 6 heures et plus de l'original ;)

C'était :

Devenu :

En tout cas, merci pour votre aide :) Sans ce conseil, il ne me serait probablement pas venu à l'esprit de regarder dans ces coins poussiéreux du code avant longtemps...

ok.
 
paladin800:
Je me suis récemment recentré sur la création de panneaux, et ma question est donc la suivante. Je suis en train de créer deux étiquettes OBJ_RECTANGLE_LABEL et OBJ_LABEL et je ne sais pas comment faire glisser OBJ_RECTANGLE_LABEL sur le graphique pour que OBJ_LABEL soit glissé exactement comme un seul. Peut-être existe-t-il un mécanisme pour les lier les uns aux autres et une action sur l'un d'entre eux entraînera la même action sur l'autre (tous les autres) ?

Ce mécanisme n'existe pas. Vous devez le créer vous-même. Heureusement, ce n'est pas si difficile. Mais cela demandera du travail.

Bonne chance.

Raison: