Um mês atrás, a Microsoft lançou uma grande atualização do sistema operacional Windows 10 Creators Update (versão 1703). Depois de instalar esta atualização, alguns usuários não conseguiram executar programas MQL4 em seus terminais. Este problema foi corrigido na nova versão da plataforma MetaTrader 4 build 1080. Agora, Expert Advisors e indicadores serão executados em gráficos corretamente, enquanto não será necessária a compilação usando o novo MetaEditor.
Em 1 de outubro de 2017, será descontinuado o suporte para terminais de cliente MetaTrader 4 inferiores ao build 1065. Esses terminais não poderão se conectar aos servidores de novas versões. Recomendamos fortemente que você atualize seus terminais com antecedência.
Nela foi corrigido o erro de reinicialização dos Experts nos gráficos após mudar de timeframe. Agora o trabalho dos EAs não é interrompido e eles são reinicializados corretamente.
A atualização da plataforma MetaTrader 4, causada pela liberação da versão preliminar do Windows 10 Insider Preview build 15007. As alterações nos mecanismos de segurança do sistema operacional do Windows 10 levaram ao fato de que em alguns casos os terminais de cliente MetaTrader 4 não podem ser iniciados.
Certifique-se de instalar a nova versão da plataforma para se preparar para o lançamento da próxima atualização do Windows 10.
Adicionado bate-papo onde você pode falar gratuitamente com membros da MQL5.community. Simplesmente especificando o login do usuário no destinatário das mensagens, você pode enviar-lhe mensagens diretamente para o dispositivo móvel.
Um novo design de mensagens. Agora, as mensagens MQL5.community e notificações push da plataforma de desktop são exibidos como chat, semelhantes aos populares messengers de celular.
Agora é possível mudar para uma das 22 línguas disponíveis direto da plataforma. Se você preferir usar a interface de inglês enquanto negocia, você pode selecioná-la na seção "Opções" ("Sobre o programa" no iPad) sem alterar a configuração de idioma de seu dispositivo.
class CFoo { }; class CBar { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { void *vptr[2]; vptr[0]=new CFoo(); vptr[1]=new CBar(); //--- for(int i=0;i<ArraySize(vptr);i++) { if(dynamic_cast<CFoo *>(vptr[i])!=NULL) Print("CFoo * object at index ",i); if(dynamic_cast<CBar *>(vptr[i])!=NULL) Print("CBar * object at index ",i); } CFoo *fptr=vptr[1]; // emite um erro sobre coerção do ponteiro, vptr[1] não é um objeto CFoo } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // retorna o código do símbolo 'H'
class CAnimal { public: CAnimal(); // construtor virtual void Sound() = 0; // função virtual pura private: double m_legs_count; // número de patas do animal };Aqui a função Sound() é virtual pura, porque está declarada pelo especificador da função virtual PURE (=0).
class CAnimal { public: virtual void Sound()=NULL; // PURE method, deve ser redefinido no descendente, a mesma classe CAnimal tornou-se abstrata e não pode ser criada }; //--- descendente a partir da classe abstrata class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE redefinido, a classe CCat não é abstrata e pode ser criada }; //--- exemplos de utilização incorreta new CAnimal; // erro 'CAnimal' - o compilador emitirá o erro "cannot instantiate abstract class" CAnimal some_animal; // erro 'CAnimal' - o compilador emitirá o erro "cannot instantiate abstract class" //--- exemplos de utilização correta new CCat; // não há erro - a classe CCat não é abstrata CCat cat; // não há erros - a classe CCat não é abstrataRestrições sobre o uso de classes abstratas
//+------------------------------------------------------------------+ //| Classe básica abstrata | //+------------------------------------------------------------------+ class CAnimal { public: //--- função virtual pura virtual void Sound(void)=NULL; //--- função void CallSound(void) { Sound(); } //--- construtor CAnimal() { //--- chamada direta do método virtual Sound(); //--- chamada indireta (através de una terceira função) CallSound(); //--- no construtor e/ou destrutor sempre são chamadas suas funções, //--- apesar do caráter virtual e da redefinição da função da chamada no descendente //--- se a função chamada for virtual pura, então, //--- a chamada provocará um erro crítico de execução: "pure virtual function call" } };No entanto, os construtores e destruidores de classes abstratas podem chamar outras funções membro.
typedef int (*TFunc)(int,int);Agora TFunc é um tipo e é possível declarar o indicador mutável para a função:
TFunc func_ptr;Na mutável func_ptr é possível armazenar o endereço da função para, no futuro, a chamar:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // erro: neg não tem tipo int (int,int) Print(func_ptr(10)); // erro: deve ter dois parâmetrosIndicadores para funções podem ser armazenados e transferidos como um parâmetro. É impossível obter um indicador para um método não estático de uma classe.
Correções de crash-logs.
Agora, você pode definir um código de segurança para acessar a aplicação. Isso proporcionará proteção adicional às suas contas, mesmo que você perca o seu dispositivo móvel. Habilite "Bloquear ecrã" nas configurações da aplicação. Por defeito, o código de segurança é igual ao código usado para acessar o gerador de senhas descartável.
Além disso, a nova versão inclui múltiplas melhorias e correções.
A nova versão da plataforma web MetaTrader 4 recebeu um conjunto completo de indicadores para análise técnica. Agora ela dispõe de 30 dos indicadores técnicos mais populares do mundo, como na versão para PC da MetaTrader 4:
Acelerador Oscilador |
DeMarker | Moving Average |
Acumulação/Distribuição | Envelopes | Moving Average of Oscillator |
Alligator | Force Index |
On Balance Volume |
Average Directional Movement Index | Fractais | Parabolic SAR |
Average True Range |
Oscilador Gator | Relative Strength Index |
Oscilador Maravilhoso | Ichimoku Kinko Hyo | Relative Vigor Index |
Bears Power |
MACD | Desvio Padrão |
Bollinger Bands |
Índice de facilitação de mercado |
Stochastic Oscillator |
Bulls Power |
Momentum | Volume |
Commodity Channel Index |
Índice de fluxo de dinheiro | Williams' Percent Range |
Continuamos trabalhando no acesso à aplicação, é por isso que agora a interface da plataforma web está disponível em 38 línguas. Foram adicionadas traduções em 14 línguas:
Neerlandês |
Lituano | Croata |
Grego | Romeno | Tcheco |
Hebraico | Sérvio |
Sueco |
Italiano | Esloveno |
Estoniano |
Letão |
Finlandês | |
Abra a sua plataforma web agora e desfrute da sua aplicação atualizada!
Na nova versão da plataforma web MetaTrader 4, aceleramos significativamente os gráficos graças à utilização da moderna tecnologia gráfica WebGL, de modo que agora até um conjunto de indicadores executados ao mesmo tempo não irá afetar o desempenho da plataforma web.
Foi iniciado um trabalho sobre a implementação de indicadores técnicos. Atualmente já estão disponíveis os indicadores Bill Williams:
Foi adicionado o link do vídeo tutorial "Como montar um robô de negociação" ao Assistente MQL4. Assista a este vídeo de três minutos e crie um robô comercial, sem escrever uma única linha de código.
Correções de crash logs.
Corrigidos erros relatados nos registros (logs) dos problemas.
Corrigidos erros relatados nos registros (arquivos logs) quebrados.
//+------------------------------------------------------------------+ //| TemplTest.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Declara uma classe template | //+------------------------------------------------------------------+ template<typename T> class TArray { protected: T m_data[]; public: bool Append(T item) { int new_size=ArraySize(m_data)+1; int reserve =(new_size/2+15)&~15; //--- if(ArrayResize(m_data,new_size,reserve)!=new_size) return(false); //--- m_data[new_size-1]=item; return(true); } T operator[](int index) { static T invalid_index; //--- if(index<0 || index>=ArraySize(m_data)) return(invalid_index); //--- return(m_data[index]); } }; //+------------------------------------------------------------------+ //| Classe template do array de ponteiro. No processo de destruição, | //| exclui os objetos que são os ponteiros armazenados no array. | //| | //| Por favor, note a herança do array da classe template | //+------------------------------------------------------------------+ template<typename T> class TArrayPtr : public TArray<T *> { public: void ~TArrayPtr() { for(int n=0,count=ArraySize(m_data);n<count;n++) if(CheckPointer(m_data[n])==POINTER_DYNAMIC) delete m_data[n]; } }; //+------------------------------------------------------------------------------+ //| Declarar a classe. Ponteiros aos respectivos objetos são armazenados no array| //+------------------------------------------------------------------------------+ class CFoo { int m_x; public: CFoo(int x):m_x(x) { } int X(void) const { return(m_x); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TArray<int> ExtIntArray; // criar instância TArray (TArray especializada pelo tipo int) TArray<double> ExtDblArray; // criar instância TArray (TArray especializada pelo tipo double) TArrayPtr<CFoo> ExtPtrArray; // criar instância TArrayPtr (TArrayPtr especializada pelo tipo CFoo) //+------------------------------------------------------------------+ //| Função "Start" de Programa Script | //+------------------------------------------------------------------+ void OnStart() { //--- preencher o array com dados for(int i=0;i<10;i++) { int integer=i+10; ExtIntArray.Append(integer); double dbl=i+20.0; ExtDblArray.Append(dbl); CFoo *ptr=new CFoo(i+30); ExtPtrArray.Append(ptr); } //--- Saída do conteúdo do array string str="Int:"; for(i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- Objetos CFoo criados via nova versão não devem ser suprimidos, uma vez que eles são excluídos no objeto destructor TArrayPtr <CFoo> }Resultado da execução: