Olá pessoal boa noite,
Eu estava testando um robo em backtest e percebi que o teste estava considerando a virada do dia posicionado. Como faço para garantir que as posições serão encerradas 10 minutos antes do final do pregão?
Desde ja obrigado,
Junior
Olá afterdarkrj,
algum exemplo de código que você esteja utilizando? Seria interessante nos mostrar onde, exatamente, você está tendo dificuldades com relação ao desenvolvimento de seu código.
Apenas assim poderemos ajudá-lo de alguma forma.
Abraços,
Malacarne
Olá afterdarkrj,
algum exemplo de código que você esteja utilizando? Seria interessante nos mostrar onde, exatamente, você está tendo dificuldades com relação ao desenvolvimento de seu código.
Apenas assim poderemos ajudá-lo de alguma forma.
Abraços,
Malacarne
Malacarde tudo bem?
Na verdade conheci o Metatrader a alguns dias e estou apenas testando os robos que ja vem com ele com algumas parametrizações, logo não comecei a estudar sua linguagem de script ou sequer tentei mexer no codigo. Quando abri a pergunta pensei na possibilidade desta questao ser tratada com alguma parametrização da ferramenta ou um pequeno acréscimo de código, mas se não for tão trivial assim sem problemas vou iniciar os estudos mais aprofundados.
Obrigado pela ajuda,
Junior
Malacarde tudo bem?
Na verdade conheci o Metatrader a alguns dias e estou apenas testando os robos que ja vem com ele com algumas parametrizações, logo não comecei a estudar sua linguagem de script ou sequer tentei mexer no codigo. Quando abri a pergunta pensei na possibilidade desta questao ser tratada com alguma parametrização da ferramenta ou um pequeno acréscimo de código, mas se não for tão trivial assim sem problemas vou iniciar os estudos mais aprofundados.
Obrigado pela ajuda,
Junior
Olá afterdarkrj,
o MetaTrader é uma ferramenta fantástica... e você está no lugar certo caso queira aprender um pouco mais sobre essa ferramenta! Aqui no site você encontrará não apenas a Documentação oficial do MetaTrader, mas também poderá buscar exemplos de código gratuitamente e, caso necessário, você também poderá tirar suas dúvidas diretamente aqui no fórum.
Logo, o primeiro passo, nesse caso, seria realmente que você começasse seus estudos com a ferramenta e também com a linguagem de programação MQL5.
Por fim, caso não queira colocar a "mão na massa", você poderá utilizar a seção Freelance para solicitar algum serviço específico e também comprar produtos prontos diretamente na seção Mercado.
Abraços,
Malacarne
Olá afterdarkrj,
o MetaTrader é uma ferramenta fantástica... e você está no lugar certo caso queira aprender um pouco mais sobre essa ferramenta! Aqui no site você encontrará não apenas a Documentação oficial do MetaTrader, mas também poderá buscar exemplos de código gratuitamente e, caso necessário, você também poderá tirar suas dúvidas diretamente aqui no fórum.
Logo, o primeiro passo, nesse caso, seria realmente que você começasse seus estudos com a ferramenta e também com a linguagem de programação MQL5.
Por fim, caso não queira colocar a "mão na massa", você poderá utilizar a seção Freelance para solicitar algum serviço específico e também comprar produtos prontos diretamente na seção Mercado.
Abraços,
Malacarne
Malacarne,
Desculpe se a pergunta foi basica demais, o que pode ter dado a impressão que eu queria que fizessem para mim, só pensei que fosse algo bem trivial e que pudesse pegar um atalho com vocês de poucas linhas. Vou estudar com calma.
Obrigado e até a próxima,
Junior
Malacarne,
Desculpe se a pergunta foi basica demais, o que pode ter dado a impressão que eu queria que fizessem para mim, só pensei que fosse algo bem trivial e que pudesse pegar um atalho com vocês de poucas linhas. Vou estudar com calma.
Obrigado e até a próxima,
Junior
Prezados,
Também estou com a mesma dúvida e não acho ela trivial.
Imagino que pode ser implementado uma venda a mercado 10 minutos antes do fechamento do pregão e ainda uma trava de horário para o robô não operar mais em determinado período.
Também estou começando, mas vou tentar desenvolver algo nesse sentido. Alguém já fez isso, ou mesmo poderia opinar se esse é o melhor caminho?
Att.
Otávio
Prezados,
Também estou com a mesma dúvida e não acho ela trivial.
Imagino que pode ser implementado uma venda a mercado 10 minutos antes do fechamento do pregão e ainda uma trava de horário para o robô não operar mais em determinado período.
Também estou começando, mas vou tentar desenvolver algo nesse sentido. Alguém já fez isso, ou mesmo poderia opinar se esse é o melhor caminho?
Att.
Otávio
Olá otaviokc ,
É bastante comum o desenvolvimento de robôs com travas de horário. Se a pergunta foi se esse é o melhor caminho, acredito que sim. Você já deveria pensar em desenvolver um EA que tivesse sim essa possibilidade de encerramento das operações antes do final do pregão.
Abraços,
Malacarne
Olá otaviokc ,
É bastante comum o desenvolvimento de robôs com travas de horário. Se a pergunta foi se esse é o melhor caminho, acredito que sim. Você já deveria pensar em desenvolver um EA que tivesse sim essa possibilidade de encerramento das operações antes do final do pregão.
Abraços,
Malacarne
Malacarne.
Obrigado pela atenção.
Mas de fato a dúvida era bem trivial... rs...
Para quem está começando e está em dúvida de como implementar, recomendo a leitura desses 2 artigos:
https://www.mql5.com/pt/articles/599
https://www.mql5.com/pt/articles/211
Abs,
Otávio
Olá otaviokc ,
É bastante comum o desenvolvimento de robôs com travas de horário. Se a pergunta foi se esse é o melhor caminho, acredito que sim. Você já deveria pensar em desenvolver um EA que tivesse sim essa possibilidade de encerramento das operações antes do final do pregão.
Abraços,
Malacarne
Olá Malacarne,
Acho este tema bem importante, porque em dias de pregão com meio período, nos backtests as posições passam para o dia seguinte, e em contas reais seriam liquidadas pelo robô da corretora (contas daytrade), o que sairia fora de qualquer estratégia programada.
Fiz alguns testes com "SymbolInfoSessionTrade" e "SymbolInfoSessionQuote" , retorna "true" mas os resultados não são corretos, retorna: Início "00:00" Fim "23:59"
datetime startSession,closeSession; string commStr; MqlDateTime today; TimeToStruct(TimeCurrent(),today); if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)today.day_of_week,0,startSession,closeSession)) commStr = "Trade:\nInício: "+TimeToString(startSession,TIME_MINUTES)+"\nFim: "+TimeToString(closeSession-1,TIME_MINUTES); if(SymbolInfoSessionQuote(_Symbol,(ENUM_DAY_OF_WEEK)today.day_of_week,0,startSession,closeSession)) commStr += "\nQuote:\nInício: "+TimeToString(startSession,TIME_MINUTES)+"\nFim: "+TimeToString(closeSession-1,TIME_MINUTES); Comment(commStr);
Para backtest creio que um simples copyrates ou copytime seria suficiente para prever a ausência de candles futuros.
O maior problema que vejo é na operação real, talvez um "WebRequest" para algum servidor sincronizado com a bmfbovespa ou até mesmo direto para o servidor da bmfbovespa para saber exatamente o horário de abertura e do call de fechamento, mas parece uma solução meio complicada...
Acho que uma solução para está questão seria fundamental para robôs MT5 que operam na bmfbovespa.
Abraço
Fernando
Desenvolvi um controlador de horários para Day Trade. Espero que sirva.
Substitua ExpMagicNumber pelo seu MagicNumber e myExpert pelo objeto Expert instanciado no seu Advisor.
A sua classe Expert (arquivo Expert.mqh) precisa de uma pequena alteração do método CloseAll() : ele precisa ser modificado para Public (por default ele é Protect).
Mauricio
//+------------------------------------------------------------------+ //| DayTrade.mq5 | //| Mauricio | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Mauricio" #property link "https://www.mql5.com" #property version "1.00" ulong ExpMagicNumber = 0; sinput string Coment="- - - - - - - - - - - - - - - - - - - - - - - - - - - -";// --- TRADING TIME --- input string myStartTime = "09:00"; // Time to start operations (hh:mm) input string myCloseTime = "17:40"; // Time to finish all positions (hh:mm) input string myLastOperation = "16:00"; // Time to last operation open (hh:mm) //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } // Verify working time // input: false = check start time / true = check last time to open position // return: 0: not working / 1: Working / -1: Close all positions int checkWorkTime(bool bEnter) { MqlDateTime Time; TimeCurrent(Time); int state = 0; string startTime[], closeTime[], lastOpen[]; StringSplit(myStartTime,':',startTime); StringSplit(myCloseTime,':',closeTime); StringSplit(myLastOperation,':',lastOpen); if ( (((Time.hour == StringToInteger(startTime[0])) && (Time.min >= StringToInteger(startTime[1]))) || (Time.hour > StringToInteger(startTime[0]))) && (((Time.hour == StringToInteger(closeTime[0])) && (Time.min <= StringToInteger(closeTime[1]))) || (Time.hour < StringToInteger(closeTime[0]))) && ((!bEnter) || (((Time.hour == StringToInteger(lastOpen[0])) && (Time.min <= StringToInteger(lastOpen[1]))) || (Time.hour < StringToInteger(lastOpen[0])))) ) { state = 1; } // Don't run on weekends if ((state) && ((Time.day_of_week==0)||(Time.day_of_week==6))) { state = 0;} // Check time for closing positions if (((Time.hour == StringToInteger(closeTime[0])) && (Time.min > StringToInteger(closeTime[1]))) || (Time.hour > StringToInteger(closeTime[0])) ) { state = -1; } return state; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { int work = checkWorkTime(false); static bool waitForClose = false; if ( work > 0) { //--- new tick handler myExpert.OnTick(); } else { if (work < 0) { if ((!waitForClose) && (PositionSelect(_Symbol))) { int openTrades = (int)PositionGetDouble(POSITION_VOLUME); if (openTrades > 0) { myExpert.CloseAll(openTrades); waitForClose = true; } } else { waitForClose = false; } } } } //+------------------------------------------------------------------+
Desenvolvi um controlador de horários para Day Trade. Espero que sirva.
Substitua ExpMagicNumber pelo seu MagicNumber e myExpert pelo objeto Expert instanciado no seu Advisor.
A sua classe Expert (arquivo Expert.mqh) precisa de uma pequena alteração do método CloseAll() : ele precisa ser modificado para Public (por default ele é Protect).
Mauricio
Maurício, fiz uma adaptação do seu algoritmo dentro do próprio programa do EA, mais ou menos assim: Se o horário atual estiver dentro do intervalo de daytrade, as operações de compra e venda são realizadas, se no horário final houver posições abertas, ele fecha as posições.
Porém reconheço que a sua idéia de instanciar o robô como uma classe na função OnTick é mais interessante, porém não sei como fazer para tornar o meu EA uma classe, poderias me dar uma dica?
Valeu

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá pessoal boa noite,
Eu estava testando um robo em backtest e percebi que o teste estava considerando a virada do dia posicionado. Como faço para garantir que as posições serão encerradas 10 minutos antes do final do pregão?
Desde ja obrigado,
Junior