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

 
Alexey Kozitsyn:
¿Puedo ver el código?
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
 
Maksym Mudrakov:
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
Lo primero que haría es añadir #property strict, corregir los errores/advertencias (si los hay) y sustituir init() y start() por OnInit() y OnTick().
 
Alexey Kozitsyn:
Lo primero que haría es añadir #property strict, corregir los errores/advertencias (si los hay) y sustituir init() y start() por OnInit() y OnTick().
Gracias.

Tengo 5 errores y 83 advertencias ))))
 
Maksym Mudrakov:
Gracias.

5 errores y 83 advertencias salieron de ))))
Intente escribir en un idioma "nuevo" y habrá menos errores difíciles de encontrar.
 
Alexey Kozitsyn:
Intente escribir en un idioma "nuevo" y habrá menos errores difíciles de encontrar.
Me encontré con una construcción de este tipo en el tutorial de MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
¿Podemos utilizar también la "nueva" lengua, o hay una solución más moderna?
 
Maksym Mudrakov:
Me encontré con una construcción de este tipo en el tutorial de MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
¿se puede aplicar también en la "nueva" lengua, o hay una solución más moderna?
¿Está en un script o en un Expert Advisor?
 
Alexey Kozitsyn:
¿Está en el guión o en el experto?
En el experto
 
Maksym Mudrakov:
en el examinador.
Um... entonces depende de lo que ocurra allí en el código principal. Si enviar un pedido es una mala opción
 
Alexey Kozitsyn:
Um... entonces depende de lo que ocurra en el código principal. Si el envío de un pedido es malo
Sí, el envío de un pedido se produce. No me queda claro si las cotizaciones deben actualizarse forzosamente, en caso de que el Asesor Experto esté ejecutando en la ventana de un instrumento comercial, pero envíe una orden para otro instrumento comercial. Si, por ejemplo, las cotizaciones del EURUSD no se actualizan y, al mismo tiempo, se reciben las nuevas cotizaciones del GBPUSD. ¿Y si mi Asesor Experto se ejecuta en EURUSD, y no realizoRefreshRates(), entonces el Asesor Experto no enviará una orden en GBPUSD, hasta que se actualicen las cotizaciones en EURUSD?
 
Maksym Mudrakov:
Sí, el pedido se está enviando. No me queda claro si las cotizaciones deben actualizarse obligatoriamente en caso de que el EA se lance en la ventana de un símbolo pero se envíe una orden para otro símbolo. Si, por ejemplo, las cotizaciones del EURUSD no se actualizan y, al mismo tiempo, se reciben las nuevas cotizaciones del GBPUSD. ¿Y si mi Asesor Experto se ejecuta en EURUSD, y no realizoRefreshRates(), entonces el Asesor Experto no enviará una orden en GBPUSD, hasta que se actualicen las cotizaciones en EURUSD?

Hay varias formas de obtener los precios actuales:

1. Para cualquier símbolo: si quiere obtener precios actuales garantizados, llame a SymbolInfoDouble() con los identificadores correctos antes de utilizarlos.

2. Para el símbolo actual, también puede obtener los precios actuales a través de las variables predefinidas Bid y Ask. Estos pueden quedar desfasados, por lo que si la función OnTick() se ejecuta durante mucho tiempo, debería refrescarlos utilizando RefreshRates().