DownloadQuotes

Author: Amba
0 Views
0 Downloads
0 Favorites
DownloadQuotes
//+------------------------------------------------------------------+
//|                                                DowloadQuotes.mq4 |
//|                                                             Amba |
//|                                                                a |
//+------------------------------------------------------------------+
#property copyright "Amba"
#property link      "a"
#property version   "1.01"
#property show_inputs
#property strict

enum ENUM_PERIODS
  {
   PERIOD__M1,
   PERIOD__M5,
   PERIOD__M15,
   PERIOD__M30,
   PERIOD__H1,
   PERIOD__H4,
   PERIOD__D1,
   PERIOD__W1,
   PERIOD__MN1,
   ALL_PERIODS
  };
enum SYM_DN
  {
   ALL_SYMBOLS,
   CURRENT_SYMBOL
  };

input SYM_DN SymForDn = ALL_SYMBOLS; //Symbols for download
input ENUM_PERIODS pPer = ALL_PERIODS; //TFs for download

ENUM_TIMEFRAMES per[] = {1, 5, 15, 30, 60, 240, 1440, PERIOD_W1, PERIOD_MN1};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int err = 0;
void OnStart()
  {
   string sym[], cmm = "";
   int cntsy = SymbolsList(sym, true);


   long hndl = ChartOpen(_Symbol, PERIOD_CURRENT);

   int all = cntsy, cntr = 0;
   if(SymForDn == CURRENT_SYMBOL)
      all = 1;
   if(pPer == ALL_PERIODS)
      all *= 9;

   for(int i = 0; i < cntsy && !IsStopped(); i++)
     {
      string sy = sym[i];
      if(SymForDn == CURRENT_SYMBOL)
         sy = _Symbol;

      for(int j = 0; j < ArraySize(per); j++)
        {
         cntr++;
         if(pPer < ALL_PERIODS)
            j = pPer;
         int p = per[j];
         Comment(StringFormat("  >>> DOWNLOADING: %s, %.0f", sy, 100.0 * cntr / all) + "%");
         ChartRedraw();
         GetHist(hndl, sy, p);
         if(pPer < ALL_PERIODS)
            break;
        }
      if(err > 0)
         break;
      if(SymForDn == CURRENT_SYMBOL)
         break;
     }
   Comment("DONE");
   ChartRedraw();
   ChartClose(hndl);
   Print("Time left: ", TimeToString(GetMicrosecondCount() / 1000000, TIME_MINUTES | TIME_SECONDS));
   if(err > 0)
      Print("Error code: ", err);

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GetHist(long handle, string sy, int _per)
  {

   ResetLastError();

   if(handle != 0 && ChartSetSymbolPeriod(handle, sy, _per))
     {
      ChartSetInteger(handle, CHART_AUTOSCROLL, false);
      ChartSetInteger(handle, CHART_SHIFT, true);
      ChartSetInteger(handle, CHART_MODE, CHART_LINE);
      ChartSetInteger(handle, CHART_SHOW_GRID, false);
      ChartSetInteger(handle, CHART_SHOW_PERIOD_SEP, false);
      int last = 0;
      int slp = 100;
      for(int i = 0; i < 16 && !IsStopped(); i++)
        {
         bool res = ChartNavigate(handle, CHART_BEGIN, -100000);
         int bars = ChartFirstVisibleBar(handle);
         if(bars == last || !res)
           {
            i = i++;
            slp *= 1.1;
            //Print(slp);
           }
         else
           {
            slp = fmax(50, slp/1.1);
            last = bars;
            i = 0;
            //Print(slp);
           }

         ChartRedraw(handle);
         Sleep(slp);
        }
     }

   err = GetLastError();
   if(err > 0)
      Print("Error code: ", err);
  }
//+------------------------------------------------------------------+
int ChartFirstVisibleBar(const long chart_ID = 0)
  {
   long result = -1;
   ResetLastError();
   if(!ChartGetInteger(chart_ID, CHART_FIRST_VISIBLE_BAR, 0, result))
     {
      //Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
   return((int)result);
  }
//+------------------------------------------------------------------+
int SymbolsList(string &Symbols[], bool Selected)
  {
   ArrayResize(Symbols, SymbolsTotal(Selected));
   for(int i = 0; i < SymbolsTotal(Selected); i++)
      Symbols[i] = SymbolName(i, Selected);
   return(ArraySize(Symbols));
  }
//+------------------------------------------------------------------+

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 ---