Bug de redimensionamento de matriz em beta build 530 - página 3

 
RaptorUK:

Não estou familiarizado com o MT3, mas presumo que o código que correu no MT3 também correu no MT4 . . . este é o problema do MT4 --> MT5 e é por isso que a situação é diferente.

A maioria dos usuários do MT4 não pode codificar, se seus Indicadores favoritos no MT4 não existirem no MT5, então eles não usarão o MT5.

Tanto quanto sei, o código MT3 não funciona no MT4, o idioma é muito diferente. Este debate sobre o MT4/MT5 é infinito, há muitos fatores que levam à sobrevivência do MT4, não tenho nem mesmo a certeza de que o MT5 foi concebido para substituir completamente o MT4.

De qualquer forma, sobre a nova versão, Metaquotes disse que ela será retrocompatível no nível ex4, mas não realmente no nível mq4.

 

Dei uma rápida olhada na nova ajuda do metaeditor, a nova versão mql4 parece muito mais diferente da versão antiga do que eu pensava que seria.

 
angevoyageur:

Tanto quanto sei, o código MT3 não funciona no MT4, o idioma é muito diferente. Este debate sobre o MT4/MT5 é infinito, há muitos fatores que levam à sobrevivência do MT4, não tenho nem mesmo a certeza de que o MT5 foi concebido para substituir completamente o MT4.

De qualquer forma, sobre a nova versão, Metaquotes disse que ela será retrocompatível no nível ex4, mas não realmente no nível mq4.

A compatibilidade com os atuais .ex4 Indicadores, Scripts e EAs não se trata apenas do idioma, mas também do Terminal e das mudanças no seu funcionamento. Por exemplo, mudanças no Testador de Estratégia poderiam quebrar os EA projetados para serem usados principalmente no Testador de Estratégia, enquanto o mesmo EA funciona bem em um gráfico ao vivo que ele não executaria mais sua função principal ...
 
angevoyageur:

Tanto quanto sei, o código MT3 não funciona no MT4, o idioma é muito diferente. Este debate sobre o MT4/MT5 é infinito, há muitos fatores que levam à sobrevivência do MT4, não tenho nem mesmo a certeza de que o MT5 foi concebido para substituir completamente o MT4.

De qualquer forma, sobre a nova versão, Metaquotes disse que ela será retrocompatível no nível ex4, mas não realmente no nível mq4.

Para mim parece que é suposto ser retrocompatível no nível mq4, os indicadores personalizados incluídos são as versões originais do mql4 com uma mudança no nome da função init() que compilam no novo compilador e rodam no novo terminal, o que tem que significar que ainda podemos codificar indicadores usando o IndicatorCounted() se quisermos ...

init() é agora chamado de int OnInit(void) e retorna(INIT_SUCCEEDED);

 
SDC:

Para mim parece que é suposto ser compatível ao contrário no nível mq4, os indicadores personalizados incluídos são as versões originais mql4 com uma mudança no nome da função init() que compilam no novo compilador e rodam no novo terminal, o que tem que significar que ainda podemos codificar indicadores usando IndicatorCounted() se quisermos ...

init() é agora chamado de int OnInit(void) e retorna(INIT_SUCCEEDED);

Desculpe, mas não será retrocompatível no nível mq4, veja o anúncio do primeiro beta.

Diferenças em relação à antiga versão MQL4:

  • Mudou a prioridade das operações AND/OR logical. Agora, tudo é semelhante ao padrão C/C++

  • Introduziu uma avaliação resumida das expressões lógicas. Agora, quando uma expressão lógica é avaliada antes de chegar ao seu fim, as demais expressões subseqüentes não são avaliadas, como em C/C++.

  • Somente valores inteiros são agora usados no operador do switch. Os valores reais poderiam ter sido usados antes

  • Um símbolo de ponto não pode mais ser usado em nomes variáveis. Além disso, os símbolos '@', '$' e '?' não podem mais ser usados em nomes de variáveis

  • Requisitos mais rígidos para a função de partida. Os parâmetros poderiam ter sido definidos na função de partida antes. Agora, todos os init, start, deinit, OnInit, OnStart, OnTick, OnTimer e outros pontos de entrada devem corresponder exatamente a suas assinaturas.

  • Devido à expansão das palavras-chave, tais como short, long, float, const, virtual, input, delete, new, do, do, char não podem ser usadas agora.

  • Agora, as funções dll importadas não podem aceitar matrizes de caracteres MQL como parâmetro, como na MQL5.

  • Introduziu _Período predefinido, _Símbolo, _LastError, _CriticalError, _StopFlag, _Ponto, _Dígitos, _UninitReason, _Nomes de variáveis aleatórias de sementes que podem entrar em conflito com variáveis simples declaradas sob os mesmos nomes em arquivos fonte existentes

  • tipo data/hora tornou-se um tipo de 8 bytes, como na MQL5.

As diferenças não são críticas e podem ser facilmente corrigidas no código. Em troca, acessamos várias características da MQL5, melhor velocidade de execução e um controle de qualidade muito mais rigoroso.

Não é uma mudança pesada, mas significa que não é 100% retrocompatível (mq4).
 
SDC:

...

init() é agora chamado de int OnInit(void) e retorna(INIT_SUCCEEDED);

Você pode usar as duas versões.
 

Eu gosto das novas características do metaeditor

 

Acho que quando a nova versão for lançada causará muita confusão no fórum para novatos, pois a nova documentação mql4 é baseada na codificação mql5. Isso significa que muito do que é descrito neste fórum e na base de código será contradito pelos documentos mql4.

Estabelecendo um buffer indicador a partir dos novos docs mql4: (Isto na verdade tem erros e não irá compilar)

#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Indicator buffer after SetIndexBuffer() is timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- change the oredr of accessing elements of the indicator buffer
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Copy the values of the moving average in the buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Depending on the value AsSeries
                                      // Will receive a very old value
                                      // Or for the current unfinished bar
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
SDC:

Acho que quando a nova versão for lançada causará muita confusão no fórum para novatos, pois a nova documentação mql4 é baseada na codificação mql5. Isso significa que muito do que é descrito neste fórum e na base de código será contradito pelos documentos mql4.

Estabelecendo um buffer indicador a partir dos novos docs mql4: (Isto na verdade tem erros e não irá compilar)

Sim, você está certo, será uma transição difícil. Entretanto, acho que será difícil não para os novatos, mas para o codificador mql4 experimentado que ainda não conhece o mql5. Em geral, os novatos não lêem a documentação
 

Você já codificou na MQL5 angevoyageur ?