MetaTrader 4 Build 529 beta lançado com novo compilador - página 105

 
Night63:

Colegas, uma mensagem de aviso aparece na compilação:

possível uso da variável não-inicializada 'PipStep'.

para um pedaço como este:

Todas as variáveis são inicializadas como duplas, o que há de errado com isso?

você declarou variáveis de tipo duplo, a inicialização está atribuindo valores às variáveis declaradas

duplo PipStep=0 ; fazer

 
Eu não entendo, sou o único que não pode testar as demonstrações do indicador na construção 555, ou esta não é uma questão importante para a estréia no mercado?
 
Candid:
Eu não entendo, sou o único que não pode testar as demonstrações do indicador na construção 555, ou esta não é uma questão importante para a estréia no mercado?

eles são testados em 5?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

Estrutura para armazenamento de preço, volume e divulgação de informações.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

A MqlRates no MetaTrader 4 constrói 555 uma matriz ou uma estrutura?

Este exemplo de ajuda (MetaTrader 4 build 555) não funciona, pois não há função CopyRates

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property  strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Isto também não funciona, você pode ver um exemplo de trabalho no MetaTrader 4 construir 555 com MqlRates ?
 
ALXIMIKS:

Eles testam em 5?

Algumas pessoas também não testam em 5?
 
ALXIMIKS:

você declara variáveis de tipo duplo, a inicialização é a atribuição de valores às variáveis declaradas

duplo PipStep=0 ; fazer


Funcionou!!!

Viva e aprenda!

Muito obrigado!

 
serferrer:

A MqlRates no MetaTrader 4 constrói 555 uma matriz ou uma estrutura?

Este exemplo de ajuda (MetaTrader 4 build 555) não funciona, pois não há função CopyRates

Isto também não funciona, podemos ver um exemplo de trabalho no MetaTrader 4 construir 555 com MqlRates ?


MqlRates - estrutura

MqlRates[] - conjunto de estruturas

Para ver um exemplo de trabalho com a estrutura MqlRates veja script period_converter_new

Um exemplo de operação do ArrayCopyRates (a documentação será atualizada)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Mudanças na MQL4

  • O ArrayCopyRates() também mudou seu comportamento. Ele costumava virtualmente copiar para array duplo[][6], agora ele praticamente copia para array MqlRates[]. Agora a cópia para array duplo[][6] é realizada, mas não é virtual; é real.

Tenho um número significativo de Expert Advisors que utilizam DLLs e que foram passados aos clientes há muito tempo. Usamos arrays double[][6] para passar parâmetros para a DLL , que foram praticamente copiados pela ArrayCopyRates() durante a inicialização .E então, ao chamar funções a partir de DLL, estas matrizes e seu tamanho atual foram passados por referência como parâmetros.

Acontece que todos estes EAs deixarão de funcionar quando o terminal for atualizado para uma nova versão. Isto é uma infelicidade.

Entendo corretamente que para mantê-los funcionando sem alterar o código DLL, devemos chamar a ArrayCopyRates() antes de cada chamada de uma função da DLL?

 
stringo:
Não há agora nenhum valor de spread (possivelmente também volume de troca ) na estrutura MqlRates, isto será acrescentado mais tarde?
 
Patrol:

Tenho um número significativo de EAs usando DLLs, que foram entregues aos clientes há muito tempo. Para passar parâmetros para DLL utilizamos arrays double[][6], para os quais durante a inicialização a função ArrayCopyRates() fez uma cópia virtual das séries de tempos. E então, ao chamar funções a partir de DLL, estas matrizes e seu tamanho atual foram passados por referência como parâmetros.

Acontece que todos estes EAs deixarão de funcionar quando o terminal for atualizado para uma nova versão. Isto é uma infelicidade.

Entendo corretamente que, para mantê-los funcionando sem alterar o código DLL, devemos chamar a ArrayCopyRates() antes de cada chamada de uma função da DLL?


É um pouco mais complicado do que isso. A estrutura que a dll toma também mudou.

Portanto, você precisa reescrever o ArrayCopyRates na matriz de estrutura MqlRates. Também em sua dll você precisa substituir a descrição da estrutura correspondente