//+------------------------------------------------------------------+ //| NewsTelegram.mqh | //| Copyright 2026, Leo. | //| https://www.mql5.com/es/users/nique_372/news | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Leo." #property link "https://www.mql5.com/es/users/nique_372/news" #property strict //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // Inlcuimos el manejo de event codes #include // tambien el predict event #include // bueno malo tambien #include // main api aqui #include "..\\..\\Src\\MainAPI.mqh" // emojis #include "..\\..\\Src\\Emojis\\Emojis.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CTelegramsNews : public TSN::CNewsEventsHook { private: TSN::CTelegramAPI m_bot; ulong m_country_id_a_cambiar; //--- string m_symbol; //--- string PrediccionToStr(double pred); public: CTelegramsNews(); ~CTelegramsNews(); //--- inline TSN::CTelegramAPI* GetBotPtr() { return &m_bot; } void OnNews(const TSN::EconomicEventData& events[], const int res, const datetime curr_time) override final; bool Init(const string& symbol); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CTelegramsNews::CTelegramsNews(void) : m_country_id_a_cambiar(0) { m_news_hooks_flags = NEWSBYLEO_HOOK_ON_NEWS; } //+------------------------------------------------------------------+ CTelegramsNews::~CTelegramsNews() { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CTelegramsNews::Init(const string& symbol) { m_symbol = symbol; ulong temp; return TSN::GetCountryIdsBySymbol(m_symbol, m_country_id_a_cambiar, temp); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string CTelegramsNews::PrediccionToStr(double pred) { if(pred == 10.0) { return "subira"; } else if(pred == -10.0) { return "bajara"; } else { return "no definido"; } } //+------------------------------------------------------------------+ void CTelegramsNews::OnNews(const TSN::EconomicEventData &events[], const int res, const datetime curr_time) { //--- static const string ImportanciaAEmoji[4] = { EMOJI_GRAY_CIRCLE, EMOJI_GRAY_CIRCLE, EMOJI_YELLOW_CIRCLE, EMOJI_RED_CIRCLE}; //--- const datetime time = events[0].time; string str; StringReserve(str, 1024); //--- str += StringFormat("%s Nuevas noticias programadas para las: %s\n", EMOJI_CALENDAR, TimeToString(time)); str += "| Event | Importance | Forecast value | Prev value | Prediction |"; str += "|:-----:|:----------:|:--------------:|:----------:|:----------:|"; //--- const int t = ArraySize(events); for(int i = 0; i < t; i++) { TSN::EconomicEventData evento = events[i]; static MqlCalendarEvent desc; const uint meta = events[i].extra_meta; m_calendar.GetEventDesc(NEWSBYLEO_EXTRAMETA_GET_COUNTRY_IDX(meta), NEWSBYLEO_EXTRAMETA_GET_EVENT_IDX(meta), desc); //--- const bool es_bueno_quesuba = TSN::CEnumRegFnlids::GetVal(desc.id) != NEWSBYLEO_BUENOMALO_IDX_MALO; const string mul = MultiplicadorCaledarioToString(desc.multiplier); const int idx_imp = (int)desc.importance; const string for_value = evento.forecast_value == ERROR_VARIABLE ? "Not Defined" : DoubleToString(evento.forecast_value, 2); const string prev_value = evento.prev_value == ERROR_VARIABLE ? "Not Defined" : DoubleToString(evento.prev_value, 2); const string prediccion = PrediccionToStr(TSN::TeoricMovementOfEventUseForecast(evento, desc.country_id, m_country_id_a_cambiar, true)); //--- str += StringFormat("| %s | %s | %s %s | %s %s | %s |\n", desc.name, ImportanciaAEmoji[idx_imp], mul, for_value, mul, prev_value, m_symbol, prediccion ); } //--- m_bot.SendRichMessageMarkdown(str, TLGBYLEO_BOOL_FALSE, TLGBYLEO_BOOL_FALSE); } //+------------------------------------------------------------------+