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

 

Je n'arrive pas à comprendre ce que l'optimiseur est en train de jurer ?

2019.04.10 13:26:50.177 Core 8  genetic pass (13, 498) tested with error "critical runtime error 502 in OnTick function (array out of range, module Experts\xxxxxx.ex5, xxxxxx.mq5, line 384, col 73)" in 0:00:00.102

Le code qu'il reproche

            if(profit_level == EMPTY_VALUE
               && ((pos_set.order_direction == trend_up && (buffer_HMA7C[2] <= buffer_HMA7C[1] && buffer_HMA7C[1] >= buffer_HMA7C[0]) && buffer_HMA7C[0] > pos_set.order_price)
               ||  (pos_set.order_direction == trend_dn && (buffer_HMA7C[2] >= buffer_HMA7C[1] && buffer_HMA7C[1] <= buffer_HMA7C[0]) && buffer_HMA7C[0] < pos_set.order_price))
              )

Il s'agit du tampon de l'indicateur personnalisé, dont le handle a été reçu correctement et les données sont également copiées correctement.

      handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_121",period_HMA7C);
      if(handle_HMA7C == INVALID_HANDLE)                                   // проверяем наличие хендла индикатора
      {
         Print("Не удалось получить хендл индикатора handle_HMA7C");       // если хендл не получен, то выводим сообщение в лог об ошибке
         return(INIT_FAILED);                                              // завершаем работу с ошибкой
      }
      else
      {
         Print("Получен хендл индикатора handle_HMA7C");
         ChartIndicatorAdd(ChartID(),0,handle_HMA7C);                      // подключаем индикатор к графику
      }
.........................................
//+------------------------------------------------------------------+
bool copyBuffers()
{
   int   nbars = 11;
   
   ArrayFree(rates);
   ArrayFree(buffer_HMA7C);
      
   ResetLastError();
   
   if(CopyRates(Symbol(),0,0,nbars,rates) < nbars) return(false);
   
      if(CopyBuffer(handle_HMA7C,0,1,nbars,buffer_HMA7C) < nbars )         // копируем данные из индикаторного массива в массив buffer_HMA7C
      {                                                                                         // если не скопировалось
         Print("Не удалось скопировать данные из индикаторного буфера в buffer_HMA7C");         // то выводим сообщение об ошибке
         Print("LastError = "+string(GetLastError()));
         return(false);                                                                         // и выходим из функции
      }
}


 
Bonjour ! Qu'est-ce que MQL5InfoString ouMQL5InfoInteger? Où puis-je trouver des informations à ce sujet ? Je n'ai pas pu le trouver dans l'Aide !
 
Tango_X:
Bonjour ! Qu'est-ce que MQL5InfoString ou MQL5InfoInteger ? Où puis-je lire à ce sujet ? Je ne l'ai pas trouvé dans Aide !
Comment avez-vous pu le chercher pour ne pas le trouver ?
Документация по MQL5: Проверка состояния / MQLInfoString
Документация по MQL5: Проверка состояния / MQLInfoString
  • www.mql5.com
Проверка состояния / MQLInfoString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Comment avez-vous cherché pour ne pas le trouver ?

C'est étrange, dans l'éditeur j'appuie sur F1 contre cette fonction et cela ne montre rien... merci !

 
#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
      Print("тикет ",OrderGetTicket(0));
      Print("магик ",OrderGetInteger(ORDER_MAGIC));
      if (OrderGetInteger(ORDER_MAGIC)==1)
      {
         trader.OrderDelete(OrderGetTicket(0));
      }
  }

Après avoir supprimé l'ordre magik=1. Que faire ?

 
ascerdfg:

Après avoir supprimé l'ordre magic=1. Que faire ?

Vous avez supprimé une commande LOCALE. Quel est le rapport avec la magie qui est "1" ? Plus précisément, qu'est-ce qui ne vous plaît pas ou vous laisse perplexe ?

 
Vladimir Karputov:

Vous avez supprimé une commande LOCALE. Quel est le rapport avec la magie qui est "1" ? Plus précisément, qu'est-ce qui ne vous plaît pas ou vous laisse perplexe ?

         trader.OrderDelete(OrderGetTicket(0));
Continue à supprimer des commandes inexistantes
 
ascerdfg:
Continue à supprimer des commandes inexistantes

Selon votre code, c'est exactement ce qui va se passer : vous forcez une commande sur chaque tick pour supprimer un ordre de REMPLACEMENT avec un tick "0".

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Vladimir Karputov:

Dans votre code, c'est exactement ce qui va se passer : vous allez émettre de force une commande à chaque tick pour supprimer un ordre LOCKED avec un tick "0".

non, il ne l'est pas, seulement si magik=1

 
ascerdfg:

non, c'est seulement si magik=1

Le point ne change pas - vous essayez de supprimer un ordre en attente avec un ticket "0" sur chaque tick.

Et qui dit que vous avez un ordre en attente avec un tick "0" sur chaque tick ? Avez-vous vérifié le nombre d'ordres en attente ? Et comment savez-vous que .... ?