MetaTrader 5 build 1930: Gráficos flutuantes e bibliotecas .Net em MQL5

Agora você pode exibir gráficos de instrumentos financeiros fora da janela do terminal de negociação. Isso é conveniente quando se trabalha com vários monitores

26 outubro 2018

Terminal

  1. agora você pode exibir gráficos de instrumentos financeiros fora da janela do terminal de negociação.

    Isso é conveniente quando se trabalha com vários monitores. Por exemplo, em um deles, você pode colocar a janela principal da plataforma e monitorar o status da conta, enquanto, em outro, você pode botar os gráficos para avaliar a situação no mercado. Para separar o gráfico do terminal, desative a opção "Encaixar" em seu menu de contexto. Depois disso, coloque o gráfico no monitor desejado.





    Para que você não precise alternar entre monitores para aplicar objetos ou indicadores analíticos, os gráficos desafixados têm uma barra de ferramentas separada. A fim de alterar um conjunto de comandos ou ocultar a barra de ferramentas, use seu menu de contexto.

  2. bate-papos incorporados totalmente atualizados. Agora eles suportam diálogos e canais de grupo. Você pode iniciar discussões privadas com grupos de pessoas em um único espaço - sem alternar entre diferentes diálogos -, criar canais temáticos por interesse e idioma. Você pode se comunicar com colegas e amigos na MQL5.community sem visitar o site.

    Cada bate-papo e canal em grupo pode ser público ou privado. O próprio autor decide se eles podem se juntar livremente ou apenas por convite. Você também pode atribuir moderadores a canais e bate-papos, providenciando controle adicional de comunicação.




  3. adicionado suporte para maior precisão na negociação de criptomoedas. Agora, o volume mínimo possível de operações de negociação é de 0,00000001 lotes. Ao livro de ofertas, ao feed de transações e a outros itens de interface foi adicionado um recurso para exibir volumes com uma precisão de até 8 casas decimais.

    Seu valor mínimo, 'step' e alteração dependem das configurações do instrumento financeiro no lado da corretora.



  4. à janela "Caixa de Ferramentas" foi adicionada uma guia de artigos publicados na MQL5.community. Mais de 600 materiais detalhados sobre o desenvolvimento de estratégias de negociação em MQL5 estão agora disponíveis diretamente no terminal. Novos artigos são publicados a cada semana.




  5. adicionado o suporte a autorização estendida usando certificados ao trabalhar com o Wine.
  6. corrigida a exibição do livro de ofertas quando sua profundidade é limitada a um nível.
  7. adicionado o comando "Salvar como imagem" à barra de ferramentas "Padrão". Agora é mais fácil tirar capturas de tela dos gráficos e compartilhá-los na comunidade.




  8. corrigida a implementação do deslocamento temporal ao importar barras e ticks. Anteriormente, em alguns casos, o deslocamento não era aplicado.




  9. corrigido o bloqueio do terminal com uma grande quantidade de notícias do calendário econômico.

MQL5

  1. adicionada suporte nativo a bibliotecas .NET com funções de importação inteligentes. Agora, as bibliotecas .NET podem ser usadas sem escrever 'wrappers' especiais — o MetaEditor toma conta disso por conta própria.

    Para trabalhar com as funções da biblioteca .NET, basta importar a própria DLL sem especificar funções específicas. O MetaEditor importa automaticamente todas as funções com as quais é possível o trabalho:
    • Estruturas simples (POD, plain old data), isto é, estruturas que contêm apenas tipos de dados simples.
    • Funções estáticas públicas cujos parâmetros usam apenas tipos simples e estruturas de POD ou seus arrays

    Para chamar funções da biblioteca, basta importá-la:
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    O código C# para a função Inc da classe TestClass é semelhante ao seguinte:
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    Como resultado, o script retornará o valor 42.

    O melhoramento do suporte a bibliotecas .NET continua, em versões futuras, planeja-se expandir suas possibilidades de uso.

  2. à biblioteca padrão foi adicionado o suporte para trabalhar com funções WinAPI. Agora, para usar as funções do sistema operacional no programa MQL5, não há necessidade de importar manualmente as bibliotecas e descrever as assinaturas de funções. Basta conectar o arquivo de cabeçalho do diretório MQL5\Include\WinAPI.

    As funções WinAPI são agrupadas em arquivos separados por finalidade:

    • libloaderapi.mqh — trabalho com recursos
    • memoryapi.mqh — trabalho com memória
    • processenv.mqh — trabalho com ambiente
    • processthreadsapi.mqh — trabalho com processos
    • securitybaseapi.mqh — trabalho com o sistema de segurança do sistema operacional
    • sysinfoapi.mqh — obtenção de informações do sistema
    • winbase.mqh — funções comuns
    • windef.mqh — constantes, estruturas e enumerações
    • wingdi.mqh — trabalho com objetos gráficos
    • winnt.mqh — trabalho com exceções
    • winreg.mqh — trabalho com o registro
    • winuser.mqh — gerenciamento de janelas e interface
    • errhandlingapi.mqh — processamento de erros
    • fileapi.mqh — trabalho com arquivos
    • handleapi.mqh — trabalho com identificadores
    • winapi.mqh — conexão de todas as funções (arquivos de cabeçalho WinAPI)

    A ligação funciona apenas com arquitetura de 64 bits.

  3. adicionado o suporte a qualificadores inline, __inline, __forceinline ao analisar o código. A presença desses qualificadores no código não causará erros e não afetará a compilação. No momento, isso torna mais fácil transferir código C++ para MQL5.
    Mais informações sobre qualificadores estão disponíveis no MSDN.

  4. realizada uma otimização substancial da execução de programas MQL5. Em alguns casos, o ganho de desempenho pode chegar a 10%. Para obter um aumento de velocidade, recompile seus programas na nova versão do MetaEditor.
    Infelizmente, otimização adicional levou à perda de compatibilidade de novos programas com versões anteriores do terminal. Todos os programas compilados no MetaEditor versão 1910 e superior não serão inicializados em terminais de versão inferior a 1880. Ao mesmo tempo, programas compilados anteriormente em versões anteriores do MetaEditor funcionarão em novos terminais.

  5. realizado trabalho de otimização de conjuntos de funções MQL5.
  6. adicionadas novas propriedades para ajustar/separar gráficos da janela principal do terminal e controlar sua posição.

    À enumeração ENUM_CHART_PROPERTY_INTEGER adicionados:

    • CHART_IS_DOCKED — janela do gráfico encaixada. Se definido como false, o gráfico pode ser arrastado para fora do terminal.
    • CHART_FLOAT_LEFT — coordenada esquerda do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_TOP — coordenada superior do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_RIGHT — coordenada direita do gráfico desencaixado em relação à tela virtual.
    • CHART_FLOAT_BOTTOM — coordenada inferior do gráfico desencaixado em relação à tela virtual.

    À enumeração ENUM_TERMINAL_INFO_INTEGER foram adicionados:

    • TERMINAL_SCREEN_LEFT — coordenada esquerda da tela virtual. A tela virtual é o retângulo que cobre todos os monitores. Se o sistema tiver dois monitores e sua ordem for definida da direita para a esquerda, a coordenada esquerda da tela virtual poderá estar na borda de dois monitores.
    • TERMINAL_SCREEN_TOP — coordenada superior da tela virtual.
    • TERMINAL_SCREEN_WIDTH — largura do terminal.
    • TERMINAL_SCREEN_HEIGHT — altura do terminal.
    • TERMINAL_LEFT — coordenada esquerda do terminal em relação à tela virtual.
    • TERMINAL_TOP — coordenada superior do terminal em relação à tela virtual.
    • TERMINAL_RIGHT — coordenada direita do terminal em relação à tela virtual.
    • TERMINAL_BOTTOM — coordenada inferior do terminal em relação à tela virtual.

  7. adicionado o campo volume_real às estruturas MqlTick e MqlBookInfo. Ele é projetado para funcionar com maior precisão. O valor volume_real tem uma precedência mais alta do que o volume. O servidor usará esse valor, se especificado.

    struct MqlTick
      {
       datetime         time;          // Hora da última atualização de preço
       double           bid;           // Preço Bid atual
       double           ask;           // Preço Ask atual
       double           last;          // Preço atual da última transação (Last)
       ulong            volume;        // Volume para o preço Last atual
       long             time_msc;      // Hora da última atualização de preço em milissegundos
       uint             flags;         // Sinalizadores de ticks
       double           volume_real;   // Volume para o preço Last atual com alta precisão
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // tipo de boleta a partir da enumeração ENUM_BOOK_TYPE
       double           price;           // preço
       long             volume;          // volume
       double           volume_real;     // volume com alta precisão
      };

  8. à enumeração ENUM_SYMBOL_INFO_DOUBLE foram adicionadas novas propriedades:

    • SYMBOL_VOLUME_REAL — volume da última transação concluída;
    • SYMBOL_VOLUMEHIGH_REAL — valor máximo do volume da transação concluída para o dia atual;
    • SYMBOL_VOLUMELOW_REAL — valor mínimo do volume da transação concluída para o dia atual.

    Para obter essas propriedades, use a função SymbolInfoDouble.

  9. à enumeração ENUM_MQL_INFO_INTEGER foi adicionada a propriedade MQL_FORWARD — um sinal de que o programa está no modo teste para frente.
  10. adicionada a propriedade pack( integer_value ) para estruturas. Permite definir o alinhamento da localização dos campos dentro da estrutura, é necessário quando se trabalha com uma DLL. Para integer_value, são possíveis os valores 1, 2 ,4 ,8 e 16.
    Se a propriedade não estiver definida, por padrão é usado o alinhamento de 1 byte — pack(1).

    Exemplo de uso:
    //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Conclusão:
    sizeof(A)=5
    sizeof(B)=8
    Mais informações sobre o alinhamento em estruturas estão disponíveis no MSDN.

  11. flexibilização dos requisitos para coerção de enumerações. Quando implicitamente convertido, o compilador substituirá automaticamente pelo valor da enumeração correta e exibirá um aviso.

    Para o seguinte código:
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Start function                                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    O compilador emitirá um aviso:
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Anteriormente, neste caso, era gerado o erro:
    'PRICE_CLOSE' - cannot convert enum
    Se enumerações são usadas incorretamente nos parâmetros de funções, o compilador ainda produzirá um erro.

  12. corrigidos erros de compilação de funções de modelo. Agora, ao usar funções de modelo sobrecarregadas, apenas a sobrecarga necessária é instanciada e não todas as existentes.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // anteriormente neste lugar o compilador dava um erro
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. otimizados alguns casos de acesso ao histórico de ticks através da função CopyTicks*.
  14. adicionada a nova função TesterStop que permite concluir o teste/otimização antes do planejado. Ao ser chamada, todo o histórico de negociação e o resultado do OnTester são transferidos para o terminal do cliente como durante a conclusão geral do teste/otimização.
  15. adicionada uma nova propriedade para indicadores personalizados #property tester_everytick_calculate. Ela é usada no testador de estratégias e permite ativar o cálculo de indicadores em cada tick.

Tester

  1. agora, com testes/otimização não visuais, todos os indicadores usados (padrão e personalizados) são calculados apenas por solicitação de dados. Os indicadores que contêm chamadas da função EventChartCustom e que usam o manipulador Ontimer são exceções. Anteriormente no testador de estratégias, após a chegada de qualquer tick (mesmo do instrumento de outra pessoa), todos os indicadores eram calculados incondicionalmente. Essa inovação acelerou significativamente os testes e a otimização.

    Para forçar o cálculo de indicadores em cada tick, adicione a propriedade #property tester_everytick_calculate para o programa.

    Os indicadores compilados por versões anteriores do compilador serão calculados como antes — em cada tick.

  2. corrigida a precisão da moeda de depósito ao testar/otimizar e gerar relatórios relevantes.
  3. otimizado e acelerado o funcionamento do testeador de estratégias.
  4. corrigidos vários erros de teste e otimização.

MetaEditor

  1. corrigida a busca de palavras inteiras. Agora, ao pesquisar, o sublinhado é contado como um caractere regular, não como um delimitador de palavras.

Documentação atualizada.