Script_OHLCV_to_CSV

Author:
Price Data Components
Series array that contains open time of each barSeries array that contains open prices of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains close prices for each barSeries array that contains tick volumes of each bar
Miscellaneous
Uses files from the file systemIt writes information to fileIt issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Script_OHLCV_to_CSV
//+------------------------------------------------------------------+
//|                                             Script_OHLCV_CSV.mq5 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "shmtrading3000@gmail.com"
#property version   "1.01"
#property description "This script saves the available OHLCV data from the chart to a CSV file inside '<User>\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files'.\nMake sure 'Max bars in chart' is set to unlimited in 'Tools>Options>Chart'."

#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int digits = Digits();
   double tick_size = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE);
   int bars = iBars(Symbol(), PERIOD_CURRENT);
   string output_file_name = (string) Symbol() +
                             "-" +
                             (string) Period() +
                             "-" +
                             TimeToString(iTime(Symbol(), PERIOD_CURRENT, bars - 1), TIME_DATE) +
                             "-" +
                             TimeToString(iTime(Symbol(), PERIOD_CURRENT, 0), TIME_DATE) +
                             ".csv";

   ResetLastError();
   int handle_write = FileOpen(output_file_name, FILE_WRITE | FILE_BIN | FILE_COMMON);
   if(handle_write == INVALID_HANDLE)
     {
      int error = GetLastError();
      Print("Error " + (string) error + ", Failed to write the results to csv.");
      return;
     }

//--- Write the header row to csv
   FileWriteString(handle_write, "<DATE>" + ",");
   FileWriteString(handle_write, "<TIME>" + ",");
   FileWriteString(handle_write, "<OPEN>" + ",");
   FileWriteString(handle_write, "<High>" + ",");
   FileWriteString(handle_write, "<LOW>" + ",");
   FileWriteString(handle_write, "<CLOSE>" + ",");
   FileWriteString(handle_write, "<TICKVOLUME>" + ",");
   FileWriteString(handle_write, "<VOL>" + ",");
   FileWriteString(handle_write, "<SPREAD>");
   FileWriteString(handle_write, "\r\n");

   for(int i = bars - 1; i >= 0; i--)
     {
      //--- Get the data for the current bar
      datetime _time = iTime(Symbol(), PERIOD_CURRENT, i);
      string date = TimeToString(_time, TIME_DATE);
      string time = TimeToString(_time, TIME_MINUTES);
      string open = PriceToString(iOpen(Symbol(), PERIOD_CURRENT, i), tick_size, digits);
      string high = PriceToString(iHigh(Symbol(), PERIOD_CURRENT, i), tick_size, digits);
      string low = PriceToString(iLow(Symbol(), PERIOD_CURRENT, i), tick_size, digits);
      string close = PriceToString(iClose(Symbol(), PERIOD_CURRENT, i), tick_size, digits);
      string tick_volume = (string) iTickVolume(Symbol(), PERIOD_CURRENT, i);
      string volume = (string) iVolume(Symbol(), PERIOD_CURRENT, i);
      string spread = (string) iSpread(Symbol(), PERIOD_CURRENT, i);

      //--- Write the data to csv
      FileWriteString(handle_write, date + ",");
      FileWriteString(handle_write, time + ",");
      FileWriteString(handle_write, open + ",");
      FileWriteString(handle_write, high + ",");
      FileWriteString(handle_write, low + ",");
      FileWriteString(handle_write, close + ",");
      FileWriteString(handle_write, tick_volume + ",");
      FileWriteString(handle_write, volume + ",");
      FileWriteString(handle_write, spread);
      FileWriteString(handle_write, "\r\n");
     }

   FileClose(handle_write);
   Alert("Saved the price data successfully. Find the file in '<User>\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\" + output_file_name + "'");
  }
//+------------------------------------------------------------------+
string PriceToString(double price, double tick_size, int digits)
  {

   double price_norm = NormalizeDouble((price / tick_size) * tick_size, digits);
   return DoubleToString(price_norm, digits);

  }
//+------------------------------------------------------------------+

Comments