| //+------------------------------------------------------------------+
|
| //| 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_<login>.csv yet), imports the one the |
|
| //| old MT4 Vitals 1.0 kept. |
|
| //| 1.0 wrote MQL4\Files\Vitals_FDD_<login>.csv (before that |
|
| //| TradeInfo_FDD_<login>.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
|
| //+------------------------------------------------------------------+
|