//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Market Info // version - 1.0.1 // Author - CyberPunk //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /* Ñêðèïò âûäàþùèé âñþ èíôîðìàöèþ ïðåäîñòàâëÿåìóþ ôóíêöèåé MarketInfo(). Èíôîðìàöèþ ìîæíî ïîëó÷èòü êàê ïî òåêóùåìó ôèíàíñîâîìó èíñòðóìåíó, òàê è ïî ëþáîìó äðóãîìó. Òàêæå ñóùåñòâóåò âîçìîæíîñòü âûâîäà ïîëó÷åííîé èíôîðìàöèè â *.csv è/èëè *.htm ôàéë. */ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Ãîëîâíàÿ ÷àñòü //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //----------------------------------------------------------------------------- // Ñïåöèàëüíûå ïàðàìåòðû //----------------------------------------------------------------------------- /* Copyright */ #property copyright "Copyright \xa9 2009, CyberPunk" /* Ïîêàçûâàòü îêíî ñâîéñòâ ñêðèïòà */ #property show_inputs //----------------------------------------------------------------------------- // Âêëþ÷àåìûå ôàéëû //----------------------------------------------------------------------------- /* Ñòàíäàðòíûå êîäû îøèáîê */ #include <stderror.mqh> /* Áèáëèîòåêà äîïîëíèòåëüíûõ ôóíêöèé */ #include <stdlib.mqh> /* Áèáëèîòåêà ñòàíäàðòíûõ ôóíêöèé è êîíñòàíò Windows */ #include <WinUser32.mqh> //----------------------------------------------------------------------------- // Âíåøíèå ïåðåìåííûå //----------------------------------------------------------------------------- /* Îïðåäåëÿåò ñèìâîë */ extern string ev_Symbol = ""; /* Îïðåäåëÿåò ñïîñîá âûâîäà èíôîðìàöèè íà ýêðàí: false - ñ ïîìîùüþ ôóíêöèè Alert(); true - ñ ïîìîùüþ ôóíêöèè MessageBox(); */ extern bool ev_MsgType = true; /* Çàäà¸ò èìÿ (áåç ðàñøèðåíèÿ) ñîçäàâàåìîãî ôàéëà */ extern string ev_FileName = "Market Info"; /* Îïðåäåëÿåò, áóäåò ëè, îñóùåñòâëÿòüñÿ âûâîä â *.csv ôàéë */ extern bool ev_PrintCsvFile = false; /* Îïðåäåëÿåò, áóäåò ëè, îñóùåñòâëÿòüñÿ âûâîä â *.htm ôàéë */ extern bool ev_PrintHtmlFile = false; //----------------------------------------------------------------------------- // Ãëîáàëüíûå ïåðåìåííûå //----------------------------------------------------------------------------- /* Ìàññèâ îïèñàíèé çíà÷åíèé âîçâðàùàåìûõ ôóíêöèåé MarketInfo() */ string pa_Descriptions[28] = { "Ìèíèìàëüíàÿ äíåâíàÿ öåíà", "Ìàêñèìàëüíàÿ äíåâíàÿ öåíà", "Âðåìÿ ïîñòóïëåíèÿ ïîñëåäíåé êîòèðîâêè", "Ïîñëåäíÿÿ ïîñòóïèâøàÿ öåíà ïðåäëîæåíèÿ (Bid)", "Ïîñëåäíÿÿ ïîñòóïèâøàÿ öåíà ïðîäàæè (Ask)", "Ðàçìåð ïóíêòà â âàëþòå êîòèðîâêè (Point)", "Êîëè÷åñòâî öèôð ïîñëå äåñÿòè÷íîé òî÷êè â öåíå ôèíàíñîâîãî èíñòðóìåíòà", "Ñïðýä â ïóíêòàõ (Spread)", "Ìèíèìàëüíî äîïóñòèìûé ðàçìåð ñòîï-ëîññà/òåéê-ïðîôèòà â ïóíêòàõ (StopLevel)", "Ðàçìåð êîíòðàêòà â áàçîâîé âàëþòå èíñòðóìåíòà", "Ðàçìåð ìèíèìàëüíîãî èçìåíåíèÿ öåíû èíñòðóìåíòà â âàëþòå äåïîçèòà", "Ìèíèìàëüíûé øàã èçìåíåíèÿ öåíû èíñòðóìåíòà â âàëþòå êîòèðîâêè", "Ðàçìåð ñâîïà äëÿ äëèííûõ ïîçèöèé", "Ðàçìåð ñâîïà äëÿ êîðîòêèõ ïîçèöèé", "Êàëåíäàðíàÿ äàòà íà÷àëà òîðãîâ (îáû÷íî èñïîëüçóåòñÿ äëÿ ôüþ÷åðñîâ)", "Êàëåíäàðíàÿ äàòà îêîí÷àíèÿ òîðãîâ (îáû÷íî èñïîëüçóåòñÿ äëÿ ôüþ÷åðñîâ)", "Ðàçðåøåíèå òîðãîâ ïî óêàçàííîìó ôèíàíñîâîìó èíñòðóìåíòó", "Ìèíèìàëüíûé ðàçìåð ëîòà", "Øàã èçìåíåíèÿ ëîòà", "Ìàêñèìàëüíûé ðàçìåð ëîòà", "Ìåòîä âû÷èñëåíèÿ ñâîïîâ", "Ñïîñîá ðàñ÷¸òà ïðèáûëè", "Ñïîñîá ðàñ÷¸òà çàëîãîâûõ ñðåäñòâ", "Íà÷àëüíûå çàëîãîâûå òðåáîâàíèÿ äëÿ îäíîãî ëîòà", "Ðàçìåð çàëîãîâûõ ñðåäñòâ äëÿ ïîääåðæêè îòêðûòûõ ïîçèöèé â ðàñ÷¸òå íà îäèí ëîò", "Ìàðæà, âçèìàåìàÿ ñ ïåðåêðûòûõ ïîçèöèé â ðàñ÷¸òå íà îäèí ëîò", "Ðàçìåð ñâîáîäíûõ ñðåäñòâ, íåîáõîäèìûõ äëÿ îòêðûòèÿ îäíîãî ëîòà íà ïîêóïêó", // Óðîâåíü çàìîðîçêè îðäåðîâ â ïóíêòàõ. Åñëè öåíà èñïîëíåíèÿ íàõîäèòñÿ â ïðåäåëàõ, îïðåäåëÿåìûõ óðîâíåì çàìîðîçêè, òî îðäåð íå ìîæåò áûòü ìîäèôèöèðîâàí, îòìåí¸í èëè çàêðûò "Óðîâåíü çàìîðîçêè îðäåðîâ â ïóíêòàõ" }; /* Ìàññèâ çíà÷åíèé âîçâðàùàåìûõ ôóíêöèåé MarketInfo() */ string pa_Values[28]; /* Íàçâàíèå áðîêåðñêîé êîìïàíèè */ string pv_BrokerName[2] = {"Íàçâàíèå áðîêåðñêîé êîìïàíèè: "}; /* Èìÿ òîðãîâîãî ñåðâåðà */ string pv_ServerName[2] = {"Èìÿ òîðãîâîãî ñåðâåðà: "}; /* Ëîêàëüíîå âðåìÿ */ string pv_LocalTime[2] = {"Ëîêàëüíîå âðåìÿ: "}; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Ñòàíäàðòíûå ôóíêöèè //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //----------------------------------------------------------------------------- // Ñòàíäàðòíàÿ ôóíêöèÿ start() //----------------------------------------------------------------------------- void start() { if (pf_InitValues()) // Èíèöèàëèçèðóåì çíà÷åíèÿ ïåðåìåííûõ { pf_PrintScreen(); // Âûâîä èíôîðìàöèè íà ýêðàí if (ev_PrintCsvFile) pf_PrintCsv(); // Ñîçäà¸ì csv-ôàéë if (ev_PrintHtmlFile) pf_PrintHtml(); // Ñîçäà¸ì html-ôàéë } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Ïîëüçîâàòåëüñêèå ôóíêöèè //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //----------------------------------------------------------------------------- // Ôóíêöèÿ pf_InitValues() //----------------------------------------------------------------------------- /* Ôóíêöèÿ âû÷èñëÿåò çíà÷åíèÿ ïåðåìåííûõ ïðîãðàììû, èëè, ïðè íåïðàâèëüíîì ñèìâîëå, âûâîäèò ñîîáùåíèå îá îøèáêå */ //----------------------------------------------------------------------------- bool pf_InitValues() { bool Rez = false; // Ïåðåìåííàÿ ðåçóëüòàòà // Åñëè ñèìâîë íå çàäàí, òî óñòàíàâëèâàåì òåêóùèé ñèìâîë if (ev_Symbol == "") ev_Symbol = Symbol(); GetLastError(); // Îáíóëÿåì çíà÷åíèå ïåðåìåííîé îøèáîê ïðîãðàììû //----------------------------- /* Åñëè ñèìâîëà íå ñóùåñòâóåò, òî ïîñëå âûçîâà ôóíêöèè MarketInfo(), ôóíêöèÿ GetLastError() âîçâðàòèò êîä îøèáêè */ //----------------------------- MarketInfo(ev_Symbol, MODE_POINT); if (GetLastError() == ERR_UNKNOWN_SYMBOL) // Åñëè óêàçàííîãî ñèìâîëà íå ñóùåñòâóåò // Ñîîáùåíèå Alert("Ñèìâîë ", ev_Symbol, " íå ñóùåñòâóåò!"); else // Ñèìâîë ñóùåñòâóåò { // Òî÷íîñòü (êîëè÷åñòâî öèôð ïîñëå çàïÿòîé) äëÿ âûáðàííîãî ôèíàíñîâîãî èíñòðóìåíòà int lv_Digits = MarketInfo(ev_Symbol, MODE_DIGITS); int lv_TempInt; // Ïåðåìåííàÿ äëÿ ïðåîáðàçîâàíèÿ double >> int Rez = true; // Óñòàíàâëèâàåì ðåçóëüòàò pv_BrokerName[1] = AccountCompany(); // Óçíà¸ì íàçâàíèå áðîêåðñêîé êîìïàíèè pv_ServerName[1] = AccountServer(); // Óçíà¸ì èìÿ àêòèâíîãî ñåðâåðà // Óçíà¸ì ëîêàëüíîå âðåìÿ pv_LocalTime[1] = TimeToStr(TimeLocal(), TIME_DATE | TIME_SECONDS); //----------------------------- /* Èíèöèàëèçàöèÿ çíà÷åíèé âîçâðàùàåìûõ ôóíêöèåé MarketInfo() */ //----------------------------- pa_Values[0] = DoubleToStr(MarketInfo(ev_Symbol, MODE_LOW), lv_Digits); pa_Values[1] = DoubleToStr(MarketInfo(ev_Symbol, MODE_HIGH), lv_Digits); pa_Values[2] = TimeToStr(MarketInfo(ev_Symbol, MODE_TIME), TIME_DATE | TIME_SECONDS); pa_Values[3] = DoubleToStr(MarketInfo(ev_Symbol, MODE_BID), lv_Digits); pa_Values[4] = DoubleToStr(MarketInfo(ev_Symbol, MODE_ASK), lv_Digits); pa_Values[5] = DoubleToStr(MarketInfo(ev_Symbol, MODE_POINT), lv_Digits); pa_Values[6] = lv_Digits; lv_TempInt = MarketInfo(ev_Symbol, MODE_SPREAD); pa_Values[7] = lv_TempInt; lv_TempInt = MarketInfo(ev_Symbol, MODE_STOPLEVEL); pa_Values[8] = lv_TempInt; pa_Values[9] = DoubleToStr(MarketInfo(ev_Symbol, MODE_LOTSIZE), 2); pa_Values[10] = MarketInfo(ev_Symbol, MODE_TICKVALUE); pa_Values[11] = MarketInfo(ev_Symbol, MODE_TICKSIZE); pa_Values[12] = MarketInfo(ev_Symbol, MODE_SWAPLONG); pa_Values[13] = MarketInfo(ev_Symbol, MODE_SWAPSHORT); pa_Values[14] = TimeToStr(MarketInfo(ev_Symbol, MODE_STARTING), TIME_DATE | TIME_SECONDS); pa_Values[15] = TimeToStr(MarketInfo(ev_Symbol, MODE_EXPIRATION), TIME_DATE | TIME_SECONDS); if (MarketInfo(ev_Symbol, MODE_TRADEALLOWED) == 1.0) pa_Values[16] = "Äà"; else pa_Values[16] = "Íåò"; pa_Values[17] = MarketInfo(ev_Symbol, MODE_MINLOT); pa_Values[18] = MarketInfo(ev_Symbol, MODE_LOTSTEP); pa_Values[19] = MarketInfo(ev_Symbol, MODE_MAXLOT); switch (MarketInfo(ev_Symbol, MODE_SWAPTYPE)) { case 0.0: pa_Values[20] = " ïóíêòàõ"; break; case 1.0: pa_Values[20] = " áàçîâîé âàëþòå èíñòðóìåíòà"; break; case 2.0: pa_Values[20] = " ïðîöåíòàõ"; break; case 3.0: pa_Values[20] = " âàëþòå çàëîãîâûõ ñðåäñòâ"; } switch (MarketInfo(ev_Symbol, MODE_PROFITCALCMODE)) { case 0.0: pa_Values[21] = "Forex"; break; case 1.0: pa_Values[21] = "CFD"; break; case 2.0: pa_Values[21] = "Futures"; } switch (MarketInfo(ev_Symbol, MODE_MARGINCALCMODE)) { case 0.0: pa_Values[22] = "Forex"; break; case 1.0: pa_Values[22] = "CFD"; break; case 2.0: pa_Values[22] = "Futures"; break; case 3.0: pa_Values[22] = "CFD íà èíäåêñû"; } pa_Values[23] = MarketInfo(ev_Symbol, MODE_MARGININIT); pa_Values[24] = MarketInfo(ev_Symbol, MODE_MARGINMAINTENANCE); pa_Values[25] = MarketInfo(ev_Symbol, MODE_MARGINHEDGED); pa_Values[26] = MarketInfo(ev_Symbol, MODE_MARGINREQUIRED); lv_TempInt = MarketInfo(ev_Symbol, MODE_FREEZELEVEL); pa_Values[27] = lv_TempInt; } return(Rez); // Âîçâðàùàåì ðåçóëüòàò } //----------------------------------------------------------------------------- // Ôóíêöèÿ pf_PrintScreen() //----------------------------------------------------------------------------- /* Ôóíêöèÿ âûâîäèò ñîáðàíóþ èíôîðìàöèþ â îêíî ôóíêöèè Alert(), èëè MessageBox() */ //----------------------------------------------------------------------------- void pf_PrintScreen() { // Ôîðìèðóåì çàãîëîâîê ñîîáùåíèÿ string lv_Msg = StringConcatenate( "Îáçîð ðûíêà", "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "\n", pv_BrokerName[0], pv_BrokerName[1], "\n", pv_ServerName[0], pv_ServerName[1], "\nÑèìâîë: ", ev_Symbol, "\n", pv_LocalTime[0], pv_LocalTime[1], "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); // Ôîðìèðóåì îñíîâíîå ñîäåðæàíèå ñîîáùåíèÿ for (int i = 0; i <= 27; i++) lv_Msg = StringConcatenate(lv_Msg, "\n", pa_Descriptions[i], ": ", pa_Values[i]); // Âûâîäèì ñîîáùåíèå íà ýêðàí if (ev_MsgType) MessageBox(lv_Msg, "Îáçîð ðûíêà", MB_ICONINFORMATION); else Alert(lv_Msg); } //----------------------------------------------------------------------------- // Ôóíêöèÿ pf_PrintCsv() //----------------------------------------------------------------------------- /* Ôóíêöèÿ âûâîäèò ñîáðàííûå äàííûå â óêàçàííûé ôàéë */ //----------------------------------------------------------------------------- void pf_PrintCsv() { // Ïûòàåìñÿ îòêðûòü ôàéë int handle = FileOpen(ev_FileName + ".csv", FILE_CSV | FILE_WRITE); // Åñëè íå óäàëîñü ñîçäàòü óêàçàííûé ôàéë ñîîáùàåì îá îøèáêå if (handle == -1) pf_FileOpenErr(ev_FileName + ".csv"); else // Åñëè ôàéë ñîçäàí óäà÷íî, òî âûâîäèì â íåãî äàííûå { FileWrite(handle, "Îáçîð ðûíêà"); FileWrite(handle,""); // Ïóñòàÿ ñòðîêà FileWrite(handle, pv_BrokerName[0], pv_BrokerName[1]); FileWrite(handle, pv_ServerName[0], pv_ServerName[1]); FileWrite(handle, "Ñèìâîë: ", ev_Symbol); FileWrite(handle, pv_LocalTime[0], pv_LocalTime[1]); FileWrite(handle,""); // Ïóñòàÿ ñòðîêà FileWrite(handle, "Îïèñàíèå", "Çíà÷åíèå"); for (int i = 0; i <= 27; i++) // Çàíîñèì äàííûå â òàáëèöó FileWrite(handle, pa_Descriptions[i], pa_Values[i]); FileWrite(handle, ""); // Ïóñòàÿ ñòðîêà // Copyright FileWrite(handle, "Generated by MQL4 script \"Market Info\"", "Copyright \xa9 2009, CyberPunk"); FileClose(handle); // Çàêðûâàåì ôàéë } } //----------------------------------------------------------------------------- // Ôóíêöèÿ pf_PrintHtml() //----------------------------------------------------------------------------- /* Ôóíêöèÿ âûâîäèò ñîáðàííóþ èíôîðìàöèþ â html ôàéë */ //----------------------------------------------------------------------------- void pf_PrintHtml() { // Ïûòàåìñÿ îòêðûòü ôàéë int handle = FileOpen(ev_FileName + ".htm", FILE_BIN | FILE_WRITE); if (handle != -1) // Åñëè ôàéë îòêðûò óñïåøíî { //----------------------------- /* Ñîçäà¸ì html ôàéë â ïàìÿòè êîìïüþòåðà, à çàòåì çàïèñûâàåì íà äèñê */ //----------------------------- // Ôîðìèðóåì çàãîëîâîê ôàéëà string lv_HtmlFile = StringConcatenate( "<html>", "\r\n<head>", "\r\n\t<meta http-equiv=\"content-type\" content=\"text/html; charset=Windows-1251\">", "\r\n\t<meta name=\"generator\" content=\"MQL4 script "Market Info". Copyright © 2009, CyberPunk\">", "\r\n\t<title>Îáçîð ðûíêà</title>", "\r\n</head>", "\r\n<body bgcolor=\"LightSteelBlue\">", "\r\n\t<h2 align=\"center\">Îáçîð ðûíêà</h2>", "\r\n\t<hr size=\"4\">", "\r\n\t<ul>", "\r\n\t\t<li>", pv_BrokerName[0], pv_BrokerName[1], "</li>", "\r\n\t\t<li>", pv_ServerName[0], pv_ServerName[1], "</li>", "\r\n\t\t<li>Ñèìâîë: ", ev_Symbol, "</li>", "\r\n\t\t<li>", pv_LocalTime[0], pv_LocalTime[1], "</li>", "\r\n\t</ul>", "\r\n\t<hr size=\"4\">", "\r\n\t<table border=\"4\" align=\"center\" width=\"85%\">", "\r\n\t\t<tr><th>Îïèñàíèå</th><th>Çíà÷åíèå</th></tr>"); for (int i = 0; i <= 27; i++) // Çàïîëíÿåì òàáëèöó lv_HtmlFile = StringConcatenate(lv_HtmlFile, "\r\n\t\t<tr><td>", pa_Descriptions[i], "</td><td>", pa_Values[i], "</td></tr>"); // Ôîðìèðóåì îêîí÷àíèå ôàéëà lv_HtmlFile = StringConcatenate(lv_HtmlFile, "\r\n\t</table>", "\r\n\t<hr size=\"4\">", "\r\n\t<address style=\"text-align: right\">Generated by MQL4 script "Market Info". Copyright © 2009, CyberPunk</address>", "\r\n</body>", "\r\n</html>"); // Çàïèñûâàåì ôàéë FileWriteString(handle, lv_HtmlFile, StringLen(lv_HtmlFile)); FileClose(handle); // Çàêðûâàåì ôàéë } // Åñëè óêàçàííûé ôàéë ñîçäàòü íå óäàëîñü, òî ñîîáùàåì îá îøèáêå else pf_FileOpenErr(ev_FileName + ".htm"); } //----------------------------------------------------------------------------- // Ôóíêöèÿ pf_FileOpenErr() //----------------------------------------------------------------------------- /* Ñîîáùàåò îá îøèáêå ïðè îòêðûòèè ôàéëà */ //----------------------------------------------------------------------------- void pf_FileOpenErr(string fp_FileName) { int lv_Err = GetLastError(); // Óçíà¸ì êîä îøèáêè Alert( // Ñîîáùàåì îá îøèáêå "Îøèáêà ïðè îòêðûòèè ôàéëà \"", fp_FileName, "\"!\n", "Êîä îøèáêè: ", lv_Err, " (", ErrorDescription(lv_Err), ")" ); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen
It opens Message Boxes to the user
Uses files from the file system
It writes information to file