//+------------------------------------------------------------------+
//| Load_Hist.mq4 |
//| Copyright 2015, Galladion |
//| https://vk.com/id1398982 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Galladion"
#property link "https://vk.com/id1398982"
#property version "1.00"
string Global_UPG="UPG"; //Ãëîá.ïåðåìåííàÿ äëÿ ïðîâåðêè âûïîëíåíèÿ ñêðèïòà íà çàãðóçêó èñòîðèè
extern string FileName="Symbols"; // Èìÿ ôàéëà äëÿ çàïèñè èíôîðìàöèè ïî ñèìâîëàì
extern int Pause=500; // Òåõíè÷åñêàÿ ïàóçà â ìèëëèñåêóíäàõ
extern int j=10; // Ìíîæèòåëü äëÿ ñðåäíåãî áàðà
extern bool load_hist= false; // Âûïîëíÿòü çàãðóçêó èñòîðèè
extern bool art_line = false; // Îòìå÷àòü áàðû (÷àðò îñòàåòñÿ îòêðûòûì)
#import "user32.dll"
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
int GetParent(int hWnd);
int GetDlgItem(int hDlg,int nIDDlgItem);
#import
#define VK_HOME 0x24
#define VK_DOWN 0x28
#define WM_CLOSE 0x0010
#define WM_COMMAND 0x0111
#define WM_KEYDOWN 0x0100
#define LVM_GETITEMCOUNT 0x1004
#define VAR_HANDLE "Symbol_Handle"
// Âîçâðàùàåò õýíäë îñíîâíîãî îêíà òåðìèíàëà
int Parent()
{
int hwnd=WindowHandle(Symbol(),Period());
int hwnd_parent=0;
while(!IsStopped())
{
hwnd=GetParent(hwnd);
if(hwnd==0)
break;
hwnd_parent=hwnd;
}
return(hwnd_parent);
}
// Âîçâðàùàåò êîëè÷åñòâî ñèìâîëîâ â îêíå "Market Watch"
int SymbolCount()
{
int hwnd=Parent();
int Count=0;
if(hwnd!=0) // íàøëè ãëàâíîå îêíî
{
hwnd=GetDlgItem(hwnd,0xE81C); // Íàøëè ñïèñîê ñèìâîëîâ
hwnd = GetDlgItem(hwnd, 0x50);
hwnd = GetDlgItem(hwnd, 0x8A71);
Count=SendMessageA(hwnd,LVM_GETITEMCOUNT,0,0); // ïîëó÷èëè êîëè÷åñòâî ýëåìåíòîâ ñïèñêà
}
return(Count);
}
// Îòêðûâàåò îêíî ãðàôèêà ñèìâîëà, ðàñïîëîæåííîãî â ñòðîêå íîìåð Num îêíà "Market Watch"
void OpenChart(int Num)
{
int hwnd= Parent();
if(hwnd!=0) // íàøëè ãëàâíîå îêíî
{
hwnd=GetDlgItem(hwnd,0xE81C); // íàøëè "Market Watch"
hwnd = GetDlgItem(hwnd, 0x50);
hwnd = GetDlgItem(hwnd, 0x8A71);
PostMessageA(hwnd,WM_KEYDOWN,VK_HOME,0); // âåðõíÿÿ ñòðî÷êà îêíà "Market Watch"
while(Num>1)
{
PostMessageA(hwnd,WM_KEYDOWN,VK_DOWN,0); // ñìåñòèëèñü íà íóæíóþ ñòðî÷êó
Num--;
}
}
PostMessageA(Parent(),WM_COMMAND,33160,0); // îòêðûëè ãðàôèê
return;
}
// Çàêðûâàåò îêíî ãðàôèêà
void CloseChart(int hwnd)
{
PostMessageA(GetParent(hwnd),WM_CLOSE,0,0);
return;
}
// Çàïóñêàåò âûáðàííûé â îêíå "Navigator" ñêðèïò
void RunScript()
{
PostMessageA(Parent(),WM_COMMAND,33042,0); // èñïîëíèòü ñêðèïò íà òåêóùåì ãðàôèêå
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void UpgScript()
{
int B=Bars,h=1;
PostMessageA(WindowHandle(Symbol(),Period()),WM_KEYDOWN,VK_HOME,0); // íàæàòèå êíîïêè "HOME" â àêòèâíîì îêíå ãðàôèêà
while(true) // Öèêë âûïîëíÿåòñÿ äî òåõ ïîð....
{
PostMessageA(WindowHandle(Symbol(),Period()),WM_KEYDOWN,VK_HOME,0); // íàæàòèå êíîïêè "HOME" â àêòèâíîì îêíå ãðàôèêà
Sleep(3*Pause);
RefreshRates();
if(B==Bars) // ...ïîêà îáíîâëÿåòñÿ ãðàôèê ïî íàæàòèþ êë. "HOME"
{
if(h<=5) {Sleep(h*Pause);h++;continue;} // (åñëè ìåäëåííûé èíåò - òî êë. æìåòñÿ åùå ðàç)
GlobalVariableSet(Global_UPG,0); // åñëè âñå òàêè âñÿ èñòîðèÿ çàãðóæåí - îáíîâëÿåì ãëîá. ïåðåìåííóþ
return; // âûõîäèì
}
B=Bars;h=1;
}
}
// Çàïèñûâàåò õàðàêòåðèñòèêà òåêóùåãî òîðãîâîãî ñèìâîëà â ôàéë
void WriteSymbol(string per)
{
int handle;
string Str;
double price=0;
int k=0; // ïåðåìåííàÿ äëÿ èìåíè "ãàëêè" - ìàðêåð áàðà
string direction; // íàïðàâëåíèå òðåíäà áàðà
for(int m=Bars-1;m>=0;m--) // èùåì ñðåäíèé áàð âî âñåé èñòîðèè
{
price+=High[m]-Low[m];
}
price/=Bars-1;
for(int l=Bars-1;l>=0;l--) // èùåì áàðû áîëüøå êîýô. * ñð.áàð è ïèøåì â ôàéë
{
if(High[l]-Low[l]>j*price)
{
if(Open[l]<Close[l])direction = "UP";
if(Open[l]>Close[l])direction = "DOWN";
if(Open[l]==Close[l])direction="0";
Str=Str+"\n"+per+";"+Symbol()+";"+TimeToStr(Time[l],TIME_DATE|TIME_MINUTES)+";"+DoubleToStr(price,MarketInfo(Symbol(),MODE_DIGITS))+";"+IntegerToString(j,0)+";"+DoubleToStr(round(j*price/Point),0)+";"+direction+";"+DoubleToStr(round((High[l]-Low[l])/Point)*MarketInfo(Symbol(),MODE_TICKVALUE),2)+";";
while(art_line) // åñëè íàäî ñòàâèì ìàðêåð íà ýòîì áàðå
{
ObjectCreate(ChartID(),(string)k,OBJ_ARROW_CHECK,0,Time[l]+Time[0]-Time[1],High[l]);
//--- óñòàíîâèì ñïîñîá ïðèâÿçêè
ObjectSetInteger(ChartID(),(string)k,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
//--- óñòàíîâèì ðàçìåð çíàêà
ObjectSetInteger(ChartID(),(string)k,OBJPROP_WIDTH,3);
break;
}
k++;
}
}
handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
FileSeek(handle,-2,SEEK_END);
FileWrite(handle,Str);
FileClose(handle);
return;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string interval;
switch(Period()) // îïðåäåëÿåì ïåðèîä ãðàôèêà è äîïèñûâàåì â èìÿ ôàéëà
{ // ÷àðò îòêðûâàåòñÿ ïî øàáëîíó default
case 1: interval = "PERIOD_M1";break;
case 5: interval = "PERIOD_M5";break;
case 15: interval = "PERIOD_M15";break;
case 30: interval = "PERIOD_M30";break;
case 60: interval = "PERIOD_H1";break;
case 240: interval= "PERIOD_H4";break;
case 1440: interval="PERIOD_D1";break;
case 10080: interval = "PERIOD_W1";break;
case 43200: interval = "PERIOD_MN";break;
default : return;
}
FileName+="_"+interval+".csv";
int handle,Count,i=1;
handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
FileWrite(handle,"Ïåðèîä;Ñèìâîë;ÄÀÒÀ;Ñð.áàð;Ìíîæ.;Êîë.ïï.;Íàïð.;Ñò-òü H/L;");
FileClose(handle);
//---
if(GlobalVariableCheck(VAR_HANDLE)) // Çàïóñòèëè íå ïåðâûé ðàç...
{
GlobalVariableSet(VAR_HANDLE,WindowHandle(Symbol(),Period()));
if(load_hist)UpgScript();
WriteSymbol(interval);
}
else // çàïóñòèëè ïåðâûé ðàç
{
GlobalVariableSet(VAR_HANDLE,WindowHandle(Symbol(),Period()));
handle=FileOpen(FileName,FILE_WRITE|FILE_CSV,';'); // îáíóëèëè ôàéë ñ äàííûìè
FileClose(handle);
Count=SymbolCount();
while(!IsStopped())
{
if(i>Count)
break;
OpenChart(i); // îòêðûëè ãðàôèê î÷åðåäíîãî ñèìâîëà èç îêíà "Market Watch"
Sleep(Pause);
if(GlobalVariableCheck(Global_UPG))GlobalVariableSet(Global_UPG,1); // ïðåäîòâðàùàåò ïðåäæåâðåìåííîå çàêðûòèå îêíà
RunScript(); // çàïóñòèëè íà òîëüêî ÷òî îòêðûòîì ãðàôèêå òåêóùèé ñêðèïò
Sleep(Pause);
while(load_hist) // öèêë âûïîëíÿåòñÿ åñëè íåîáõîäèìî çàãðóæàòü èñòîðèþ
{
if(GlobalVariableCheck(Global_UPG)==true && (GlobalVariableGet(Global_UPG)==0)) break; // èñòîðèÿ çàãðóæåíà ìîæíî çàêðûâàòü ÷àðò
}
while(!art_line) // åñëè ìàðêèðóåì áàðû, îêíî ÷àðòà íå çàêðûâàåòñÿ
{
CloseChart(GlobalVariableGet(VAR_HANDLE)); // çàêðûëè îêíî ãðàôèêà
Sleep(Pause);
break;
}
i++;
}
GlobalVariableDel(VAR_HANDLE);
GlobalVariableDel(Global_UPG);
// çàïèñàëè â ôàéë êîëè÷åñòâî ñèìâîëîâ â îêíå "Market Watch"
handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
FileSeek(handle,0,SEEK_END);
FileWrite(handle,"\nAMOUNT OF SYMBOLS = "+Count);
FileClose(handle);
}
return;
}
//+------------------------------------------------------------------+
Comments