Errores, fallos, preguntas - página 2634

 

¡Hola!

Quiero ejecutar algunos MT4 con un archivo por lotes.

Por favor, podéis decirme cómo hacer esto y por qué mi código no funciona:

SET MY_PATH=C:\"Program Files (x86)"
%MY_PATH%\001\terminal.exe
TIMEOUT /T 160
%MY_PATH%\002\terminal.exe
TIMEOUT /T 160
%MY_PATH%\003\terminal.exe
TIMEOUT /T 160
%MY_PATH%\004\terminal.exe
TIMEOUT /T 160
%MY_PATH%\005\terminal.exe
TIMEOUT /T 160
%MY_PATH%\006\terminal.exe
TIMEOUT /T 160
%MY_PATH%\007\terminal.exe
TIMEOUT /T 160
%MY_PATH%\008\terminal.exe
TIMEOUT /T 160
%MY_PATH%\009\terminal.exe
TIMEOUT /T 160
%MY_PATH%\010\terminal.exe
TIMEOUT /T 160
%MY_PATH%\011\terminal.exe
TIMEOUT /T 160
%MY_PATH%\012\terminal.exe
TIMEOUT /T 160

En el mejor de los casos, ejecuta algunas MT4, y luego se cuelga.

Por supuesto, no hay escasez de RAM.

Además, lo he probado en diferentes ordenadores

 
Igor Zakharov:

No, no lo hace.

la hora del servidor, por cierto, no se detiene el sábado. he aquí lo contrario: en el terminal, la hora del servidor se actualiza con la llegada de una nueva cotización. Por ejemplo, usted tiene sólo un símbolo abierto en la visión general del mercado (no sólo en el probador, sino también en la realidad). y no hay ticks durante cinco segundos - todo este tiempo el temporizador de tiempo del servidor no se moverá. esto es cierto para el sábado: el tiempo del servidor está funcionando, pero el terminal no lo sabe, porque no hay ticks. el probador simplemente se perderá este período.

Ya lo he comprobado. En el probador,TimeLocal funciona los fines de semana,TimeTradeServer también, peroTimeCurrent por supuesto no. No hay ticks, pero la hora del servidor sigue ahí.

int OnInit()
{
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());

    EventSetTimer(3*3600);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer()
{
  Print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());
}
 
Igor Zakharov:

https://www.mql5.com/ru/forum/328008/page2#comment_14166682

Como siempre, las bicicletas.

La cuestión aquí es por qué no se aprueba.
Después de todo, las variables de los parámetros, tienen valores iniciales.

void MxResize(int row=1, int col=1)
{
   int A[row][col];    
      
}

Y si se especifica el tamaño de las medidas en números

void MxSize(int row=1, int col=1)
{
   int A[1][1];    
      
}

El compilador se lo salta, ¿cuál es el truco?

¿Podría el promotor hacer algún comentario al respecto?

 
Andrey Khatimlianskii:

¿Con qué fin? ¿Ejecutar la auto-optimización en el fin de semana? Entonces, establecer un temporizador desde OnTick a una distancia de unos pocos minutos funcionaría. Si funciona, entonces los ticks se han detenido y puedes optimizar.

Si es para otros fines, formúlelos.

No, no para otros fines.

No creí que TimeLocal funcionara los fines de semana, así que hice lo siguiente: añadí unas horas a TimeCurrent y comprobé el día de la semana. Si es el sábado, entonces empieza a optimizar.

Por supuesto, no puedo estar seguro del comienzo del sábado, porque el mercado cierra de forma diferente los viernes o los días festivos.

Además, no he encontrado en ningún sitio un medio para determinar si el mercado está cerrado o no.

 
Petros Shatakhtsyan:

No, no para ningún otro propósito.

No creí que TimeLocal funcionara los fines de semana, así que hice lo siguiente: añadí unas horas a TimeCurrent y comprobé el día de la semana. Si es el sábado, entonces empieza a optimizar.

Por supuesto, no puedo estar seguro del comienzo del sábado, porque el mercado cierra de forma diferente los viernes o los días festivos.

Además, no he encontrado en ningún sitio un medio para determinar si el mercado está cerrado o no.

¿Has probado?

SymbolInfoSessionTrade

o

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Algo de ellos debe ser bueno

 
Aleksey Mavrin:

¿Lo has probado?

SymbolInfoSessionTrade

o

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Uno de ellos debe ser bueno, recuerdo.

No, no lo he hecho. El manual no especifica cómo determinar si el mercado está abierto o no.

El caso es que cuando el mercado "abre" el lunes, por ejemplo en un broker las cotizaciones empiezan a entrar a las 02:05 pero las transacciones no son aceptadas durante unos minutos y muestra "Mercado cerrado".

No sé si esto ayudará o no.

HORA_DE_INICIO_DEL_SÍMBOLO

Fecha de inicio del instrumento (suele utilizarse para los futuros)

 
Petros Shatakhtsyan:

No, no lo he hecho. La guía no dice específicamente cómo determinar si el mercado está abierto o no.

El caso es que cuando el mercado "abre" el lunes, por ejemplo en un broker las cotizaciones empiezan a entrar a las 02h.05, pero no se aceptan operaciones hasta pasados unos minutos, da "Mercado cerrado".

No sé si esto ayudará o no.

HORA_DE_INICIO_DEL_SÍMBOLO

Este es el symbol_start_time (normalmente utilizado para los futuros)

ElSymbolInfoSessionTrademuestra cuando se inicia la negociación yel SymbolInfoSessionQuote cuando llegan las cotizaciones.

ap: esto debería ayudar.

boolIsTradeAllowed(
const string symbol// símbolo
datetimetested_time//tiempo
);

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

Como siempre, las bicicletas.

La cuestión aquí es por qué esa entrada no pasa.
Después de que todas las variables de los parámetros tengan valores iniciales.

Y si se especifica el tamaño de las medidas en números

entonces el compilador se lo salta, ¿cuál es la trampa?

¿Puede el promotor comentar esto?

Roman, es la segunda vez que caes en una elemental falta de voluntad de leer la documentación.

Sólo unnúmero entero puede ser un índice de matriz. No se permiten matrices de más de cuatro dimensiones. La numeración de los elementos de la matriz comienza por 0. El último elemento de una matriz unidimensional se numera con 1 menos que el tamaño de la matriz, es decir, acceder al último elemento de una matriz de 50 enteros se verá como a[49]. Lo mismo ocurre con las matrices multidimensionales: una dimensión se indexa desde 0 hasta el tamaño de la dimensión-1. El último elemento de la matriz bidimensional del ejemplo sería m[6][49].

Las matrices estáticas no pueden representarse como series temporales, es decir, la función ArraySetAsSeries() que establece el acceso a los elementos de la matriz desde el final de una matriz hasta su inicio no es aplicable a ellas. Si quieres proporcionar acceso a un array como en las series temporales, utiliza un objeto array dinámico.

Si se accede fuera del array, el subsistema ejecutor generará un error crítico y la ejecución del programa se detendrá.

Y la documentación de mql4, si la memoria no me falla, dice claramente que las variables no deben usarse como tamaño de array.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов...
 
Roman:

Como siempre, las bicicletas.

La cuestión aquí es por qué esa entrada no funciona.
Después de todo, las variables de los parámetros, tienen valores iniciales.

Y si se especifica el tamaño de las medidas en números

Entonces el compilador se lo salta, ¿cuál es el truco?

¿Podría el promotor hacer algún comentario al respecto?

No soy un desarrollador, pero voy a comentar.

Para un array estático, el compilador tiene que asignar un cierto número de bytes en memoria ya en tiempo de compilación.

¿Cuánta memoria tiene que asignar el compilador si no conocemos la fila y la columna en el momento de la compilación?

Los valores iniciales sólo se utilizan si se omiten los parámetros al llamar. Los parámetros reales sólo se conocen en tiempo de ejecución.

Así que, sin trucos, aprende el idioma.

 
Aleksey Mavrin:

No, no es eso,SymbolInfoSessionTrademuestra cuando hay negociación ySymbolInfoSessionQuote cuando llegan las cotizaciones.

ap: esto debería ayudar.

boolIsTradeAllowed(
const string symbol// símbolo
datetimetested_time//tiempo
);

No creo que lo haga. Hay un tema especial aquí :https://www.mql5.com/ru/forum/40295

No lo he mirado del todo, sobre todo porque es para MQL4.

No creo que el servidor deba enviar cotizaciones de símbolos si el mercado está cerrado.

Mi robot no se ve realmente afectado por esto porque después de la "apertura" del mercado, cuando llegan los ticks, analiza la tendencia, sus retrocesos, y eso lleva algún tiempo. Durante este tiempo se abre el mercado.

Pero se interpone si queremos ejecutar manualmente algunas operaciones durante este tiempo. Si la ejecución se basa en el mercado, la solicitud queda pendiente hasta la apertura del mercado y se ejecuta naturalmente al precio actual.

La función directa que recibe el nombre del símbolo y devuelve verdadero/falso (mercado abierto/cerrado) está claramente ausente.

Как правильно выяснить, что рынок закрыт? (mql4)
Как правильно выяснить, что рынок закрыт? (mql4)
  • 2015.01.31
  • www.mql5.com
Перевел советника в режим работы OnTimer() теперь когда рынок закрыт он этого не понимает и пытается торговать, в общем обращается к серверу и естественно получает ошибки и забивает логи журнала.