101 lines
6.5 KiB
MQL5
101 lines
6.5 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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ário Econô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ão suficientes para nós
|
|
if(count>qtd_eventos_to_print) ArrayResize(events,qtd_eventos_to_print);
|
|
|
|
//--- imprima eventos no Diário
|
|
ArrayPrint(events);
|
|
}
|
|
|
|
void CCalendar::printPaises() {
|
|
|
|
//--- obtenha a lista de países do Calendario Economico
|
|
MqlCalendarCountry countries[];
|
|
int count=CalendarCountries(countries);
|
|
|
|
//--- quantidad de paises retornados pela funcao...
|
|
Print("Qtd paises = ", count);
|
|
|
|
//--- imprima eventos no Diá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);
|
|
}
|
|
|
|
}
|