Errores, fallos, preguntas - página 106

 
Rosh:

Esto es probablemente para aquellos símbolos que no están en MarketWatch, como dice para SymbolName:

Obtenga el nombre del símbolo para el que obtiene un resultado inesperado y compárelo con la lista de MarketWatch.
Todos los símbolos están presentes en MarketWatch, en particular, devuelve cero para los instrumentos de tipo #AA, específicamente puse false en el script
string symbol=SymbolName(i,false);
Si no hay ningún símbolo en la ventana de MarketWatch, la función
if(SymbolInfoTick(symbol,last_tick))
devuelve el error 4302, la ayuda no especifica que para que esta función funcione correctamente, el símbolo debe estar presente en la ventana de MarketWatch
[Eliminado]  
sergey1294:
...no se menciona en la ayuda, que para el trabajo exitoso de esta función es necesario que la herramienta esté presente en la ventana de MarketWatch

La ayuda debe ser realmente personal con ejemplos normales y cuellos de botella.

PS

Además, suelen darse situaciones en las que, tras realizar cambios en el lenguaje, algunos EAs de la base dejan de funcionar (o generan errores de compilación).

 

Hoy me he dado cuenta...MT5(access.metatrader5.com:443)

EURJPY, Diario:

Por ejemplo GBPJPY, Diario: Todo está bien aquí.

Y aquí hay una captura de pantalla de EURJPY, Diario de una MT4 DC:

La diferencia es visible a simple vista....

¿Cómo se puede arreglar esto?

[Eliminado]  
Rosh:

Esto es probablemente para aquellos símbolos que no están presentes en MarketWatch, ya que para SymbolName dice:

Obtenga el nombre del símbolo para el que obtiene un resultado inesperado y compárelo con la lista de MarketWatch.

Para los símbolos que no están presentes en MarketWatch, SymbolInfoTick() devuelve un error ERR_MARKET_SELECT_ERROR "Símbolo no seleccionado en MarketWatch" (código 4302). En MarketWatch sólo se seleccionan el EURUSD y el GBPUSD. Una ejecución elemental muestra que SymbolInfoTick() devuelve un error ERR_MARKET_SELECT_ERRORpara los símbolos no seleccionados :

IS      0       1 (EURUSD,M15)  01:53:21        ************************************************
MF      0       1 (EURUSD,M15)  01:53:21        Инструмент - EURUSD
RR      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
RG      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = EUR
QM      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = EUR
CH      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1271.23
QG      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1271.05
CQ      0       1 (EURUSD,M15)  01:53:21        ************************************************
JQ      0       1 (EURUSD,M15)  01:53:21        Инструмент - GBPUSD
HQ      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
EH      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = GBP
RN      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = GBP
MI      0       1 (EURUSD,M15)  01:53:21        Маржа для покупки = 1553.53
DP      0       1 (EURUSD,M15)  01:53:21        Маржа для продажи = 1553.25
MG      0       1 (EURUSD,M15)  01:53:21        ************************************************
LR      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDCHF
NG      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
NJ      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
EQ      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
RI      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
GL      0       1 (EURUSD,M15)  01:53:21        ************************************************
PE      0       1 (EURUSD,M15)  01:53:21        Инструмент - USDJPY
DL      0       1 (EURUSD,M15)  01:53:21        Валюта депозита = USD
DF      0       1 (EURUSD,M15)  01:53:21        Базовая валюта = USD
OL      0       1 (EURUSD,M15)  01:53:21        Валюта маржи = USD
HL      0       1 (EURUSD,M15)  01:53:21        SymbolInfoTick() failed, error = 4302
QH      0       1 (EURUSD,M15)  01:53:21        ************************************************

...

Por cierto, el último bloque de datos en el registrode sergey1294 es diferente de los demás: primero, SymbolInfoTick() devuelve el mismo código de error esta vez, y segundo, - ¿no crees que el instrumento, la moneda base y la moneda del margen tienen algunos nombres extraños en este bloque de datos?

¿Es un error? ¿Has notado alguna vez esta rareza?

CE      0       OrderCalcMargin (EURUSD,M1)     20:44:27        ************************************************
IG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Инструмент - 
LS      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта депозита = USD
DD      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Базовая валюта = 
CL      0       OrderCalcMargin (EURUSD,M1)     20:44:27        Валюта маржи = 
RG      0       OrderCalcMargin (EURUSD,M1)     20:44:27        SymbolInfoTick() failed, error = 4302
 
En cuanto al último bloque de datos, se trata de un pequeño fallo en el bucle, y en la última consulta de datos se accedió a un instrumento inexistente, por lo que todos los campos, excepto la moneda del depósito, están vacíos
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
[Eliminado]  
sergey1294:
En cuanto al último bloque de datos, es que el bucle de fuerza bruta ha fallado un poco y en la última consulta de datos ha accedido a un símbolo inexistente, por lo que todos los campos, excepto la moneda del depósito, están vacíos

¿Cómo es esto? Es decir, el registro no es de la versión del código que se dio?

A juzgar por el código, todo está bien allí.

¿O SymbolsTotal() devolvía un valor, pero durante la ejecución del script, en algún momento de la mitad del ciclo, por un terrible accidente, el broker, configurando la parte del servidor, eliminaba un símbolo de los disponibles, y el SymbolsTotal() -si el script lo solicitaba- devolvía un nuevo valor, uno menos, pero, como la condición de fin de bucle se basaba en el antiguo valor almacenado en la variable Total, entonces las funciones correspondientes en la última iteración al acceder al símbolo ahora inexistente devolvían líneas vacías? :)

Hasta ahora, sólo se ha planteado este escenario para que esto ocurra. :)

 
No sé cómo sucedió, pero aún no ha sucedido
 
simpleton:

... Entonces el valor calculado se convierte explícitamente en ulong. Exactamente a ulong, porque hay una garantía de que el valor a lanzar es no negativo.

Al ser lanzado a un tipo entero, la parte fraccionaria del tipo real se descarta. No es el redondeo a la unidad más cercana, sino precisamente el desprendimiento de la parte fraccionaria lo que garantiza el no incremento del valor de los lotes máximos, que permite el margen libre. Eso es exactamente lo que necesitamos.

Simpleton, yo también he seguido un camino similar, pero he utilizado una conversión explícita a tipo int. He asumido que el tamaño máximo de lote posible estará limitado por el corredor/agente, o por el tamaño de mis propios fondos. Por lo tanto, el uso de int debería ser suficiente. ¿Crees que hay algún problema con este enfoque (redondear "desde abajo" usando int)?
[Eliminado]  

Los promotores.

¿Cómo puedo hacer que los parámetros aparezcan en los scripts (me da pereza cambiar constantemente el código para las nuevas condiciones)...?

 
Interesting:

Los promotores.

¿Cómo puedo hacer que los parámetros aparezcan en los scripts (me da pereza cambiar constantemente el código para las nuevas condiciones)...?


#property script_show_inputs