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
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.
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.
#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.
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
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
indicador de Divergência do MACD
Calendário
Calendário - análise fundamental do histórico e em tempo real.
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.