此仓库已于 2026-01-19 存档。您可以查看文件或克隆它,但无法对其状态进行任何更改,例如推送和创建新议题、合并请求或评论。
Fiat147SpazioForex/FiatHeaderLibs/HorarioBovespaLibs.mqh
2026-01-10 07:47:19 -03:00

262 行
23 KiB
MQL5

//+------------------------------------------------------------------+
//| 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();
}
}