I have a question.
Is there any elegant way of how to resolve a current history folder name, in which the .hst files are accessed if no internet connection is open?
Since there is another bug with FileOpenHistory() (I mentioned earlier in the forum), I have to use the Windows API for updating offline charts.
This ? https://www.mql5.com/en/forum/142700/page4#760662
Are you adding the dots for your offline chart ? why not add something other than the dots ?
Even the regular history files have double dots in their names with that particular broker. If I alter the symbol name I cannot trade from the chart.
Even the regular history files have double dots in their names with that particular broker. If I alter the symbol name I cannot trade from the chart.
Ah I see. You can still create your offline charts with a name of your choice, for example: EURUSDoff . . . then you just have to remove the "off" and add in the dots when you place your trade . . .
A solution for reference. First of all, we can use FileOpenHistory() to make a file in the current history folder. Then find that file with FindFirstFileW and FindNextFileW, so that you can get the actual current history folder.
#import "kernel32.dll" int FindFirstFileW(string Path,ushort &Answer[]); bool FindNextFileW(int handle,ushort &Answer[]); bool FindClose(int handle); int DeleteFileW(string file); #import #define FILE_ATTRIBUTE_DIRECTORY 16 void start() { string name=GetHistoryDir(); printf(name); } string GetHistoryDir() { string markFile="tofindhst"; int h=FileOpenHistory(markFile,FILE_BIN|FILE_WRITE|FILE_READ|FILE_SHARE_WRITE|FILE_SHARE_READ); FileClose(h); ushort Buffer[300]; ArrayInitialize(Buffer,0); string HistoryPath=TerminalPath()+"\\history"; int handle=FindFirstFileW(HistoryPath+"\\*.*",Buffer); bool isFound=false; string dirName=""; if(handle>0) { do{ int filesize=(int)Buffer[16]+(int)Buffer[17]*USHORT_MAX; if(filesize==0) { dirName=ShortArrayToString(Buffer,22,152); if(dirName!="." && dirName!="..") { isFound=FindFilesInSubDir_(HistoryPath+"\\"+dirName,markFile); if(isFound==true) break; } } ArrayInitialize(Buffer,0); } while(FindNextFileW(handle,Buffer)); FindClose(handle); } return dirName; } bool FindFilesInSubDir_(string subDirPath, string markFilename) { bool is_Found=false; ushort Result[300]; ArrayInitialize(Result,0); int hand_sub=FindFirstFileW(subDirPath+"\\*hst",Result); if(hand_sub>0) { do{ string fileName=ShortArrayToString(Result,22,152); if(fileName==markFilename) is_Found=true; ArrayInitialize(Result,0); } while(FindNextFileW(hand_sub,Result)); } FindClose(hand_sub); if(is_Found==true) { DeleteFileW(subDirPath+"\\"+markFilename); } return is_Found; }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I have a question.
Is there any elegant way of how to resolve a current history folder name, in which the .hst files are accessed if no internet connection is open?
Since there is another bug with FileOpenHistory() (I mentioned earlier in the forum), I have to use the Windows API for updating offline charts.
Under normal condition, i.e. when connected to a trading server, there is a function AccountServer() that returns the name of the folder (at least I did not encounter any exception).
On the other hand, when starting without internet connection (with auto login), the function AccountServer() returns an empty string, though the hst data are still correctly accessed by the terminal itself and the FileOpenHistory() function.
I use a workaround, traversing content of the history folder, but I consider it tricky and like to find some other way. Any suggestion appreciated.