Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
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
Visualizações:
88
Avaliação:
(15)
Publicado:
2025.04.03 11:15
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Essa biblioteca permite que você leia/grave arquivos tst - formato de passagem única do MT5-Tester.


Algumas variantes de uso

    Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

    MetaTrader 5 platform beta build 2155: Áreas de visibilidade em MQL5, atualização global do testador de estratégias e hospedagem embutida

    fxsaber, 2019.10.04 07:18 pm.

    Se eles abrirem o formato dos arquivos tst e colocarem a pasta de cache do testador na sandbox, será possível criar produtos de mercado de um novo tipo, que serão analisadores/corretores dos resultados do testador.


    Por exemplo, será possível escrever um Market-combine que mostre todas as passagens únicas disponíveis no cache.

    • Você seleciona os necessários com o mouse e ele mostra as estatísticas combinadas.
    • Ele limpa o cache de passagens desnecessárias.
    • Calcula o portfólio ideal com coeficientes de ponderação apropriados a partir das passagens.
    • Mostra os melhores intervalos de negociação para cada passagem.
    • Oferece sua própria visualização interativa de estatísticas, incluindo filtros.
    • Calcula o MM ideal.
    • Para cada posição de hedge no histórico, mostra OrderOpenPriceBest (o melhor preço de abertura durante o tempo de vida da posição), OrderClosePriceBest (semelhante), OrderOpenPriceLength (por quanto tempo o preço não foi pior que OrderOpenPrice durante o tempo de vida da posição), OrderClosePriceLength (semelhante), OrderProfitBest (o maior lucro possível de uma posição semelhante durante o tempo de vida da posição original).
    • Mostra a eficiência de cada posição de hedge.
    • Calcula o resultado quando a latência está ativada.
    • Calcula o resultado em diferentes configurações de execução de ordens (se elas deslizam, etc.) e comissões.
    • Mostra o resultado do TS em um histórico de ticks diferente.
    • ...

    Não é necessário iniciar o Tester para implementar cada item.

    Tudo isso pode ser feito agora, se você colocar a pasta de cache na área restrita por meio do mklink. Você só precisa do tst-format.

    Quem sentir a força em si mesmo provavelmente deve começar a escrever esse produto. Eu me juntaria com prazer à equipe de desenvolvedores e o compraria. O nicho está completamente vazio.


    Se o cache-folder não for colocado em sandbox, pode haver uma chance maior de que produtos semelhantes apareçam fora do ecossistema MQ, pois serão escritos em outras linguagens.


    Exemplos.

    #include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Dados de passagem única do testador.
    
    void OnStart()
    {  
      SINGLETESTERCACHE SingleTesterCache; // Criado um objeto de cache de testador.
      
      SingleTesterCache.Set(); // Coloque a história real do lance nele.
      
    // ..\.\.\MQL5\Files/Test.tst.
      Print(SingleTesterCache.Save("Test.tst")); // Grave-o em um arquivo que possa ser importado para o testador.
    }

    Esse script reúne o histórico de negociação de contas reais no formato tst. Ele é importado para o Tester da seguinte forma.


    O resultado é mais ou menos o seguinte.


    As soluções DLL não podem ser colocadas na KB, portanto, abaixo está o código-fonte de outro script, que não está incluído na entrega da KB.

    #include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Dados de passagem única do testador.
    
    #include <Graphics\Graphic.mqh>
    #include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132
    
    #define  MIN_WIDTH 10
    
    // Criando um gráfico.
    string GraphPlot( const double &Y1[], const double &Y2[],
                      int Width = 0, int Height = 0, const ENUM_CURVE_TYPE Type = CURVE_NONE,
                      const string CurveName1 = NULL, const string CurveName2 = NULL, string ObjName = NULL )
    {
      Width = Width ? Width : (int)::ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
      Height = Height ? Height : (int)::ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
      ObjName = (ObjName == NULL) ? __FUNCTION__ : ObjName;
    
      CGraphic Graphic;
    
      const bool Res = (::ObjectFind(0, ObjName) >= 0) ? Graphic.Attach(0, ObjName) : Graphic.Create(0, ObjName, 0, 0, 0, Width, Height);
    
      if (Res)
      {
        const int Size1 = ::ArraySize(Y1);
        const int Size2 = ::ArraySize(Y2);
    
        Graphic.CurveAdd(Y1, ((Type == CURVE_NONE) && Size1) ? ((Width / Size1 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName1);
        Graphic.CurveAdd(Y2, ((Type == CURVE_NONE) && Size2) ? ((Width / Size2 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName2);
    
        Graphic.CurvePlotAll();
        Graphic.Update();
      }
    
      return (Res ? Graphic.ChartObjectName() : NULL);
    }
    
    void OnStart()
    {  
      uchar Bytes2[];
      
      if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Se fosse possível ler o último registro de cache de uma única execução
      {
        const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Conduza-o para o objeto correspondente.
    
        SingleTesterCache.SaveSet(NULL, true, "Created by " + __FILE__); // Salve o arquivo de conjunto com detalhes.
        
        double Balance[];
        double Equity[];
      
        // Imprimir o gráfico de saldo e patrimônio líquido.
        if (SingleTesterCache.GetBalance(Balance) && SingleTesterCache.GetEquity(Equity))
          GraphPlot(Balance, Equity, 1200, 500, CURVE_NONE, "Balance", "Equity");
          
        Print(SingleTesterCache.Header.ToString());  // Saída do cabeçalho de uma única passagem.
        Print(SingleTesterCache.Summary.ToString()); // Statistica.
        Print(SingleTesterCache.Inputs);             // Parâmetros de entrada.
      }
    }


    Esse script pegará automaticamente os dados da última passagem única e produzirá seus dados, incluindo um gráfico de equilíbrio/equidade.


    Agradecimentos.

    Agradeço aos desenvolvedores por criarem os caches do Tester e me ajudarem a descompactar seus formatos.

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

    Countdown 2.0 Countdown 2.0

    O Countdown é um indicador avançado desenvolvido para traders que desejam acompanhar o tempo restante até o próximo candlestick ou a próxima abertura do mercado de forma clara e eficiente. Com três modos de exibição flexíveis (comentário, bordas do gráfico ou próximo ao preço), este indicador oferece uma solução personalizável para atender às suas necessidades de trading.

    Divergence MACD Divergence MACD

    indicador de Divergência do MACD

    Calendário Calendário

    Calendário - análise fundamental do histórico e em tempo real.

    Chute para trás Chute para trás

    Ciclo do algoritmo: quando não houver posições abertas, abra duas posições opostas. Aguarde o fechamento de ambas as posições.