//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright 2025, Leo. | //| https://www.mql5.com/es/users/nique_372/news | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, Leo." #property link "https://www.mql5.com/es/users/nique_372/news" #property version "1.00" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "..\\..\\Secrets.mqh" #include #include #include "..\\..\\..\\AiFeatureEval\\Src\\Correlations.mqh" #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { CCorrelations corr; corr.CorrelationFuction(F_CORRELATION_KENDALL); const datetime d = D'2018.01.01 00:00:00'; const datetime h = D'2025.06.01 00:00:00'; //--- #ifdef TSN_FASTNL_FUNC_CTS TSN_FASTNL_FUNC_CTS(THE_BOT_PLACE_USER_ID); #else CiNewsLeo_CalendarInit(THE_BOT_PLACE_USER_ID); #endif // TSN_MCPSERVER_FUNC_CTS //--- TSN::ICalendarByLeo* calendar = CiNewsLeo_CreateEconomicCalendar(); //--- string _what = NULL; TSNSTD_TRY_INI { TSNSTD_TRY_EF(calendar.AddCountryByImportances(COUNTRY_ID_USA, "High|Medium|Low"), true, CiNewsLeo_FormatTraceFirst(_what)) TSNSTD_TRY_EF(calendar.SetCalendar(d, h), true, CiNewsLeo_FormatTraceFirst(_what)) TSNSTD_TRY_EF(calendar.GetDataPredifinied(true), true, CiNewsLeo_FormatTraceFirst(_what)) } TSNSTD_TRY_END //--- if(_what != NULL) { FastLog(FUNCION_ACTUAL, FATAL_ERROR_TEXT, _what); delete calendar; return; } //--- TSN::CEconomicEvents container[]; ArrayResize(container, calendar.ContainerGetEventsSizeByCountryId(COUNTRY_ID_USA)); calendar.ContainerGetDataByCountryId(COUNTRY_ID_USA, container); const ulong target = TSN::CBL_CountryEventToIdFinal("US", "consumer-price-index-mm"); const int total = ArraySize(container); int idx_target = 0; datetime kill_time = wrong_datetime; const int data_size = 88; bool is = false; double output[]; const datetime curr_time = TimeCurrent(); //#define S_LOGS 1 //--- if(is) { int start_idx = TSN::GetIdxByEventTime(container, target, d, MAYOR_A_TARGET_TIME); for(int i = 0; i < total; i++) { if(container[i].Porcentage_Array[0].actual_value == ERROR_VARIABLE) continue; if(container[i].id == target) { double out_arr[]; TSN::AumentarArrayEventos(container[i].Porcentage_Array, start_idx, out_arr); ArrayPrint(out_arr); double arr[]; kill_time = container[i].Porcentage_Array[0].time; ObtenerLosUltimosValoresArr(data_size, 0, out_arr, output); Print("El kill time: ", kill_time); printf("tamaño del output: %I64u | data disponible = %d", output.Size(), ArraySize(container[i].Porcentage_Array)); break; } } } else { for(int i = 0; i < total; i++) { if(container[i].Porcentage_Array[0].actual_value == ERROR_VARIABLE) { if(container[i].id == target) { PrintFormat("ERROR CRITICO | EL EVENTO %s tiene un valor actul invalido", target); ArrayPrint(container[i].Porcentage_Array, 4, " | "); return; } continue; } if(container[i].id == target) { const int t = ArraySize(container[i].Porcentage_Array); kill_time = container[i].Porcentage_Array[t - 1].time; TSN::EconomicEventData evets[]; TSN::ObtenerLosUltimosValoresTester(data_size, container[i].Porcentage_Array, evets, curr_time); ArrayResize(output, evets.Size()); for(int i = 0; i < ArraySize(output); i++) output[i] = evets[i].actual_value; Print("El kill time: ", kill_time); printf("tamaño del output: %I64u | data disponible = %d", output.Size(), t); break; } } } //--- Print("Ultimo id = ", target); CorrelationAr array[]; for(int i = 0; i < total; i++) { const int t = ArraySize(container[i].Porcentage_Array); if(t < data_size) { PrintFormat("Omitiendo el evento %s ya que el tamaño del array = %d, es menor al data size", container[i].name, ArraySize(container[i].Porcentage_Array)); continue; } if(container[i].Porcentage_Array[0].actual_value == ERROR_VARIABLE || container[i].Porcentage_Array[t - 1].time == kill_time) continue; if(container[i].id == target || container[i].id == 840050014) continue; TSN::EconomicEventData arr[]; /* CPI CPI TIME CORE-PCE CORE-PCE */ /* NFP NFP TIME CPI */ #ifdef S_LOGS Print("El tiempo 0: ", container[i].Porcentage_Array[t - 1].time); #endif // Si el timepo del evento es menor al actual evento entonces este predice a->b // De lo contrario si es mayor el acutla.. entonces usamos lo normal.. solo int a_tomar = container[i].Porcentage_Array[t - 1].time < kill_time ? data_size : data_size + 1; TSN::ObtenerLosUltimosValoresTester(a_tomar, container[i].Porcentage_Array, arr, curr_time); double values[]; int end = a_tomar == data_size ? data_size : a_tomar - 1; //Print("A tomar: " , a_tomar, " Data size: " , data_size, " End: " , end); #ifdef S_LOGS if(start == 0) Print("EMpezando por 0 todo bien"); else Print("Emepzando por 1 dadoq ue el valor del tiempo es despues de: ", target); #endif ArrayResize(values, end); //Print("Evento: ", container[i].name, " Tiempo actual: ", container[i].Porcentage_Array[t - 1].time, " Real: ", // arr[end - 1].time); for(int x = 0; x < end; x++) { values[x] = arr[x].actual_value; } if((int)values.Size() < data_size) { PrintFormat("El tamaño de data de = %s no coincide | data inicial = %d >> data actual = %u", container[i].name , t, values.Size()); continue; } //--- CorrelationAr new_cor; ArrayCopy(new_cor.values, values); new_cor.cols_name = container[i].event_code; //--- ArrayResize(array, array.Size() + 1); array[array.Size() - 1] = new_cor; } //--- corr.Set(array, output); corr.Run(); int indexces_cols[]; corr.GetBestCorrelations(indexces_cols, 10); corr.PlotAnalisis(string(target), "DataNoticias\\", 1300, 500, clrBlack, indexces_cols, true, 0, 10); //--- delete calendar; } //+------------------------------------------------------------------+ /* 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.3122234594308072 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: ism-prices-paid 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.32168707577253436 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: import-price-index-ex-petroleum-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.3321596619878823 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: producer-price-index-ex-food-energy-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.33330999243707465 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: pce-price-index-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: -0.33355632836142485 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: markit-services-pmi 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.3388373935641573 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: factory-orders-ex-transportation-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.3477929182640344 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: export-price-index-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.37653834395988955 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: ism-non-manufacturing-prices 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.3779030758088527 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: import-price-index-mm 2025.09.17 07:20:20.968 Test (EURUSD,M1) Correlation: 0.54645080817985 2025.09.17 07:20:20.968 Test (EURUSD,M1) Col name: producer-price-index-mm */ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+