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

 
Igor Zakharov:

¡Esto no es un reemplazo - MB no funciona en los indicadores ya que detiene el flujo hasta que se presiona el botón!

Lo he aconsejado sin querer, pero no es eso lo que dice la nota en absoluto:

Nota

No se recomienda utilizar esta función en indicadores personalizados, ya que la llamada a MessageBox() detiene la ejecución del hilo del indicador durante todo el tiempo de espera de la respuesta del usuario. Y como todos los indicadores de cada símbolo se ejecutan en un solo hilo, se detendrán todos los gráficos de todos los plazos de este símbolo.

Cuando se trabaja en el probador de estrategias, la función MessageBox() no se ejecuta.

 
MakarFX:

No soy programador, edito el indicador para mi comodidad. No lo he comprobado en el probador, sino en tiempo real.

Por cierto, no hay telépatas.

Si sabes cuáles de los indicadores disponibles aquí utilizan esta función, por favor dímelo, tal vez entonces lo descubra yo mismo.

Gracias

Lo tenemos todo.

Клуб Телепатов
Клуб Телепатов
  • 2011.05.08
  • www.mql5.com
Клуб телепатов Вас послали сюда? Тогда давайте знакомиться! Как же такое могло случиться со мной...
 
Artyom Trishkin:

Se declara una variable con el tipo de estructura en el ámbito local, y es lo que se envía a la función. En el mismo ámbito local.

La cuestión es que cuando se crea una variable para una estructura en el campo su alcance es en toda la función y no en un área local. He aquí un ejemplo.

int OnInit()
  {
{int In=8;
 MyPoint qr;}
qr - видна здесь
In - здесь не видна
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason){}

struct MyPoint
{
    int x[5];
    int y;
};

Resulta que ya no es posible trabajar a nivel local.

 

Intentando leer datos de un archivo csv en un script. No hubo suerte y no entiendo en absoluto por qué.

Utilizo un procedimiento sencillo para leerlo:

bool GetBiFromFile(string InFNam,int& alBars,double& xClose[],datetime& xTime[])
{  int  InHndl,nBars;
   bool fset;
   double aval;
   
   InHndl = FileOpen(InFNam+".csv",FILE_READ|FILE_CSV,",");
   if (InHndl==INVALID_HANDLE) {
       Print("File "+InFNam+" does not open. Error: ", GetLastError()); 
       return(false); 
   } else {
      fset = FileSeek(InHndl,0,SEEK_SET);
      ArrayResize(xClose,alBars);      
      ArrayInitialize(xClose,0.0);  
      ArrayResize(xTime,alBars);       
      ArrayInitialize(xTime,0);  
      nBars = 0;
      while (!FileIsEnding(InHndl)) {
         nBars++;
         xTime[nBars-1]  = FileReadDatetime(InHndl);;
         xClose[nBars-1] = FileReadDouble(InHndl);
         aval = FileReadDouble(InHndl);
         if (nBars>=alBars) break;
      }
   }
   Print("nBars = ",nBars,"   allBars = ",alBars);
   Print("Start: ",xClose[0],"   " + TimeToString(xTime[0],TIME_DATE|TIME_SECONDS));
   Print("End: ",xClose[nBars-1],"   " + TimeToString(xTime[nBars-1],TIME_DATE|TIME_SECONDS));
   return(true);
}

El archivo con los datos tiene la siguiente forma:

2012.01.02 02:00:02,1.293240,1.293410

2012.01.02 02:00:52,1.293330,1.293500

2012.01.02 02:00:55,1.293810,1.293980

....

Y el resultado de las sentencias Print() del procedimiento es

nBars = 1000 alBars = 1000

Inicio: 0,0 2020.01.29 01:00:00

Fin: 0.0 2020.01.29 01:00:00

Es decir, todas las líneas se procesan en el bucle de lectura, pero no se lee nada. Y no hay mensaje de error.

¿Puede alguien explicarme esto?


 
Yurixx:

¿Puede alguien explicarme esto?

Las funciones binarias leen un archivo de texto.

 
Alexey Viktorov:

Lo tenemos todo.

¡Eres malvado!

 
MakarFX:

¡Eres malo!

Estoy fingiendo.

Si quieres entender la programación, empieza a intentar entenderla. Si sólo necesitas hacerlo, ve al hilo donde te ofrecen escribirlo gratis, publica allí tu indicador y describe tu petición.


ps: He comprobado todo. Alert() por alguna razón aunque se coloque antes de PlaySound() no reproduce el sonido seleccionado. Tal vez mi memoria sea mala, pero no es la cuestión.

Puede silenciar Alert() pulsando dos veces para obtener una cruz roja


y en ese caso no importará que se escriba Alert() o PlaySound() delante de él

 
Alexey Viktorov:

Estoy fingiendo.


y en este caso no hará ninguna diferencia si dice Alert() o PlaySound() delante

En este caso, la ventana de alerta no se abre.(

 
fxsaber:

Se lee un archivo de texto con funciones binarias.

Sobre la funciónFileReadDouble() dice que lee de un archivo binario.

Pero dice sobreFileReadDatetime(): "Lee del archivo CSV una cadena de uno de los formatos: "AAAA.MM.DD HH:MI:SS", "AAAA.MM.DD" o "HH:MI:SS" - y lo convierte en un valor de fecha".

Además, la misma imagen era cuando usabaFileReadString() y luego convertía yo mismo las cadenas altipo correcto.

¿Cómo crees que debo hacerlo?


 
Yurixx:

¿Cómo cree que debería hacerse?

void OnStart()
{
  datetime time;
  
  double PriceBid;
  double PriceAsk;
  
  string Str = "2012.01.02 02:00:02,1.293240,1.293410";
  string StrArray[];
  
  if (StringSplit(Str, ',', StrArray) > 2)
  {
    time = (datetime)StrArray[0];
    
    PriceBid = (double)StrArray[1];
    PriceAsk = (double)StrArray[2];
  }
}
Razón de la queja: