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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---