Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 737

 
Alexey Viktorov:
¿Cuál es la dimensionalidad de la matriz NewsArr en la segunda dimensión?

Por desgracia, no lo entiendo. ¿Cuál es la segunda dimensión?

Ah, creo que lo entiendo: NewsArr toma los valores 0,1,2 y 3. ¿Esto?

Debe ser: cadena NewsArr[4][1000];

 
novichok2018:

Por desgracia, no lo entiendo. ¿Cuál es la segunda dimensión?

Ah, creo que lo entiendo: NewsArr toma los valores 0,1,2 y 3. ¿Esto?

Debe ser: cadena NewsArr[4][1000];

Primera dimensión y segunda dimensión.

Pero probablemente sea la respuesta equivocada.
 
Alexey Viktorov:

La primera dimensión y la segunda dimensión.

Pero debes haber contestado algo mal.

¿Dónde busco la dimensionalidad de la segunda dimensión?

¿O es la dimensionalidad de la primera dimensión 4 y la segunda dimensión 1000?
 
novichok2018:

¿Y dónde se busca la dimensionalidad de la segunda dimensión?

¿O la primera dimensión es 4 y la segunda 1000?

Sí. Pero algo está mal en este puesto

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta que los novatos tengan sobre MQL4, ayuda y discusión sobre algoritmos y códigos

novichok2018, 2019.01.16 15:52

Probablemente sea una pregunta tonta ya que nadie está respondiendo, pero ¿cómo hacer frente a que EA se detenga y se reanude después de la compilación?

La plataforma da un mensaje:array fuera de rango (284,17).

línea 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); laposición 17 abre un corchete con NomNews, que se inicia globalmente con 0.

He cambiado el 0 por el 1, sin éxito.
Cambié la línea if(NomNews==300)break; 300 a 360000, sin éxito.

Lo compilo y funciona bien durante unos minutos. ¿Y qué hacer?

Cuando el número de valores en la segunda dimensión es 1000 y

if(NomNews==300)break;
No puede haber un desbordamiento del array en la segunda dimensión.


 
psyman:

No tengo puntos de anclaje, sólo movimiento vertical, y pongo la horizontal una vez a lo ancho de la pantalla. No es un problema contar desde el otro lado, pero es sorprendente que la misma acción se realice de forma diferente en distintas funciones.


Y otra pregunta - si quiero dar salida a la oferta como un texto de etiqueta, ¿qué función debo utilizar para hacerlo de manera óptima -OnChartEvent oOnCalculate?

OBJ_LABEL tiene un punto de anclaje aunque no lo hayas establecido. Por defecto es la esquina superior izquierda. La oferta se cambia en OnCalculate y allí se puede cambiar el texto de la etiqueta.

 
Alexey Viktorov:

Sí. Pero hay algo confuso en este mensaje

Cuando el número de valores en la segunda dimensión es 1000 y

No puede haber un array fuera de rango en la segunda dimensión.


No, parece que no hay confusión. Este es el mensaje copiado: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array fuera de rango en 'OnNews_M5_EURUSD.mq4' (284,17).

He mostrado la línea 284 arriba.
 
novichok2018:

No, no creo que tenga nada malo. Este es el mensaje copiado: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array fuera de rango en 'OnNews_M5_EURUSD.mq4' (284,17).

He mostrado la línea 284 arriba.

La posición 17 abre un corchete con NomNews, que se inicia globalmente con 0.

Entonces, tienes un array de tamaño cero en la segunda dimensión...

 
Artyom Trishkin:

Así que el tamaño de las celdas de tu matriz en la segunda dimensión es cero...

Aquí se encuentraNomNews:

datetime TimeNewsFunck(int nomf)

{

string s=NewsArr[0][nomf];

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));

return((datetime)(StringToTime(time) + GMTplus*3600))

}

//345678901234567890////////////////////////////////////////////////////////////////////////////////

void ActualizarNoticias()

{

string TEXT=ReadCBOE();

int sh = StringFind(TEXT, "pageStartAt>")+12;

int sh2= StringFind(TEXT,"</tbody>");

TEXT=Substr(TEXT,sh,sh2-sh);


sh=0;

while(!IsStopped())

{

sh = StringFind(TEXT, "event_timestamp",sh)+17;

sh2= StringFind(TEXT, "onclick",sh)-2;

if(sh<17 || sh2<0)break;

NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);


sh = StringFind(TEXT,flagCur,sh)+10;

sh2= sh+3;

if(sh<10 || sh2<3)break;

NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;


sh = StringFind(TEXT, "title",sh)+7;

sh2= StringFind(TEXT, "Volatilidad",sh)-1;

if(sh<7 || sh2<0)break;

NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)continue;

if(StringFind(NewsArr[2][NomNews], "Moderado")>=0 && !MidleNews)continue;

if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continue;


sh=StringFind(TEXT, "evento izquierdo",sh)+12;

int sh1=StringFind(TEXT, "Habla",sh);

sh2=StringFind(TEXT,"<",sh);

if(sh<12 || sh2<0)break;

if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);

else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);


NomNews++;

if(NomNews==300)break;

}

}

Valores de 0 a 300. ¿Ajustado globalmente a 4?

 
novichok2018:


Valores de 0 a 300. ¿Debo ponerlo globalmente a 4?

Sigue dando un mensaje a los 12 minutos.

 
novichok2018:

Sigue dando un mensaje al minuto 12 de funcionamiento.

De todo esto deduzco que NomNews entra en el bucle While ya en un estado superior a 999. Entonces hay que averiguar qué es lo que lo provoca y restablecer esta variable en algún lugar.

Para comprobarlo, escríbalo al principio del bucle:

if(NomNews > 999)
{
   Print(NomNews);
   break;
}