Especialistas: Programação no MQL5 para traders: códigos-fonte retirados do livro. Parte 6 - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
De qualquer forma, ordens, negócios e posições não estão relacionados a períodos de tempo. Ou você entendeu algo errado ou seu texto está incorreto.
Desculpe-me, mas acho que minha escolha de palavras está confusa. Por"período de tempo" quero dizer "intervalo de datas". Digamos que eu queira selecionar transações/pedidos realizados em um determinado intervalo de datas, por exemplo, transações de 2025-10-01 00:00:00 a 2025-10-22 23:59:59.
Se você quiser analisar um subintervalo de um histórico de negociações, é mais eficiente solicitar apenas essa parte do histórico antes da filtragem, sem afetar o próprio código de filtragem:
Se, por algum motivo, você quiser selecionar um subintervalo (mais restrito) dentro do intervalo global que você aplicou com HistorySelect, ainda poderá fazer isso no código de filtragem da seguinte forma:
{ // alguns deles estão aqui // HistorySelect(0, LONG_MAX); // HistorySelectByPosition(PositionID); ... DealTuple deals[]; if(SubrangeFrom != SubrangeTo && SubrangeFrom < SubrangeTo) { filter.let(DEAL_TIME, SubrangeFrom - 1, IS::GREATER).let(DEAL_TIME, SubrangeTo + 1, IS::LESS); } filter.let(DEAL_POSITION_ID, PositionID).select(deals, true); ... }A linha destacada em amarelo define duas condições para o intervalo de data e hora [SubrangeFrom, SubrangeTo] usando qualificadores adicionais IS::GREATER e IS::LESS (por padrão, eles não são especificados em outras chamadas para let(), e IS::EQUAL é normalmente usado para campos de valor único).
Conheço apenas um motivo para aplicar o subfiltro por intervalo de datas: é o tempo de configuração das ordens (ORDER_TIME_SETUP), porque o HistorySelect é aplicado a outra propriedade de data e hora das ordens, ou seja, o tempo de execução da ordem (ORDER_TIME_DONE). Também pode ser interessante filtrar um subintervalo de ordens ativas (não no histórico), se houver muitas delas.
Você pode dar uma olhada no script de exemplo MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5, como ponto de partida.Se você quiser analisar um subintervalo de um histórico de negociação, é mais eficiente solicitar apenas essa parte do histórico antes da filtragem, sem afetar o próprio código de filtragem:
Se, por algum motivo, você quiser selecionar um subintervalo (mais estreito) dentro do intervalo global que aplicou com HistorySelect, ainda poderá fazer isso no código de filtragem da seguinte forma:
A linha destacada em amarelo define duas condições para o intervalo de datetime [SubrangeFrom, SubrangeTo] usando qualificadores adicionais IS::GREATER e IS::LESS (por padrão, eles não são especificados em outras chamadas para let(), e IS::EQUAL é normalmente usado para campos de valor único).
Conheço apenas um motivo para aplicar o subfiltro por intervalo de datas: é o tempo de configuração das ordens (ORDER_TIME_SETUP), porque o HistorySelect é aplicado a outra propriedade de data e hora das ordens, ou seja, o tempo de execução da ordem (ORDER_TIME_DONE). Também pode ser interessante filtrar um subintervalo de ordens ativas (não no histórico), se houver muitas delas.
Você pode dar uma olhada no script de exemplo MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5, como ponto de partida.Correção de bug MQL5/Include/MQL5Book/TradeUtils.mqh.
Um moderador formatou o código colado incorretamente. Normalmente, esse código é removido.
@StanislavKorotky Por favor, você pode ajudar a analisar esse erro? Acredito que ele tenha começado depois das atualizações do MT5 porque eu sabia que o código funcionava nos meses anteriores sem nenhuma modificação.
parameter convertion type 'long[][2]' to 'string[][] &' is not allowed SymbolFilter.mqh 199 20
Acredito que o código abaixo ajudará a replicar o problema:
Olá @Paul Dick
Tente este https://www.mql5.com/pt/code/57233 para classificar matrizes
Estou anexando uma versão atualizada do arquivo de cálculo do critériode otimização personalizado baseado em R2 - RSquared.mqh, no qual o cálculo para o caso de lotes variáveis foi corrigido.
A qualidade da estimativa foi significativamente aprimorada - a julgar pela tabela de resultados de otimização, a combinação do fator de recuperação e dos parâmetros de Sharpe foi obtida.
Exemplo de uso.
Recentemente, aprendi a usar o Frame e testei seu código, FrameTransfer.mq5. Essa linha está gerando um erro no compilador MT5 atual. Por favor, verifique: #property tester_set "FrameTransfer.set" (extensão de arquivo de conjunto de teste inválida, '*.set' esperado FrameTransfer.mq5)
Ele deve ser alterado desta forma para que a compilação seja bem-sucedida: #property tester_set "\\Presets\\FrameTransfer.set"
Até mesmo `#property tester_set "/Presets/FrameTransfer.set"` falhará.
Talvez você possa modificar a descrição no livro de algoritmos:
Para que a compilação seja bem-sucedida, ela deve ser alterada da seguinte forma: #property tester_set "\\Presets\\FrameTransfer.set"
Até mesmo `#property tester_set "/Presets/FrameTransfer.set"` falhará.
Talvez você possa alterar a descrição no livro de algoritmos:
Esse é um bug óbvio do compilador - ele dá o erro: "extensão de arquivo de conjunto de teste inválida, '*.set' esperado" para o código:
onde o arquivo tem a extensão necessária. O caminho do local do arquivo não tem nada a ver com isso.
O erro já existe há muito tempo, desde pelo menos 2024. Não sei por que a MQ não está ansiosa para corrigi-lo.
Quanto às edições do livro, elas não são necessárias nesse caso, mas, de qualquer forma, o livro agora está totalmente sob o controle da MQ.
Esse é um bug óbvio do compilador - ele apresenta o erro: "extensão de arquivo de conjunto de teste inválida, '*.set' esperado" para o código:
Para permanecer na sua versão do MetaEditor, adicione zero ao final do nome do arquivo: "myset.set\0"