oslib/scr/exemplos/ex-CalendarEvent.mq5

102 lines
6.5 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:18 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| ex-HistorySelectOrders.mq5 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
class CCalendar{
private:
MqlCalendarValue m_values[]; // array de eventos no calendario.
ulong m_chage_id ; // id da ultima publicacao no banco de dados de evento que foi processada.
protected:
public:
void printEventosPorMoeda( string moeda, int qtd_eventos_to_print );
void printPaises();
bool initOnPublication() ; // inicializa o ouvinte de novas publicacoes no calendario de eventos;
bool dispararOnPublication(); // processa nova publicacao no calendario.
void onPublication(const MqlCalendarValue& val[]);
};
bool CCalendar::initOnPublication(){
m_chage_id = 0;
CalendarValueLast(m_chage_id,m_values);
int erro = GetLastError();
if( erro == 0 ) return true;
Print(":-( ", __FUNCTION__, ": Erro inicializando ouvinte do calendario de eventos:", erro);
return false;
}
bool CCalendar::dispararOnPublication(){
if( CalendarValueLast(m_chage_id,m_values)<0 ){
int erro = GetLastError();
if( erro == 0 ) return true; // sem erros e sem novas publicacoes.
Print(":-( ", __FUNCTION__, ": Erro disparando evento do calendario de eventos:", erro);
return false;
}
onPublication(m_values); // disparando evento de publicacao no calendario.
return true;
}
void CCalendar::onPublication(const MqlCalendarValue& val[]){
ArrayPrint(val);
}
void CCalendar::printEventosPorMoeda( string moeda, int qtd_eventos_to_print ){
//--- declare um array para receber eventos do Calend<EFBFBD>rio Econ<EFBFBD>mico
MqlCalendarEvent events[];
//--- obtenha eventos para a moeda informada
int count = CalendarEventByCurrency(moeda,events);
Print("Qtd eventos para a moeda ",moeda, " = ", count);
//--- por exemplo, 10 eventos s<EFBFBD>o suficientes para n<EFBFBD>s
if(count>qtd_eventos_to_print) ArrayResize(events,qtd_eventos_to_print);
//--- imprima eventos no Di<EFBFBD>rio
ArrayPrint(events);
}
void CCalendar::printPaises() {
//--- obtenha a lista de pa<EFBFBD>ses do Calendario Economico
MqlCalendarCountry countries[];
int count=CalendarCountries(countries);
//--- quantidad de paises retornados pela funcao...
Print("Qtd paises = ", count);
//--- imprima eventos no Di<EFBFBD>rio
ArrayPrint(countries);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart() {
CCalendar ce;
ce.printEventosPorMoeda("BRL",55);
ce.printPaises();
ce.initOnPublication();
while(true){
ce.dispararOnPublication();
Sleep(5000);
}
}