Errores, fallos, preguntas - página 2932

 

Error en la descripción:

Error

Este campo se llama: time_type

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

Estoy tratando de permitir al usuario seleccionar ambos plazos y su número desde el menú de la ventana de configuración del indicador:

y quiero que los períodos seleccionados vayan directamente a PArray. Pero del ejemplo anterior resulta que asigno al array los valores preestablecidos en el programa y no los valores introducidos por un usuario. Además, el compilador genera advertencias:

Cuando intento sustituir la última línea por

el compilador genera un error por completo:

Además, NO_PERIOD=0 significaPERIOD_CURRENTE, y eso no lo necesito, necesito algo como false o EMPTY_VALUE, pero no encajan en absoluto.

¿Cómo lo arreglo?

Casi lo he arreglado.

 
La configuración de los símbolos en el probador no se mantiene, las sesiones de negociación se cortan el jueves y el viernes, debido a esto siempre hay un error mercado cerrado, las posiciones no se abren, la optimización es imposible, el robot no funciona correctamente, otros corredores están bien, pero este es necesario, ¿qué hacer? No sé por qué lo intenté antes. No sé, no sé si ya he registrado el robot de trading, pero nunca he podido abrir posiciones. ¿Quién sabe qué hacer? Registré una nueva cuenta, limpié el terminal de archivos temporales, probé con otro terminal, sin ayuda. problemas de video https://radikal.ru/video/1HA3UfUNVZt
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
¿Podría decirnos qué métodos existen para combatir el error "array out of range"? En primer lugar, no puedo utilizar Print para imprimir un elemento del array que se ha salido del rango porque el error está demasiado adelantado y nunca llega a imprimirse. En segundo lugar, este error no aparece de forma sistemática, sino a su antojo: ha aparecido una vez y el indicador no ha funcionado (sin embargo, está presente en la lista de indicadores del gráfico), todas las veces siguientes no se ha producido, sin necesidad de recompilar el indicador, nada que decir sobre su modificación.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:
Dígame, ¿qué métodos de lucha existen para atrapar y corregir el error "array out of range"?

ArrayResize() hacer antes de escribir un elemento del array, contar e introducir allí el número de elementos que debe haber en el array, o utilizar un array dinámico que en sí mismo engorda. Simplemente te sales del array, por ejemplo especificas un tamaño de 100 elementos, pero como el primer elemento es #0 algunos se confunden, si escribes los números en fila te caben del 0 al 99. No soy un programador profesional si acaso(pero puedo), lo primero que me vino a la cabeza, funciona)))

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
freelancerAntonyan:

Haga ArrayResize() antes de escribir un elemento del array, cuente e introduzca allí el número de elementos que debe haber en el array, o utilice un array dinámico que crezca por sí mismo.

En realidad, es dinámico de todos modos. De la ayuda:"La función sólo puede aplicarse a matrices dinámicas. Tenga en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no deben cambiar de tamaño. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal. "Pero no es un tampón indicador, así que hay que pensar con las manos y la cabeza...

 
x572intraday:

En realidad, ya es dinámico. De la ayuda:"La función sólo puede aplicarse a matrices dinámicas. Hay que tener en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no pueden cambiar de tamaño. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal. "Pero no es un tampón indicador, así que tendrás que pensar con las manos y la cabeza...

El problema de la captura de tales errores sólo se resuelve mediante el uso de "capas", como una clase de matriz personalizada que intercepta el direccionamiento.

MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
MQL's OOP notes: rubber arrays, safe numbers, exceptions handling and other tricks: part 1
  • 2016.11.08
  • www.mql5.com
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
 

Cuando se ejecuta el EA cuando el algotrading está deshabilitado y luego se habilita el algotrading:

Según el código de error, la prohibición de comercio permanece, aunque la propiedad TERMINAL_TRADE_ALLOWED es verdadera

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

El resultado debería ser el siguiente:

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
CopyTime(_Symbol,tf,0,1,Arr);
Obviamente, siempre debe ArraySize(Arr)=1. Esto es en el caso de una copia exitosa. Pero, ¿en qué casos puede fallar la copia del bar? Porque cuando se produceel error "array out of range", el terminal apunta a Arr[0].
 
x572intraday:
Obviamente, siempre debe ser ArraySize(Arr)=1. Esto es en el caso de una copia exitosa. Pero, ¿en qué casos puede fallar la copia del bar? Cuando se produce elerror "array out of range", el terminal apunta a Arr[0].

Después de todo, el error se ha detectado, cita de la ayuda:

4401

No se ha encontrado el historial solicitado.

Lo imprimí en el cuaderno de bitácora - lo tengo:

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

¿Qué hago ahora con él, a dónde voy? ¿Soy una mala mano o...? Al fin y al cabo, sólo estoy copiando una barra de 0 a 1. ¿Cómo puede no serlo (la historia)? Sobre todo porque el error no siempre aparece. ¿O es necesario comprobar y cargar el historial de antemano?