Percebi que o backtesting parece estar limitado a cerca de 5 anos (de 2017 em diante), embora todos os eventos de notícias sejam baixados corretamente (o arquivo BIN tem 67 MB). Existe um limite para quantos eventos o MT5 pode manipular na memória para backtesting?
mqtrader #: Percebi que o backtesting parece estar limitado a cerca de 5 anos(de 2017 em diante), embora todos os eventos de notícias sejam baixados corretamente (o arquivo BIN tem 67 MB). Existe um limite para quantos eventos o MT5 pode manipular na memória para backtesting?
#property script_show_inputs#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/pt/code/32430inputbool inFromFile = false;
#define CALENDAR_FILENAME "Calendar.bin"// Nome do arquivo para leitura/gravação do Calendário.voidOnStart()
{
CALENDAR Calendar;
if (inFromFile)
Calendar.Load(CALENDAR_FILENAME);
else
{
Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, INT_MAX); // Pegou o calendário INTEIRO.
Calendar.Save(CALENDAR_FILENAME); // > > 65 MB.
}
Print(Calendar[0].ToString());
}
Resultado.
2007.01.0623:30 USD 1 CFTC Crude Oil Non-Commercial Net Positions(cftc-crude-oil-non-commercial-net-positions), United States(US) | 2.2 K | | 19.8 K |
O primeiro evento no banco de dados do calendário é janeiro de 2007.
Acabei de perceber que os valores de "Forecast" começam em 2017.05.05, e é por isso que o backtest só pode começar a partir dessa data ao executar o exemplo. Outros valores podem ser usados antes dessa data.
Mais uma vez, obrigado, fxsaber, por essa biblioteca muito útil!
calendário de eventos é prescrito significativamente para o futuro. É por isso que você pode usar um lembrete no MT4, tendo salvo um arquivo de dados do MT5 com antecedência (um mês antes, por exemplo).
Isso é o que eu faço no MT4.
Etapas para trabalhar com o calendário no MT4.
1. Execute um script no MT5 que salvará o calendário em um arquivo comum.
#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/pt/code/32430#define CALENDAR_FILENAME "Calendar.bin"// Nome do arquivo para leitura/gravação do Calendário.voidOnStart()
{
CALENDAR Calendar;
Calendar.Set(NULL, CALENDAR_IMPORTANCE_NONE, 0, INT_MAX); // Pegou o calendário INTEIRO.
Calendar.Save(CALENDAR_FILENAME, true); // Calendário gravado. > 65 MB.
}
2. Carregue o calendário do arquivo comum no MT4.
Como exemplo, abaixo está um lembrete de eventos importantes em moedas do símbolo atual, trabalhando no MT4.
#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/pt/code/32430#define CALENDAR_FILENAME "Calendar.bin"// Nome do arquivo para leitura/gravação do Calendário.intOnInit()
{
return(!EventSetTimer(1));
}
voidOnTimer()
{
static CALENDAR Calendar;
if (Calendar.GetAmount()) // Se o calendário não estiver vazio.
{
staticint Pos = 0;
Pos = Calendar.GetPosAfter(TimeCurrent(), Pos); // Eventos futuros encontrados.Comment(Calendar.ToString(Pos, 5, true)); // Imprimiu-os.
}
elseif (Calendar.Load(CALENDAR_FILENAME, true)) // Carregou o calendário de um arquivo.
{
string Currencies[2];
// Obter as moedas do caractere atual.
Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
Calendar.FilterByCurrency(Currencies); // Deixou os eventos nas moedas do símbolo.
Calendar.FilterByImportance(CALENDAR_IMPORTANCE_HIGH); // Apenas os eventos importantes foram deixados para trás.
}
}
Após o lançamento, temos um lembrete atualizado no gráfico (contagem regressiva) de eventos importantes nas moedas do símbolo diretamente no MT4.
Da mesma forma, o calendário pode funcionar no MT4-Tester.
É claro que esses trabalhos devem ser desenvolvidos e corrigidos e descrever a documentação, toda a comunidade e não apenas uma pessoa. Mas, por algum motivo, a própria administração não fornece essas provisões e não insere um link para o mesmo GitHub, para uma organização adequada. Embora existam projetos e seu uso, quase o mesmo GitHub.
Obrigado! pelo código, é muito interessante ler esse tipo de código, honestamente: sobrecarga de modelos falta de comentários )) o que vale essa criatividade, 5 minutos de pensamento o que é isso? uma instância de uma classe ou uma matriz com dados. Em geral, tudo para o desenvolvimento do cérebro.
CALENDAR Calendar;Calendar[i].time
O trabalho é certamente legal, você só precisa entender como ele funciona
Seu código é difícil de entender, mas presumo que haja uma classificação final no código acima, mas o código provavelmente está errado. Não é comum, mas ao mesclar matrizes, a matriz final apresenta erros na forma de falta de classificação, pois os elementos mais recentes da matriz devem ter um período de tempo maior.
Isso não foi feito. Entre em contato com um especialista.
Percebi que o backtesting parece estar limitado a cerca de 5 anos(de 2017 em diante), embora todos os eventos de notícias sejam baixados corretamente (o arquivo BIN tem 67 MB). Existe um limite para quantos eventos o MT5 pode manipular na memória para backtesting?
Resultado.
O primeiro evento no banco de dados do calendário é janeiro de 2007.
calendário de eventos é prescrito significativamente para o futuro. É por isso que você pode usar um lembrete no MT4, tendo salvo um arquivo de dados do MT5 com antecedência (um mês antes, por exemplo).
Isso é o que eu faço no MT4.
Etapas para trabalhar com o calendário no MT4.
1. Execute um script no MT5 que salvará o calendário em um arquivo comum.
2. Carregue o calendário do arquivo comum no MT4.
Como exemplo, abaixo está um lembrete de eventos importantes em moedas do símbolo atual, trabalhando no MT4.
Após o lançamento, temos um lembrete atualizado no gráfico (contagem regressiva) de eventos importantes nas moedas do símbolo diretamente no MT4.
Da mesma forma, o calendário pode funcionar no MT4-Tester.
No entanto, continuo tendo um problema, pois faço o download padrão do arquivo de calendário
em seguida, defino uma hora de início e obtenho eventos após essa hora em um loop para cada moeda.
Tente colar os códigos-fonte para que eles possam ser lidos.
Obrigado pelo trabalho intenso e útil.
É claro que esses trabalhos devem ser desenvolvidos e corrigidos e descrever a documentação, toda a comunidade e não apenas uma pessoa. Mas, por algum motivo, a própria administração não fornece essas provisões e não insere um link para o mesmo GitHub, para uma organização adequada. Embora existam projetos e seu uso, quase o mesmo GitHub.
Obrigado! pelo código, é muito interessante ler esse tipo de código, honestamente: sobrecarga de modelos falta de comentários )) o que vale essa criatividade, 5 minutos de pensamento o que é isso? uma instância de uma classe ou uma matriz com dados. Em geral, tudo para o desenvolvimento do cérebro. O trabalho é certamente legal, você só precisa entender como ele funcionaSeria bom se a função classificasse por tempo toda a matriz após a mesclagem
Seria bom se a função classificasse por tempo toda a matriz após a mesclagem
Dê um exemplo em que ela não faça isso.
Dê-me um exemplo em que esse não seja o caso.
Seu código é difícil de entender, mas presumo que haja uma classificação final no código acima, mas o código provavelmente está errado. Não é comum, mas ao mesclar matrizes, a matriz final apresenta erros na forma de falta de classificação, pois os elementos mais recentes da matriz devem ter um período de tempo maior.