Erros, bugs, perguntas - página 3133

 
Yury Lemeshev #:

Seja consistente. Se verificar

SymbolIsSynchronized(euSY01)==true

depois verificar e

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

Se fizer isto, e existem sete linhas deste tipo no código para sete pares, então a síntese do mercado terá apenas cotações para uma moeda.


Função dispendiosa, eu a contornaria através da igualdade para o valor anterior.
 
JRandomTrader #:

Seja consistente. Se verificar

depois verificar e

:)

(euSY01b>0)==true

É melhor do que apenas

euSY01b>0
 
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD falso
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 falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


Se verificar a sincronização, só funciona para uma moeda. Preciso de analisar 7 moedas de cada vez.

 
Yury Lemeshev #:
Se verificar a sincronização, esta só funciona para uma moeda. Mas preciso de analisar 7 moedas num instante.

Preciso de o fazer no 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 falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD falso
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 falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD falso
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


Se verificar a sincronização, só funciona para uma moeda. E preciso de analisar 7 moedas num instante.

Como uma muleta, poderia tentar lembrar-se da altura em que o par foi sincronizado pela última vez e usar isso como referência.

Também pode usar SymbolInfoTick() para pedir e licitar

 

é como verdadeiro == verdadeiro, resultado: verdadeiro. e falso == verdadeiro, resultado: falso :)

este é exactamente o resultado que se obtém se

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

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

ou

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

if (-1) {
  ...
}

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

Se o fizer, e existem 7 linhas deste tipo no código para sete pares, então a visão geral do mercado mostrará apenas cotações para uma moeda.


tente ligar para bares no OnTick

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

do artigo:

   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);
        }
     }
também, a referência aos preços no OnTick deve ser (para que caracteres de terceiros sejam carregados).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

tente ligar para bares no OnTick

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

do artigo:

Além disso, deve haver uma referência aos preços no OnTick (para que os caracteres de terceiros sejam carregados).

Isto não resolve o problema do original

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) é sempre preenchido com um valor quando usado correctamente. Por alguma razão, o valor correcto para o símbolo requerido não vem. E parece ser preenchido utilizando o valor recebido anteriormente, que é o valor de uma das outras sete moedas.

Se não há solução, e esta solução que procuro há mais de um mês, sinto que se trata apenas de um testador de insectos. Os promotores devem prestar atenção a isto. Se for um bug, corrige-o
 
Vitaly Muzichenko #:

Preciso de fazer no OnInit()

Mas quando testei um dos meus indicadores de múltiplos símbolos, a lista de símbolos da cadeia de parâmetros de entrada é carregada no OnInit. E os seus preços são acedidos no OnCalculate. Além disso, quando configuro para carregar símbolos do Market Watch, apenas um símbolo básico aparece no testador.

Razão: