//+------------------------------------------------------------------+ //| 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 //+------------------------------------------------------------------+ #include //####################################################################### //functions para horarios Bovespa # //####################################################################### class WinFutHorarioBovespaLibs : public CObject { public: WinFutHorarioBovespaLibs(void); ~WinFutHorarioBovespaLibs(void); string getTimestampChart(void); string getTimeDate(string); string getTime(string); bool winLeilaoAberturaBMF(void); bool horarioBovespaBMFFBS(void); bool winLeilaoAberturaBovespa(void); bool winAlmocoBovespa(void); bool winTardeBovespa(void); bool winLeilaoFechamentoBMF(void); bool validaBoletasIntraday(void); bool validaBoletasIntradayForexBRL(void); string getTimestamp(void); string getTimestampBR(void); }; WinFutHorarioBovespaLibs::WinFutHorarioBovespaLibs(void) { } WinFutHorarioBovespaLibs::~WinFutHorarioBovespaLibs(void){ } string WinFutHorarioBovespaLibs::getTimestampChart(void) { return (string) TimeCurrent(); } string WinFutHorarioBovespaLibs::getTimeDate(string data) { datetime time = (datetime) data; return TimeToString(time, TIME_DATE); } string WinFutHorarioBovespaLibs::getTime(string data) { datetime time = (datetime) data; return TimeToString(time, TIME_MINUTES|TIME_SECONDS); } string WinFutHorarioBovespaLibs::getTimestamp(void) { datetime agora = TimeCurrent(); MqlDateTime dt; TimeToStruct(agora, dt); int hora = dt.hour; int minuto = dt.min; int horaMinuto = hora * 100 + minuto; datetime diaAtual = StringToTime( StringFormat( "%02d.%02d.%04d-%02d:%02d:%02d", dt.day, dt.mon, dt.year, dt.hour, dt.min, dt.sec ) ); return (string) diaAtual; } string WinFutHorarioBovespaLibs::getTimestampBR(void) { datetime ts = TimeCurrent(); MqlDateTime dt; TimeToStruct(ts, dt); return (string) //"dbg=>day_of_week=>" + dt.day_of_week + //"dbg=>day_of_year=>" + dt.day_of_year + //"dbg=>mon=>" + dt.mon + dt.day+"/"+dt.mon+"/"+dt.year+ "-"+dt.hour+":"+dt.min+":"+dt.sec; } /************************************************************************ * 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 WinFutHorarioBovespaLibs::winLeilaoAberturaBMF(void) { 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 WinFutHorarioBovespaLibs::horarioBovespaBMFFBS(void) { 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 WinFutHorarioBovespaLibs::winLeilaoAberturaBovespa(void) { 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 WinFutHorarioBovespaLibs::winAlmocoBovespa(void) { 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 WinFutHorarioBovespaLibs::winTardeBovespa(void) { 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 WinFutHorarioBovespaLibs::winLeilaoFechamentoBMF(void) { 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 WinFutHorarioBovespaLibs::validaBoletasIntraday(void) { return ( winLeilaoAberturaBMF() || winLeilaoAberturaBovespa() || winAlmocoBovespa() || winTardeBovespa() || winLeilaoFechamentoBMF() ); } bool WinFutHorarioBovespaLibs::validaBoletasIntradayForexBRL(void) { return horarioBovespaBMFFBS(); } //+------------------------------------------------------------------+ //| Configurações de horários específicos do mercado brasileiro | //+------------------------------------------------------------------+ class HorariosBrasil { public: //--- Horários em formato HHMM static int InicioLeilaoAberturaBMF() { return 900; } static int FimLeilaoAberturaBMF() { return 915; } static int InicioTradingBMF() { return 915; } static int InicioLeilaoAberturaBovespa() { return 1000; } static int FimLeilaoAberturaBovespa() { return 1015; } static int AberturaEUA() { return 1030; } static int InicioAlmoco() { return 1200; } static int FimAlmoco() { return 1400; } static int InicioLeilaoFechamentoBovespa() { return 1645; } static int FechamentoBovespa() { return 1700; } static int FechamentoBMF() { return 1800; } //--- Verificar se é horário de alta volatilidade static bool IsAltaVolatilidade(int horaMinuto) { // 09:15-10:00: Após leilão BMF if(horaMinuto >= 915 && horaMinuto < 1000) return true; // 10:00-11:00: Abertura Bovespa + preparação EUA if(horaMinuto >= 1000 && horaMinuto < 1100) return true; // 17:00-18:00: Fechamento if(horaMinuto >= 1700 && horaMinuto < 1800) return true; return false; } //--- Verificar se é horário de trading permitido static bool IsTradingPermitido(int horaMinuto) { // 09:15-10:00: Após leilão abertura BMF if(horaMinuto >= 915 && horaMinuto < 1000) return true; // 10:15-12:00: Bovespa + preparação EUA if(horaMinuto >= 1015 && horaMinuto < 1200) return true; // 14:00-16:45: Período da tarde if(horaMinuto >= 1400 && horaMinuto < 1645) return true; // 17:00-18:00: Após fechamento Bovespa if(horaMinuto >= 1700 && horaMinuto < 1800) return true; return false; } //--- Verificar se deve evitar trading (horários de leilão) static bool IsHorarioEvitar(int horaMinuto) { // Leilão abertura BMF if(horaMinuto >= 900 && horaMinuto < 915) return true; // Leilão abertura Bovespa if(horaMinuto >= 1000 && horaMinuto < 1015) return true; // Horário de almoço if(horaMinuto >= 1200 && horaMinuto < 1400) return true; // Leilão fechamento Bovespa if(horaMinuto >= 1645 && horaMinuto < 1700) return true; return false; } };