//+------------------------------------------------------------------+ //| VtLegacy.mqh | //| Copyright 2026, Allan Niñal | //| https://www.allanninal.dev/mql5 | //+------------------------------------------------------------------+ //| MT4 only: opens this account's floating-drawdown journal and, the| //| first time (no Vitals\FDD_.csv yet), imports the one the | //| old MT4 Vitals 1.0 kept. | //| 1.0 wrote MQL4\Files\Vitals_FDD_.csv (before that | //| TradeInfo_FDD_.csv): a UTF-16 CSV, FileWrite() lines | //| "day,money,percent" - day = server seconds / 86400 (its | //| DayNumber(TimeCurrent())), money to 2 decimals, percent to 4, | //| several lines per day possible (appends; the deepest wins). | //| That is exactly this journal's format and day number, so each | //| line maps one to one (positive junk is clamped to 0, as 1.0 | //| did); the old files are only read, never changed. | //+------------------------------------------------------------------+ // SPDX-License-Identifier: LicenseRef-PolyForm-Noncommercial-1.0.0 (see LICENSE) #ifndef VTLEGACY_MQH #define VTLEGACY_MQH #include "VtJournal.mqh" int VtImportLegacy(CVtJournal &j,const long login) { string names[2]; names[0]="Vitals_FDD_"+IntegerToString(login)+".csv"; names[1]="TradeInfo_FDD_"+IntegerToString(login)+".csv"; for(int k=0; k<2; k++) { if(!FileIsExist(names[k])) continue; int h=FileOpen(names[k],FILE_READ|FILE_CSV|FILE_SHARE_READ|FILE_SHARE_WRITE,','); if(h==INVALID_HANDLE) continue; int got=0; while(!FileIsEnding(h)) { long d=(long)FileReadNumber(h); double m=FileReadNumber(h); double pc=FileReadNumber(h); if(d<=0) continue; if(j.Put(d,NormalizeDouble(MathMin(m,0.0),2),NormalizeDouble(MathMin(pc,0.0),4))) got++; } FileClose(h); if(got>0) return(got); } return(0); } void VtJournalOpenAt(CVtJournal &j,const long login) { FolderCreate("Vitals"); // MQL4\\Files\\Vitals (journal, caches, exports) string path="Vitals\\FDD_"+IntegerToString(login)+".csv"; bool fresh=!FileIsExist(path); j.Init(path,GetTickCount()); if(fresh && j.n==0 && login>0) { int got=VtImportLegacy(j,login); if(got>0) { j.dirty=true; j.Flush(true,GetTickCount()); PrintFormat("Vitals: imported %d journal days from the Vitals 1.0 file",got); } } } #endif //+------------------------------------------------------------------+