Errores, fallos, preguntas - página 3133

 
Yury Lemeshev #:

Sé coherente. Si comprueba

SymbolIsSynchronized(euSY01)==true

entonces comprueba y

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

Si hace esto, y hay siete líneas de este tipo en el código para siete pares, entonces el resumen del mercado sólo tendrá cotizaciones para una divisa.


Función cara, yo la obviaría mediante la igualdad con el valor anterior.
 
JRandomTrader #:

Sé coherente. Si comprueba

entonces comprueba y

:)

(euSY01b>0)==true

Es mejor que sólo

euSY01b>0
 
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD true
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


Si comprueba la sincronización, sólo funciona para una moneda. Necesito analizar 7 monedas a la vez.

 
Yury Lemeshev #:
Si compruebas la sincronización, sólo funciona para una moneda. Pero tengo que analizar 7 monedas en un momento.

Necesito hacerlo en OnInit()

// Потрогаем символ, иначе в тестере не грузит историю
 for(int i=0;i<CountSymbol;i++) {
   iClose(SymbTrade[i],PERIOD_CURRENT,1);
 }
 
Yury Lemeshev #:
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD true
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


Si comprueba la sincronización, sólo funciona para una moneda. Y tengo que analizar 7 monedas en un momento.

Como muleta, podrías intentar recordar la hora en la que el par se sincronizó por última vez y usarla como referencia.

Además, puede utilizar SymbolInfoTick() para la oferta y la demanda

 

es como true == true, resultado: true. y false == true, resultado: false :)

este es exactamente el resultado que se obtiene si

if (true) { // управление передается коду в скобках
  ...
}

if (false) { // управление не передаётся коду в скобках
  ...
}

o

// в if не 0 - true
if (1) {
  ...
}

if (-1) {
  ...
}

// в if 0 - false
if (0) {
  ...
}
 
Yury Lemeshev #:

Si hace esto, y hay 7 líneas de este tipo en el código para siete pares, entonces la visión general del mercado sólo mostrará las cotizaciones de una moneda.


intente llamar a Bars en OnTick

https://www.mql5.com/ru/docs/series/bars

del artículo:

   int bars=Bars(_Symbol,_Period);
   if(bars>0)
     {
      Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
     }
   else  //нет доступных баров
     {
      //--- видимо, данные по символу не синхронизированы с данными на сервере
      bool synchronized=false;
      //--- счетчик цикла
      int attempts=0;
      // сделаем 5 попыток дождаться синхронизации
      while(attempts<5)
        {
         if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
           {
            //--- есть синхронизация, выходим
            synchronized=true;
            break;
           }
         //--- увеличим счетчик
         attempts++;
         //--- подождем 10 миллисекунд до следующей итерации
         Sleep(10);
        }
      //--- вышли из цикла по факту синхронизации
      if(synchronized)
        {
         Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
         Print("Самая первая в истории терминала дата по символу-периоду на данный момент = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
         Print("Самая первая дата в истории по символу на сервере = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
        }
      //--- синхронизация данных так и не была достигнута
      else
        {
         Print("Не удалось получить количество баров на ",_Symbol);
        }
     }
Además, la referencia a los precios en OnTick debería ser (para que se carguen los caracteres de terceros).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

intente llamar a Bars en OnTick

https://www.mql5.com/ru/docs/series/bars

del artículo:

Además, debería haber una referencia a los precios en OnTick (para que se carguen los caracteres de terceros).

Esto no resuelve el problema del original

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) siempre se rellena con un valor cuando se utiliza correctamente. Por alguna razón el valor correcto del símbolo requerido no viene. Y parece que se rellena utilizando el valor anterior recibido, que es el valor de una de las otras siete monedas.

Si no hay solución, y esta solución la estoy buscando desde hace más de un mes, siento que es sólo un probador de errores. Los desarrolladores deben prestar atención a esto. Si se trata de un error, arréglalo
 
Vitaly Muzichenko #:

Necesito hacer en OnInit()

Pero cuando pruebo uno de mis indicadores multisímbolos, la lista de símbolos de la cadena de parámetros de entrada se carga en OnInit. Y se accede a sus precios en OnCalculate. Además, cuando configuro la carga de símbolos desde Market Watch, sólo aparece un símbolo básico en el probador.