Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1025

 

No consigo entender qué es lo que jura el optimizador.

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

El código al que culpa

            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))
              )

Este es el buffer del indicador personalizado, cuyo handle fue recibido correctamente y los datos también son copiados correctamente

      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);                                                                         // и выходим из функции
      }
}


 
Hola, ¿qué es MQL5InfoString oMQL5InfoInteger? ¿Dónde puedo leerlo? No lo he encontrado en la Ayuda.
 
Tango_X:
Hola, ¿qué es MQL5InfoString o MQL5InfoInteger? ¿Dónde puedo leer sobre ello? ¡No lo he encontrado en Ayuda!
¿Cómo pudo buscarlo que no lo encontró?
Документация по MQL5: Проверка состояния / MQLInfoString
Документация по MQL5: Проверка состояния / MQLInfoString
  • www.mql5.com
Проверка состояния / MQLInfoString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
¿Cómo buscaste que no pudiste encontrarlo?

Es extraño, en el editor presiono F1 contra esta función y no muestra nada... ¡gracias!

 
#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));
      }
  }

Después de borrar la orden magik=1. ¿Qué hacer?

 
ascerdfg:

Después de borrar la orden magic=1. ¿Qué hacer?

Has borrado una orden LOCAL. ¿Qué relación tiene la magia con el "1"? Más concretamente, ¿qué es exactamente lo que no le gusta o le confunde?

 
Vladimir Karputov:

Has borrado una orden LOCAL. ¿Qué relación tiene la magia con el "1"? Más concretamente, ¿qué es exactamente lo que no le gusta o le confunde?

         trader.OrderDelete(OrderGetTicket(0));
Sigue borrando pedidos inexistentes
 
ascerdfg:
Sigue borrando pedidos inexistentes

De acuerdo con su código, esto es exactamente lo que sucederá: se fuerza una orden en cada tick para eliminar una orden de REEMPLAZO con un tick "0".

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

En su código, esto es exactamente lo que ocurrirá: emitirá forzosamente una orden en cada tic para eliminar una orden BLOQUEADA con un tic "0".

no, no lo es, sólo si magik=1

 
ascerdfg:

no, sólo si magik=1

El punto no cambia - usted está tratando de eliminar una orden pendiente con una entrada "0" en cada tick.

¿Y quién dice que tiene una orden pendiente con un "0" en cada tick? ¿Ha comprobado cuántas órdenes pendientes hay? ¿Y cómo sabes que ....?