Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Virtual - biblioteca para MetaTrader 5

Visualizações:
2030
Avaliação:
(59)
Publicado:
2019.01.14 09:20
\MQL5\Include\fxsaber\Virtual\ \MQL5\Experts\fxsaber\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Esta multiplataforma permite trabalhar em ambiente de negociação virtual de uma maneira muito fácil.


Cenários para usar em ambiente de negociação virtual

  1. Teste em tempo real. Isso significa que você pode observar o EA operando com os preços mais recentes no testador em tempo real, permitindo identificar as causas das discrepâncias entre o mercado real e o testador. Não há necessidade de esperar por um novo dia (limitação do testador MT5) ou criar ferramentas especiais para o Testador para que ele possa coletar dados mais recentes. Assim, não é necessário executar o testador repetidamente para obter atualizações, na verdade, o ambiente de negociação virtual é um testador em tempo real.
  2. Otimização automática. O ambiente de negociação virtual pressupõe que você vai definir com quais dados ele deve trabalhar, portanto, uma matriz de dados históricos permite que você execute qualquer Trading System (TS) dentro de um ambiente de negociação virtual. Assim, você pode implementar otimização automática dentro dos programas - um programa regularmente se otimiza, assim como o Testador convencional.
  3. Transformando negociação real em virtual (e vice-versa). Por exemplo, desabilite temporariamente o TS em caso de perdas, o tempo para reativar o TS pode ser analisado através do Testador ou negociando um lote mínimo. Por sua vez, o ambiente virtual permite que os usuários parem de operar em tempo real e continuem negociando no ambiente virtual, sendo conveniente para analisar se é hora de reativar o TS e retomar facilmente a negociação real.
  4. Simplificando uma lógica de negociação em conta real. O mercado cria situações que não estão presentes no Testador, estas incluem rejeições e execução parcial. O grande problema é tornar a negociação real semelhante a realizada pelo TS no Testador, geralmente, os desenvolvedores de TS empregam esforços consideráveis para superar as nuances do mercado que são extremamente difíceis de prever. Na verdade, eles aprendem com seus próprios erros e gastam dinheiro real para isso, já que as contas de demonstração são incapazes de emular o que acontece no mercado real. O ambiente virtual, por sua vez, nos permite ver a perfeita imagem da execução. Assim, para contornar as armadilhas do mercado real, precisamos ter acesso a essa imagem perfeita e a um sincronizador de alta qualidade (serviço de cópia) do ambiente virtual para o real. Portanto, os ambientes virtuais de negociação são de grande ajuda para lidar com situações difíceis nos mercados reais.
  5. Aceleração do testador. O testador integrado é uma ferramenta universal, isso significa que ele precisa emular o ambiente de negociação da forma mais completa possível, acarretando altos custos na forma de limitações na velocidade das operações. Ao desenvolver e analisar um TS, essa alta precisão é exaustiva, existem várias maneiras de acelerar o Testador, incluindo símbolos personalizados (até cem por cento) e ambientes de negociação virtuais (dezenas e centenas de porcentagem), podendo ser dar ao luxo de não levar em conta a velocidade. A aceleração do Testador é uma vantagem essencial nos ambientes de negociação virtual, pois economiza recursos de computação e, o mais importante, economiza tempo.
  6. Reversão de TS. Um ambiente de negociação virtual permite reverter qualquer TS facilmente.
  7. Usando vários TS em conta netting. Um ambiente de negociação virtual simplifica consideravelmente o lançamento de qualquer número de TS em conta netting, TS não interferem entre si.
  8. Posições unidirecionais em uma conta de netting. Você pode abrir várias posições na mesma direção, cada uma delas terá seu próprio Magic, OpenTime, OpenPrice, Comment, etc. Isso permite a criação do TS em uma conta netting, onde cada TP de uma posição unidirecional é diferente.
  9. Ocultando níveis Limit/Stop/SL/TP. Se houver uma tarefa para ocultar níveis de negociação significativos, isso pode ser resolvido rapidamente usando um ambiente de negociação virtual.
  10. Lançamento de Trading System Hedging em conta netting. Todos os TS são lançados em ambiente virtual de hedging, ao mbiente real de netting sincroniza com um virtual.
  11. Retomando a operação do TS após o stop (anormal). A lógica de muitos TS depende do que fazia antes, é por isso que, mesmo que você desative um TS e o reinicie imediatamente, você pode não obter o resultado que teria recebido se o TS tivesse funcionado sem fechar o sistema, um ambiente de negociação virtual permite que você resolva essa tarefa. Ao iniciar, o TS é executado temporariamente no ambiente virtual com o histórico de preços até o momento atual, então o TS é movido para o ambiente de negociação real. Este procedimento pode resolver muitas situações anormais envolvendo desligamentos e reinicializações do TS.


Implementação

A biblioteca permite criar um ambiente de negociação virtual e operar como se fosse um ambiente de negociação real. A funcionalidade da biblioteca não é nova, embora a biblioteca da multiplataforma forneça uma propriedade que pode ser importante às vezes: você não precisa estudar nada para usar. Conhecimento da lógica de negociação MT4 (não MT5) é o suficiente.

A lógica de negociação no estilo MT4 foi selecionada para negociação virtual, já que é mais conveniente e permite o desenvolvimento de EAs entre plataformas com facilidade.


Exemplo

A funcionalidade da biblioteca pode ser tradicionalmente demonstrada por um exemplo preparado antecipadamente.

    // Lançamento de TS em ambientes de negociação reais e virtuais
    
    #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006
    #include <fxsaber\Virtual\Virtual.mqh> // Ambiente de negociação virtual
    
    input double Lots = 1;
    input int Interval = 100;  // Tempo para fechar a posição
    input bool Example = true; // Que exemplo de código a selecionar
    
    // Reversão de TS 
    void System()
    {
      if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS))
        OrderSend(_Symbol, OP_BUY, Lots, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 100, 0, 0); // Se não houver posição, abra uma
      else if (TimeCurrent() - OrderOpenTime() > Interval) // Se o tempo para fechar a posição exceder o tempo especificado
      {
        // Reverter a posição
        OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
        OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0);
      }
    }
    
    void OnTick()
    {
      static const int handle = VIRTUAL::Create(); // Criando indentificador do ambiente de negociação virtual  0 - ambiente real de negociação
    
      if (Example)
      {
        if (VIRTUAL::SelectByHandle()) // ambiente real de negociação selecionado
          System();                    // Lançamento do TS em ambiente de negociação selecionado (real)
    
        if (VIRTUAL::SelectByHandle(handle)) // Ambiente de negociação virtual selecionado
        {
          VIRTUAL::NewTick();      // Adicionado tick ao ambiente de negociação virtual
          System();                // Lançamento de TS em ambiente de negociação selecionado (virtual)
        }
      }
      else // Fixação alternativa das mesmas ações.
        // Mover ao longo de todos os ambientes de negociação existentes
        for (int i = 0; i <= VIRTUAL::Total(); i++)
          if (VIRTUAL::SelectByIndex(i)) // selecionar mbiente de negociação apropriado
          {
            VIRTUAL::NewTick(); // Adicionado tick para um ambiente de negociação selecionado
    
            System(); // Lançamento de TS em um ambiente de negociação selecionado
          }
    
      Comment(VIRTUAL::ToString()); // Exibe o status do ambiente de negociação virtual no gráfico
    }


Este é um EA de reversão multiplataforma. Sua lógica de negociação pode ser descrita em apenas algumas strings (função System), graças ao estilo MT4. O EA lança o TS em ambientes de negociação reais e virtuais simultaneamente, isso pode ser bem visto no testador MT4 ou MT5 (CTRL + F5)

A imagem mostra que a negociação em ambientes reais e virtuais são idênticas.


Observe que o código TS permanece o mesmo. Apenas um ambiente de negociação é selecionado: um real ou qualquer número virtual.

O código exibido aqui é redundante - as duas versões mostram simplesmente a lógica de trabalhar com a biblioteca.


Aceleração do testador

Uma vez que a fase de aceleração do Testador pode ser necessária com mais freqüência do que outras, nós adicionamos a capacidade de mudar qualquer TS para um ambiente virtual e vice-versa, adicionando duas strings no início do código.

#define VIRTUAL_TESTER // Lançamento no ambiente de negociação virtual
#include <fxsaber\Virtual\Virtual.mqh> // Ambiente de negociação virtual

A string destacada permite que os usuários não interfiram com o código original do TS.

Este modo foi criado especificamente para o Testador. Assumindo que uma otimização de longo prazo seja iniciada com o ambiente virtual ativado (VirtualTester = true) em vez de um ambiente real, o que proporciona um ganho significativo na velocidade de otimização (tempo). Os resultados obtidos (critério OnTester - Balance) podem então ser usados para execuções de padrão único em ambiente real de negociação. (VirtualTester = false).


Reversão de TS

As mesmas duas strings de caracteres destinadas a acelerar o Testador permitem resolver outro problema comum - a reversão TS.

ReverseDeals = true - modo que permite a reversão das operações. O algoritmo interno é o seguinte:

  • O EA original opera dentro do ambiente virtual como se fosse o real,
  • no ambiente real, existem posições que são inversas às posições apropriadas no virtual.

Assim, a lógica do EA não é violada de forma alguma. Ao mesmo tempo, podemos ver o que o acontece na reversão de TS. Este modo também é verificado no Testador.


Características

  • Nem tudo é implementado neste ambiente de negociação virtual, comparado com o Testador integrado.
  • Ambos os modos Hedging/Netting são suportados. Por exemplo, você pode criar ambientes virtuais de compensação e cobertura simultaneamente no MT4/5.
  • Nenhuma limitação no número de ambientes virtuais.
  • Nenhuma execução pelos últimos preços, como às vezes acontece no Testador de Estratégias do MT5, já que o último preço não é relevante para nenhum ponto no tempo.
  • Ordens de limite e níveis de TakeProfit são sempre executados nos preços especificados sem derrapagem, removendo uma impressão de natureza "graal" de alguns TS no Testador MT5.
  • As ordens Stop e os níveis de StopLoss são sempre executadas no primeiro preço de aceitação (derrapagens negativas) para evitar o "testador graal".
  • Configura as ordens pendentes e os níveis de SL/TP nos preços atuais, ao contrário de alguns modos de operação do testador MT5, tal comportamento corresponde às realidades do mercado.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/22577

MAMy v3 MAMy v3

Indicador baseado em três médias móveis

RNN RNN

O Expert Advisor baseado no indicador iRSI (Relative Strength Index, RSI) e com uma pequena rede neural

MAMy Expert MAMy Expert

EA baseado no Indicador MAMy v.3

TrendLineAlert_V2 TrendLineAlert_V2

O indicador exibe uma linha de tendência inclinada. Seus parâmetros são definidos quando o indicador é lançado pelo trader. A linha de tendência define o nível de disparo do sinal. O rompimento da linha de tendência ativa os sinais, enviando e-mails e notificações push.