Às vezes, é necessário visualizar uma parte do histórico de preços na forma de uma tabela. Isso pode ser feito por meio de CTRL+U, selecionando a guia Bars/Ticks. Inserir o intervalo necessário manualmente. Isso é tedioso.
Por isso, criei uma funcionalidade adicional, que é demonstrada pelo Expert Advisor a seguir.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132#include <fxsaber\Keyboard\Keyboard.mqh> // https://www.mql5.com/pt/code/48393inputbool inTicks = true; // true - Ticks, false - Barsinputint inBefore = -60; // Antes em segundosinputint inAfter = 60; // Após em segundosinputENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // Período (modo Barras)datetime GetTime( constint X )
{
int Window;
datetime Res;
double Price;
return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}
voidOnChartEvent( const int32_t id, constlong &lparam, constdouble&, conststring& )
{
if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
{
constdatetime Time = GetTime((int)lparam);
if (Time)
{
if (inTicks)
MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);elseMTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);
}
}
}
Você clica (com a tecla CTRL pressionada) no local necessário do gráfico e obtém automaticamente os dados tabulares correspondentes de uma só vez.
As funções selecionadas simplesmente preenchem determinados campos de dados e os consultam. Em seguida, por meio da GUI, você vê o que estava interessado. Automação, em geral.
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
Bom dia, caro fxsaber! Por favor, ajude-me a resolver um problema. Meu script tem uma função de arquivo, que desenvolvi com a ajuda da excelente biblioteca MTTESTER. Ele grava o Settin na pasta Tester na seguinte linha: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // Sobrescreve o Settin da sandbox Files na pasta Tester. Obtemos um conjunto com o nome: "After archiving". Mas ele não é adequado para retrabalho posterior, aparentemente por causa da codificação. No entanto, se você gravá-lo manualmente no robô no testador de estratégias e salvá-lo com o nome "After manual writing to the robot and saving", esse conjunto já é adequado. E não se trata apenas de alterar o cabeçalho, mas de algo mais. Pedi ajuda aos ironmen (Qwen, Deep Seek) e eles geraram um script "ReloadSetsFromCommonFixed". Ele tem muitos recursos excelentes e funciona, exceto por esta linha: if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON)) O conjunto é copiado, mas na impressão de verificação a saída é abracadabra, aparentemente devido à codificação. O Iron ofereceu quatro soluções, mas nenhuma delas funcionou (o texto tem todas elas). Minha última esperança são as de couro. Existe alguma maneira de alterar esta linha na função de arquivamento: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) para simular também a gravação manual no robô com o salvamento subsequente no formato necessário "After manual writing to the robot and saving"? Atenciosamente, Alexander
prRead0 = MTTESTER::GetSettings(Control); // Lê as configurações do robô que acabaram de ser instaladas
funciona corretamente e prRead0 = true após sua execução.
Mas na rede de controle prMFI=true, pois foi originalmente carregado manualmente no robô. Isso significa que a gravação no robô não aconteceu de fato, embora o sinal de gravação prWrite0 = true.
Na rede original, prHEX=true
Na rede original do robô, prMFI=true
O comando MTTESTER::SetSettings2(Settings) funciona, mas essas configurações não aparecem no robô.
Você pode salvar(inLoad = false) um arquivo de conjunto por meio do script, depois alterar algonele manualmente e carregá-lo(inLoad = true) no testador por meio do script.
Se funcionar, pegue as partes correspondentes do código-fonte para você.
Às vezes, é necessário visualizar uma parte do histórico de preços na forma de uma tabela. Isso pode ser feito por meio de CTRL+U, selecionando a guia Bars/Ticks. Inserir o intervalo necessário manualmente. Isso é tedioso.
Por isso, criei uma funcionalidade adicional, que é demonstrada pelo Expert Advisor a seguir.
Você clica (com a tecla CTRL pressionada) no local necessário do gráfico e obtém automaticamente os dados tabulares correspondentes de uma só vez.
As funções selecionadas simplesmente preenchem determinados campos de dados e os consultam. Em seguida, por meio da GUI, você vê o que estava interessado. Automação, em geral.
5430 As janelas ainda piscam ao preparar uma tarefa.
Como corrigir isso?
5430 O Windows ainda pisca ao preparar uma tarefa.
Como corrigir isso?
Assim.
É um ótimo tema. Mas eu fiz o download antes de tudo separadamente e ainda pisca.
Vi que no arquivo MultiTester_Example.mq5
adicionei linhas ao arquivo MultiTester_Example.mq5.
Eu comentei isso ou devo fazer diferente? Ou posso excluir todas essas 4 linhas?
P.S. Vi que, quando peguei a lista antiga de tarefas sem essas linhas, ela ficou piscando. Com as novas linhas, ela não pisca.
Mas será que comentei corretamente apenas uma linha?
É um ótimo tema. Mas eu baixei antes que tudo separadamente ainda pisque.
Eu vi isso no arquivo MultiTester_Example.mq5
foram adicionadas as linhas
Eu comentei dessa forma ou devo fazer diferente? Ou posso excluir todas essas 4 linhas em geral?
P.S. Vi que peguei a lista de tarefas antiga sem essas linhas e ela estava piscando. Com as novas linhas, ela não está piscando.
Mas será que eu comentei apenas uma linha corretamente?
Existe alguma maneira de alterar essa linha na função de arquivamento?
Procurei aqui (na janela aberta, pressione ENTER na barra de endereços) o registro definido. Provavelmente, esses sinalizadores são necessários.
Esses sinalizadores ajudaram muito e o problema de arquivamento foi resolvido. Agora o resultado está no formato correto.
Muito obrigado!
Mas no meu script Nocturne o comando não funciona corretamente :
prWrite0 = MTTESTER::SetSettings2(Settings); // Grava as configurações no robô
Embora prWrite0 = true após sua execução.
Provavelmente é novamente uma questão de sinalizadores ao ler o conjunto de configurações da pasta.
Isso é feito pela função GetKthFileContent, que tem a linha:
int handle = FileOpen(full_path, FILE_READ | FILE_WRITE | FILE_UNICODE | FILE_TXT | FILE_COMMON);
As variantes da linha abaixo também não funcionam:
// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON); // Fonte variant line
// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON);
Próximo comando:
prRead0 = MTTESTER::GetSettings(Control); // Lê as configurações do robô que acabaram de ser instaladas
funciona corretamente e prRead0 = true após sua execução.
Mas na rede de controle prMFI=true, pois foi originalmente carregado manualmente no robô. Isso significa que a gravação no robô não aconteceu de fato, embora o sinal de gravação prWrite0 = true.
Na rede original, prHEX=true
Na rede original do robô, prMFI=true
O comando MTTESTER::SetSettings2(Settings) funciona, mas essas configurações não aparecem no robô.
Qual é o problema aqui?
Atenciosamente, Alexander
Então, qual é o problema aqui?
Não me preocupei em estudar os sinalizadores e decidi escrever um código funcional para salvar e carregar os arquivos de configuração do testador.
Você pode salvar(inLoad = false) um arquivo de conjunto por meio do script, depois alterar algonele manualmente e carregá-lo(inLoad = true) no testador por meio do script.
Se funcionar, pegue as partes correspondentes do código-fonte para você.