//+------------------------------------------------------------------+ //| HorarioBovespaLibs.mqh | //| Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" //+------------------------------------------------------------------+ //| defines | //+------------------------------------------------------------------+ // #define MacrosHello "Hello, world!" // #define MacrosYear 2010 //+------------------------------------------------------------------+ //| DLL imports | //+------------------------------------------------------------------+ // #import "user32.dll" // int SendMessageA(int hWnd,int Msg,int wParam,int lParam); // #import "my_expert.dll" // int ExpertRecalculate(int wParam,int lParam); // #import //+------------------------------------------------------------------+ //| EX5 imports | //+------------------------------------------------------------------+ // #import "stdlib.ex5" // string ErrorDescription(int error_code); // #import //+------------------------------------------------------------------+ //####################################################################### //functions para horarios Bovespa # //####################################################################### string getTimestampChart() { return (string) TimeCurrent(); } string getTimeDate(string data) { datetime time = (datetime) data; return TimeToString(time, TIME_DATE); } string getTime(string data) { datetime time = (datetime) data; return TimeToString(time, TIME_MINUTES|TIME_SECONDS); } /************************************************************************ * 1)leilao abertura BMF * * neste horario eh representado pela abertura de futuros da BMF, * * um bom horario para operar abertura eh das: * * 09:00 ~ 09:25 * * porque as 09:30 sempre tem noticias que podem bater em nosso stop; * *************************************************************************/ bool winLeilaoAberturaBMF() { return (bool) ((getTime(getTimestampChart()) > "09:05:00") && (getTime(getTimestampChart()) < "09:25:00")); } /************************************************************************* * Horario operacao USD/BRL corretora FBS * * * horario especifico de operacao da corretora FBS para o par exotic BRL* * 09:30 ~ 17:00 * **************************************************************************/ bool horarioBovespaBMFFBS() { return (bool) ((getTime(getTimestampChart()) > "09:30:00") && (getTime(getTimestampChart()) < "17:00:00")); } /************************************************************************ * 2)abertura Bovespa * * a abertura do mercado a vista Bovespa eh as 10:00h em ponto porem * * como se trata de acoes, na grande maioria das vezes, algumas delas * * ficam um certo tempo em leilao de abertura entao pelo que agente ja * * observou, o WIN nos primeiros 15m fica as vezes sem direção com * * altissima volatilidade, pode bater no stop desnecessariamente, * * entao melhor horario para operar Bovespa eh depois da abertura * * apos o leilao as: * * 10:15h * *************************************************************************/ bool winLeilaoAberturaBovespa() { return (bool) ((getTime(getTimestampChart()) > "10:15:00") && (getTime(getTimestampChart()) < "11:59:00")); } /************************************************************************* * 3)horario do almoço * * neste horario eh um periodo nulo, por conta que nas bolsas de valores* * os operadores estao em horario de almoço, e tb eh fechamento da * * bolsa da europa, entao geralmente eh um periodo que a volatilidade eh* * baixa, raro os casos de noticias de ultima hora: * * 12:00 ~ 14:00 * **************************************************************************/ bool winAlmocoBovespa() { return (bool) ((getTime(getTimestampChart()) > "12:00:00") && (getTime(getTimestampChart()) < "13:59:00")); } /************************************************************************* * 4)periodo da tarde * * eh o periodo em que volta com um volume de negociacao mais forte e * * pode fazer o mercado ficar mais direcional: * * 14:00 ~ 17:00 * **************************************************************************/ bool winTardeBovespa() { return (bool) ((getTime(getTimestampChart()) > "14:00:00") && (getTime(getTimestampChart()) < "17:00:00")); } /************************************************************************** * 5)leilao fechamento BMF * * neste periodo apos as 17:00h o mercado de balcao Bovespa esta fechado * * é permitido operar o WIN porem precisa estar atento porque o volume * * de negociacao geralmente eh muito baixo, unica vantagem eh q * * geralmente ele obedece a mesma direcao de quando foi fechado o mercado* * Bovespa as 17h: * * 17:00 ~ 18:15 * * * * *obs: * * nesta function precisa ter uma funcionalidade de quando o horario * * passar das 17:55h ele precisa stopar todas as boletas nos status: * * ->em aberto * * ->em execucao * * ->pendentes * ***************************************************************************/ bool winLeilaoFechamentoBMF() { return (bool) ((getTime(getTimestampChart()) > "17:00:00") && (getTime(getTimestampChart()) < "17:55:00")); } /** * primeiro precisamos pegar a data atual do chart * a variavel dataIntraday inicializa NULL * precisamos verificar se a data se hoje eh igual a variavel dataIntraday * se nao for primeiro agente atribui a data chart para a variavel * depois precisamos verificar se existem boletas em aberto sem estar em execucao * se houver cancela todas * agora se houver boletas em execucao agente precisa pesquisar alguma funcao * pra ver se agente consegue fechar ela a mercado; * * se tratando de bovespa agente percebeu/aprendeu que existem mais horarios de corte * por conta de algumas noticias que podem ocorrer no intraday, entao * vamos colocar os horarios que sao disponiveis para negociacao que * devem estar contempladas no nosso codigo: * * 1)abertura BMF * neste horario eh representado pela abertura de futuros da BMF, * um bom horario para operar abertura eh das: * 09:00 ~ 09:25 * porque as 09:30 sempre tem noticias que podem bater em nosso stop; * * 2)abertura Bovespa * a abertura do mercado a vista Bovespa eh as 10:00h em ponto porem * como se trata de acoes, na grande maioria das vezes, algumas delas ficam * um certo tempo em leilao de abertura entao pelo que agente ja observou, * o WIN nos primeiros 15m fica as vezes sem direção com altissima volatilidade, * pode bater no stop desnecessariamente, entao melhor horario para operar Bovespa eh depois * da abertura apos o leilao as: * 10:15h * * 3)horario do almoço * neste horario eh um periodo nulo, por conta que nas bolsas de valores os operadores * estao em horario de almoço, e tb eh fechamento da bolsa da europa, entao geralmente * eh um periodo que a volatilidade eh baixa, raro os casos de noticias de ultima hora: * 12:00 ~ 14:00 * * 4)periodo da tarde * eh o periodo em que volta com um volume de negociacao mais forte e pode fazer o mercado * ficar mais direcional: * 14:00 ~ 17:00 * * 5)leilao fechamento BMF * neste periodo apos as 17:00h o mercado de balcao Bovespa esta fechado, é permitido * operar o WIN porem precisa estar atento porque o volume de negociacao * geralmente eh muito baixo, unica vantagem eh q geralmente ele obedece a mesma * direcao de quando foi fechado o mercado Bovespa as 17h: * 17:00 ~ 18:15 * */ bool validaBoletasIntraday() { return ( winLeilaoAberturaBMF() || winLeilaoAberturaBovespa() || winAlmocoBovespa() || winTardeBovespa() || winLeilaoFechamentoBMF() ); } bool validaBoletasIntradayForexBRL() { return horarioBovespaBMFFBS(); } /********************* *function deprecated * **********************/ void validaBoletasIntradayDeprecated() { Alert("\n get data timestamp string => " + getTimeDate(getTimestampChart())); //se a variavel esta diferente significa ou q esta nula //ou o dia do chart virou mercado fechou if(dataIntraday != getTimeDate(getTimestampChart())) { dataIntraday = getTimeDate(getTimestampChart()); //agora precisamos ver como fecha boletas em aberto //depois ver como fechar a mercado boletas em execucao //trade.SellStop(tamanhoLote, entrada, Symbol(), maxAtual, takeProfit, 0, 0, NULL); //sera q este fecha boleta? //parametro eh o TicketID trade.PositionClose(1234); //modifica a boleta //parametros: //symbol, double sl, double tp //trade.PositionModify(); //testar resultados abaixo trade.CheckResultBalance(); trade.CheckResultComment(); trade.CheckResultEquity(); trade.CheckResultMargin(); trade.CheckResultMarginFree(); trade.CheckResultMarginLevel(); trade.CheckResultProfit(); trade.RequestVolume(); trade.RequestActionDescription(); trade.RequestComment(); trade.RequestDeviation(); trade.RequestExpiration(); trade.RequestMagic(); trade.RequestOrder(); trade.RequestPosition(); trade.RequestPositionBy(); trade.RequestPrice(); trade.RequestSL(); trade.RequestStopLimit(); trade.RequestSymbol(); trade.RequestTP(); trade.RequestTypeDescription(); trade.RequestTypeFillingDescription(); trade.RequestTypeTimeDescription(); trade.RequestVolume(); trade.ResultAsk(); trade.ResultBid(); trade.ResultComment(); trade.ResultDeal(); trade.ResultOrder(); trade.ResultPrice(); trade.ResultRetcode(); trade.ResultRetcodeDescription(); trade.ResultRetcodeExternal(); trade.ResultVolume(); } }