Errores, fallos, preguntas - página 2936

 
x572intraday:

Resultado:

¿Cuál es el número impar no establecido? No se ha encontrado ni buscado en la Ayuda. No pareceEMPTY_VALUE.

Algún tipo de basura.

Valor de ajuste

int Arr[1]={0};
 
Vitaly Muzichenko:

Un poco de basura

Establece el valor.

No para practicar, sino por pura curiosidad teórica. Otro número (9xxx - no recuerdo exactamente) parecía más bien basura y apareció sólo una vez y no pudo reproducirse más, mientras que el número anterior era constante y se repetía de vez en cuando. (Me pregunto si a ti y a los demás os pasa lo mismo...) A mí me da igual, lo principal es que los demás programadores no se tropiecen penosamente.

 
x572intraday:

No era para practicar, sino por pura curiosidad teórica. Otro número (9xxx - no recuerdo exactamente) era más bien basura y aparecía una sola vez y no se podía reproducir más, mientras que el número anterior era constante y se repetía de vez en cuando. (Me pregunto si a ti y a otros programadores os pasa lo mismo) A mí me da igual, lo principal es que los demás programadores no se tropiecen penosamente.

Tengo "0", lo he comprobado varias veces

 
Vitaly Muzichenko:

Tengo un 0, comprobado varias veces.

Hmm... No sé cómo se relaciona una circunstancia con la otra, pero lo ejecuté como un indicador en diferentes pares de divisas - los números están escalando de manera diferente (en cada instrumento se repite el mismo número con cada tick ), incluso había un cero. Es extraño. Pero parece que sin inicializar con su propio número es realmente una basura.

 
x572intraday:

Hmm... No sé cómo se relaciona una circunstancia con la otra, pero lo ejecuté como un indicador en diferentes pares de divisas - los números están escalando de manera diferente (en cada instrumento se repite el mismo número con cada tick ), incluso había un cero. Es extraño. Pero parece que sin inicializar con su propio número es realmente una basura.

Lo he vuelto a comprobar insertando el código por tildes

en mt4 siempre es 0.

en mt5 sí, 0 es extremadamente raro, el número es 511026368

 
x572intraday:

Hmm... No sé cómo se relaciona una circunstancia con la otra, pero lo ejecuté como un indicador en diferentes pares de divisas - los números están escalando de manera diferente (en cada instrumento se repite el mismo número con cada tick), incluso había un cero. Es extraño. Pero parece que sin la inicialización con su propio número es realmente una basura.

La matriz (y todas las demás variables) se asigna a la memoria cuando se crea. Si el array no se inicializa, lo que quede allí de usos anteriores=basura.

Si no cambias los valores desde el programa, no le pasa nada a esta memoria, la basura mantiene su valor.

En MT4, todas las variables y arrays están obligados a ser inicializados con cero.

 

CExpert.TradeEventOrderTriggered() no ha sido llamado

Al trabajar con el mercado FORTS, servidor BCS-Demo, ha aparecido cierta inestabilidad en la llamada CExpert.TradeEventOrderTriggered() cuando se activan las órdenes pendientes.
El código del método CExpert::CheckTradeState de la biblioteca estándar MQL5 no tiene en cuenta la posible recepción asíncrona de información sobre posiciones, órdenes, operaciones e historial.

1446://--- check triggering of a pending order
1447:   if(hist_ord_tot==m_hist_ord_tot+1 && ord_tot==m_ord_tot-1)
1448:     {
1449:      //--- triggering of a pending order
1450:      if(deal_tot==m_deal_tot+1)

Cuando el código se ejecuta sobre datos históricos, las condiciones funcionan correctamente. Cuando se trabaja con datos reales, puede haber situaciones en las que la información sobre cambios de posiciones, operaciones, órdenes e historial no se obtiene al mismo tiempo, y el orden en que se obtiene la información es aleatorio.

Registro de llamadas del método bool CExpert::CheckTradeState(void). Una llamada deCheckTradeState() se corresponde con 2 líneas " CheckTradeState: .....".

//Сработал отложенный ордер открытия позиции
CheckTradeState: hist_ord_tot = 613 ord_tot = 0 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 613 m_ord_tot = 1 m_deal_tot = 543 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 614 ord_tot = 1 deal_tot = 544 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 614 m_ord_tot = 1 m_deal_tot = 544 m_pos_tot = 1

//Сработал отложенный ордер открытия позиции 
CheckTradeState: hist_ord_tot = 615 ord_tot = 1 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 545 m_pos_tot = 0
CheckTradeState: hist_ord_tot = 615 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 615 m_ord_tot = 1 m_deal_tot = 546 m_pos_tot = 1
CheckTradeState: hist_ord_tot = 616 ord_tot = 0 deal_tot = 546 pos_tot = 1
CheckTradeState: m_hist_ord_tot = 616 m_ord_tot = 0 m_deal_tot = 546 m_pos_tot = 1

Se puede ver en el registro:
1. Cuando se dispara una orden pendiente, la longitud del historial se actualiza más tarde que la información sobre las operaciones, las órdenes y las posiciones, lo que hace que no se cumpla la primera condición del código.
2. Posible desincronización de la recepción de información sobre los cambios en el número de órdenes, operaciones y posiciones, lo que lleva a la imposibilidad de cumplir la 2ª condición en el código (si de alguna manera se puede obviar el primer problema y realizar el primer if). Tal vez esta desincronización se produjo cuando una orden se ejecutó en 2 pasos (en partes: 1 lote+1 lote), pero en ese caso por qué el número de operaciones +1, y no +2.

Me quedé atascado con este código:

//--- establishment of the checkpoint history of the trade
   bool isSyncMode = MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_VISUAL_MODE);
   if(!isSyncMode)
      HistorySelect(m_beg_date,TimeCurrent());
   else
      HistoryPoint(true);
//---
   return(res);

El punto del bloque: si en modo asíncrono hemos llegado al final del procedimiento, eso es posible cuando no se carga el historial, recuperamos el historial, pero no memorizamos los valores de las cantidades de los pedidos, etc.

P.D. Parece que esta parte de la biblioteca estándar está poco desarrollada. Especialmente desconcertante es un fragmento de código escrito 3 veces seguidas.

1458: res=TradeEventOrderTriggered();
1459: //--- establishment of the checkpoint history of the trade
1460: HistoryPoint(true);
1461: return(res);

Escribo aquí con la esperanza de que se note el problema y se corrija algo en alguna parte.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Miré el tamaño de los archivos EX5 EA en el Mercado. Todos los que he mirado tienen menos de 200 Kb. ¿Qué hace que consiga tamaños tan pequeños? ¿Un simple código?
 
fxsaber:
He mirado los tamaños de los archivos del Asesor Experto EX5 en el Mercado. Todos ellos son menores de 200 KB. ¿Qué le permite conseguir un tamaño tan pequeño? ¿Un simple código?

Creo que los autores son unos genios, el 90% de los vendedores más importantes no tienen ninguna duda sobre la plataforma, así que escriben los códigos con un instinto natural ))))


Esta es la pregunta:

Estoy introduciendo datos:

#resource "Common\\Files\\EURUSD_tick.bin" as const MqlTick HistoryData[]

Me da un error:

archivo de recursos 'Common\Files\EURUSD_tick.bin' no encontrado

no se puede abrir el archivo de recursos .....\\\\MQL5\NExperts\NVirtual\NCommon\Files\EURUSD_tick.bin' (3)

Si coloco el archivo en la carpeta EA o en la carpeta Files, todo está bien.


¿Es posible que el recurso no se pueda montar desde la carpeta Common? -¿O tengo que especificar otra ruta?

 
Igor Makanu:

Creo que los autores son genios, el 90% de los que más venden no tienen ninguna duda sobre la plataforma, así que escriben los códigos con un conocimiento innato ))))

Para preguntas otras cuentas.

¿No se puede conectar el recurso desde la carpeta Common? -o necesita otra forma de prescribir?

No lo sé.