SaveTicks_v1

Author: Alexey Volchanskiy
Miscellaneous
It writes information to fileUses files from the file systemIt issuies visual alerts to the screenIt reads information from a file
0 Views
0 Downloads
0 Favorites
SaveTicks_v1
ÿþ//+------------------------------------------------------------------+

//|                                                    SaveTicks.mq5 |

//|                                               Alexey Volchanskiy |

//|                                            http://mql.gnomio.com |

//+------------------------------------------------------------------+

#property copyright "Alexey Volchanskiy"

#property link      "http://mql.gnomio.com"

#property version   "1.02"

#property description "SaveTicks save tick data for multiple symbols in files"

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

enum ESelectSymbols

  {

   EAllSymbols,        //All symbols

   EMarketWatchSymbols,//MarketWatch symbols

   ELoadFromFile       //Load list of symbols from file

  };

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

enum EFormatRecording

  {

   ECsv,   //CSV

   EBin,   //Binary

   EAll    //CSV+Binary

  };

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

enum EFormatTime

  {

   EServerTime,    //Server time

   ELocalTime      //Local windows time

  };



input int               TimerMsInterval = 500;                      //Recording interval 

input ESelectSymbols    SelectSymbols   = EMarketWatchSymbols;      //The symbols chosen as...

input string            SymbolsFileName = "InputSymbolList.txt";    //Name of file with all symbol names  

input EFormatRecording  FormatRecording = ECsv;                     //Format recording

input EFormatTime       FormatTime      = EServerTime;              //Time format



string SymbolList[];

int FileSymbolCsv[];

int FileSymbolBin[];

int FileSymbolList;

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

   if(CreateSymbolList()==-1)

      ExpertRemove();

   EventSetMillisecondTimer(TimerMsInterval);

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

   EventKillTimer();

   for(int n=0; n<ArraySize(SymbolList); n++)

     {

      FileClose(FileSymbolCsv[n]);

      FileClose(FileSymbolBin[n]);

     }

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnTimer()

  {

   static string dt;

   static MqlTick mt;



   if(FormatTime==ELocalTime)

      dt=TimeToString(TimeLocal(),TIME_DATE|TIME_MINUTES|TIME_SECONDS);

   else

      dt=TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS);

   for(int n=0; n<ArraySize(SymbolList); n++)

     {

      if(!SymbolInfoTick(SymbolList[n],mt))

         return;

      if(FormatRecording==ECsv || FormatRecording==EAll)

        {

         if(FileSymbolCsv[n]==INVALID_HANDLE)

            return;

         FileWrite(FileSymbolCsv[n],dt,mt.bid,mt.ask);

        }

      if(FormatRecording==EBin || FormatRecording==EAll)

        {

         if(FileSymbolBin[n]==INVALID_HANDLE)

            return;

         if(FormatTime==ELocalTime)

           {

            FileWriteLong(FileSymbolBin[n],TimeLocal());

            FileWriteStruct(FileSymbolBin[n],mt);

           }

         else

           {

            FileWriteLong(FileSymbolBin[n],TimeCurrent());

            FileWriteStruct(FileSymbolBin[n],mt);

           }

        }

     }



  }



int CreateSymbolList()

  {

   int stotal=0;

   if(SelectSymbols==ELoadFromFile)

      stotal=LoadSymbolList(SymbolsFileName);

   else

     {

      stotal=SymbolsTotal((bool)SelectSymbols);

      ArrayResize(SymbolList,stotal);

     }

   ArrayResize(FileSymbolCsv,stotal);

   ArrayResize(FileSymbolBin,stotal);

   for(int n=0; n<stotal; n++)

     {

      if(SelectSymbols != ELoadFromFile)

         SymbolList[n] = SymbolName(n, (bool)SelectSymbols);

      string fname=SymbolList[n]+"_"+MQLInfoString(MQL_PROGRAM_NAME);

      if(FormatRecording==ECsv || FormatRecording==EAll)

        {

         FileSymbolCsv[n]=FileOpen(fname+".csv",FILE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_CSV|FILE_ANSI,',');

         if(FileSymbolCsv[n]==INVALID_HANDLE)

           {

            Alert("Can't open file "+fname,"Error of opening file");

            return -1;

           }

         FileSeek(FileSymbolCsv[n],0,SEEK_END);

        }

      if(FormatRecording==EBin || FormatRecording==EAll)

        {

         FileSymbolBin[n]=FileOpen(fname+".bin",FILE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_BIN);

         if(FileSymbolBin[n]==INVALID_HANDLE)

           {

            Alert("Can't open file "+fname,"Error of opening file");

            return -1;

           }

         FileSeek(FileSymbolBin[n],0,SEEK_END);

        }

     }

   return SaveSymbolList();

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int SaveSymbolList()

  {

   string fname="AllSymbols_"+MQLInfoString(MQL_PROGRAM_NAME)+".txt";

   int file= FileOpen(fname,FILE_WRITE|FILE_TXT);

   if(file == INVALID_HANDLE)

     {

      Alert("Can't open file "+fname,"Error of opening file");

      return -1;

     }

   FileWrite(file,IntegerToString(ArraySize(SymbolList)));

   for(int n=0; n<ArraySize(SymbolList); n++)

      FileWrite(file,SymbolList[n]);

   FileClose(file);

   return ArraySize(SymbolList);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int LoadSymbolList(string fname)

  {

   int file=-1;

   file=FileOpen(fname,FILE_READ|FILE_TXT);

   if(file==INVALID_HANDLE)

     {

      Alert("Can't open file "+fname);

      return -1;

     }

   int size=(int)StringToInteger(FileReadString(file));

   Print("size=",size);

   if(size>0)

      ArrayResize(SymbolList,size);

   else

     {

      Alert("First string <size> is incorrect in file "+fname);

      return -1;

     }

   for(int n=0; n<ArraySize(SymbolList); n++)

     {

      SymbolList[n]=FileReadString(file);

      Print(SymbolList[n]);

     }

   FileClose(file);

   return size;

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---