Tick-Tack-toe_v1.1
Download scriptThis script, titled "Tick-Tack-Toe," is designed to transform standard financial price data into a simplified, grid-based visual representation. Instead of showing every minor fluctuation in market price, it simplifies the movement into a structured series of blocks or "cells."
Core Logic and Workflow
The script operates through a multi-step process that moves from historical data processing to real-time monitoring:
1. Initialization and File Creation When first launched, the script identifies the current currency pair and creates a dedicated history file. This file acts as a database for the custom "Tick-Tack-Toe" chart. It initializes by capturing the history of the current chart (from the oldest available data to the present).
2. Data Normalization (The Grid System) The most important logic in this script is how it handles price points. It takes the raw market price and "snaps" it to a fixed grid size (defined by the "Kletka" parameter).
- Think of this like rounding: if the grid size is set to 50 points, the script forces the price to align with the nearest 50-point increment. This removes market "noise" and creates a clean, stepped movement.
3. Historical Reconstruction Before it starts live monitoring, the script walks backward through your existing chart history. It analyzes whether the price was moving up or down.
- If the price moved down, it records a downward block.
- If the price moved up, it records an upward block.
- It looks for "Reversals": if the price moves significantly enough (beyond a set threshold), the script recognizes this as a change in trend and starts a new block in the opposite direction.
4. Real-Time Execution Once the history is processed, the script enters a continuous loop. It listens for every new tick (price change) from the market:
- Trend Continuation: If the current price continues in the same direction as the previous block, it updates the height or depth of the current "cell."
- Reversal Detection: If the price moves far enough in the opposite direction, the script mathematically triggers a "turn." It closes the old cell and creates a new one starting from the previous position.
- Visual Refinement: To distinguish between historical data and live movement, it treats older bars as solid blocks while applying a "shadow" effect to the most recent bar. This allows you to see exactly where the current price is sitting relative to the established trend.
5. Output and Interaction The script writes all this processed information into a custom file format. It is designed to be paired with a specific 2-minute autonomous chart. By processing the data this way, it provides a high-level view of market structure where you can easily see the "steps" of price action rather than a jagged line of individual ticks.
//+-------------------------------------------------------------------+
//| Tick-Tack-toe_v1.mq4 |
//| Copyright © 2009, GoldenFox corp. |
//| |
//| Ãðàôèê "Êðåñòèêè-Íîëèêè" |
//| |
//| |
//| Ìåòîä îòîáðàæåíèÿ ãðàôèêà îñíîâàí íà ñêðèïòå Period_Converter.mq4 |
//| âûëîæåííûé íà ñàéòå http://mql4.com/ru/ |
//| |
//| Äëÿ çàïóñêà ñêðèïòà íåîáõîäèìî ïåðåòàùèòü åãî íà òåêóùèé ãðàôèê, |
//| â ïîÿâèâøåìñÿ îêíå ïàðàìåòðîâ ñêðèïòà íà âêëàäêå "Îáùèå" óñòàíî- |
//| âèòü ãàëî÷êó "Ðàçðåøèòü èìïîðò ôóíêöèé èç DLL", è ñíÿòü ãàëî÷êó |
//| "Ðó÷íîå ïîäòâåðæäåíèå âûçîâà". Íà âêëàäêå "Âõîäíûå ïàðàìåòðû" |
//| óñòàíîâèòü íåîáõîäèìûå ïàðàìåòðû ðàáîòû ñêðèïòà è íàæàòü "ÎÊ". |
//| |
//| Âõîäíûå ïàðàìåòðû: |
//| Kletka - ðàçìåð êëåòêè â ïóíêòàõ |
//| Razvorot - êîë-âî êëåòêîê, íåîáõîäèìîå äëÿ ðàçâîðîòà |
//| |
//| (çíà÷åíèÿ ïî óìîë÷àíèþ âçÿòû äëÿ ïàðû EUR/USD è |
//| 5-òè çíàêîâ ïîñëå çàïÿòîé â êîòèðîâêå) |
//| |
//| Ïîñëå ïîÿâëåíèÿ íà òåêóùåì ãðàôèêå èíôîðìàöèè î çàïóñêå, íåîáõî- |
//| äèìî îòêðûòü àâòîíîìíûé äâóõìèíóòíûé ãðàôèê ïî òåêóùåìó èíñòðóìå- |
//| íòó ñëåäóþùèì îáðàçîì. Â ìåíþ "Ôàéë" âûáðàòü "Îòêðûòü àâòîíîìíî", |
//| â ïîÿâèâøåìñÿ îêíå íàéòè äâóõìèíóòíûé àâòîíîìíûé ãðàôèê ïî âàøåìó |
//| èíñòðóìåíòó (íàïðèìåð EURUSD,M2) è íàæàòü êíîïêó îòêðûòü. Äàëåå |
//| íà îòêðûâøåìñÿ ãðàôèêå âêëþ÷èòü ðåæèì "ßïîíñêèå ñâå÷è" |
//| |
//| Ïîñòðîåíèå ãðàôèêà ïî èñòîðè÷åñêèì äàííûì ñîäåðæàùèìñÿ íà òåêóùåì |
//| ðàáî÷åì ãðàôèêå ïðîèçâîäèòñÿ â ñîîòâåòñòâèè ñ êëàñè÷åñêèì îïèñà- |
//| íèåì ãðàôèêà "Êðåñòèêè-Íîëèêè" (ïî ìèíèìóìàì è ìàêñèìóìàì áàðîâ |
//| òåêóùåãî ãðàôèêà íà÷èíàÿ îò ñàìîãî ñòàðîãî è çàêàí÷èâàÿ òåêóùèì). |
//| Äàëåå ãðàôèê ñòðîèòñÿ ïî òåêóùèì êîòèðîâêàì. |
//| |
//| Â ïàðàìåòðå "Îáúåì" êàæäîãî áàðà îòîáðàæàåòñÿ âûcîòà ñòîëáèêà â |
//| ïóíêòàõ, à â êà÷åñòâå âðåìåíè èñïîëüçóåòñÿ âðåìÿ çàêðûòèÿ áàðà. |
//| |
//| Äëÿ áîëåå íàãëÿäíîãî îòîáðàæåíèÿ òåêóùåé êîòèðîâêè ïîñëåäíèé áàð |
//| íà ãðàôèêå îòîáðàæàåòñÿ ñ òåíüþ. Áîëåå ñòàðûå áàðû îòîáðàæàþòñÿ |
//| áåç òåíåé. |
//| |
//| Ãðàôèê îáíîâëÿåòñÿ ñ ïðèõîäîì êàæäîé íîâîé êîòèðîâêè. |
//| |
//+-------------------------------------------------------------------+
#property copyright "Copyright © 2009, GoldenFox Corp."
#property link ""
#property show_inputs
#include <WinUser32.mqh>
static string s_ver="1.1"; //âåðñèÿ èíäèêàòîðà
extern int Kletka=50; //ðàçìåð êëåòêè â ïóíêòàõ
extern int RazvorotKletka=2; //êîë-âî êëåòîê íåîáõîäèìûõ äëÿ ðàçâîðîòà (øóì)
static int Revers=0; //Êîë-âî ïóíêòîâ äëÿ ðàçâîðîòà (øóì)
static int ExtHandle=-1; //Óêàçàòåëü íà ôàéë êîòèðîâîê èíäèêàòîðà
static int Kurs=0; //òåêóùèé íîðìàëèçîâàííûé ê êëåòêå êóðñ â ïóíêòàõ
static int i_digits, i_time, i_open, i_low, i_high, i_close, i_last_close, last_fpos;
static double d_point,d_volume;
static int hwnd=0;
static int ind_period=2; //Ïåðèîä ãðàôèêà èíäèêàòîðà
static int i_period=0; //ïåðèîä òåêóùåãî ãðàôèêà â ìèíóòàõ
static string c_symbol; //ñèìâîë òåêóùåãî ãðàôèêà
static bool b_work=false; //false - ïèøåì èñòîðèþ; true - ðàáîòàåì
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//---- Çàãîëîâî÷íûå äàííûå
int version=400;
string c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
c_symbol=Symbol(); //âàëþòíàÿ ïàðà (ñèìâîë)
int i_unused[13]; //ðåçåðâíûå íå èñïîëüçóåòñÿ
i_digits=Digits; //êîë-âî çíàêîâ ïîñëå çàïÿòîé
d_point=NormalizeDouble(Point,i_digits+1); //öåíà ïóíêòà
i_period=Period()*60; //ïåðèîä òåêóùåãî ãðàôèêà â ìèíóòàõ
Revers=Kletka*RazvorotKletka; //ðàçâîðîò â ïóíêòàõ
//---- Cîçäàåì íîâûé ôàéë èíäèêàòîðà (äâóõìèíóòíûé ïî òåêóùåìó ñèìâîëó)
ExtHandle=FileOpenHistory(c_symbol+ind_period+".hst", FILE_BIN|FILE_WRITE);//ñîçäàåì íîâûé äâóõìèíóòíûé ôàéë
if(ExtHandle < 0) return(-1); //åñëè íå îòêðûëñÿ òî âûõîä ñ îøèáêîé
//---------Çàïèñûâàåì çàãîëîâî÷íûå äàííûå
FileWriteInteger(ExtHandle, version, LONG_VALUE); // 4 áàéòà âåðñèÿ
FileWriteString(ExtHandle, c_copyright, 64); //64 áàéòà êîïèðàéò
FileWriteString(ExtHandle, c_symbol, 12); //12 áàéò ñèìâîë
FileWriteInteger(ExtHandle, ind_period, LONG_VALUE); // 4 áàéòà ïåðèîä ãðàôèêà
FileWriteInteger(ExtHandle, i_digits, LONG_VALUE); // 4 áàéòà êîë-âî çíàêîâ ïîñëå çàïÿòîé
FileWriteInteger(ExtHandle, 0, LONG_VALUE); // 4 áàéòà timesign
FileWriteInteger(ExtHandle, 0, LONG_VALUE); // 4 áàéòà last_sync
FileWriteArray(ExtHandle, i_unused, 0, 13); //52 áàéòà
// âñåãî 148 áàéò
WriteHistory(); //ïèøåì èñòîðèþ.
Comment("\nÑêðèïò Êðåñòèêè-Íîëèêè v",s_ver," çàïóùåí. Êëåòêà: ",Kletka,"p. Ðàçâîðîò ", Revers, "p.",
"\nÎòêðîéòå àâòîíîìíûé ãðàôèê ",c_symbol,",M",ind_period,
"\n(Ôàéë -> Îòêðûòü àâòîíîìíî -> ",c_symbol,",M",ind_period," -> Îòêðûòü)");
//---------------- îñíîâíîé öèêë
while(IsStopped()==false) //Ðàáîòàåì ïîêà íå ïîëó÷åíà êîìàíäà çàâåðøåíèÿ
{
if(RefreshRates()) //åñëè åñòü íîâàÿ êîòèðîâêà
{
Kurs=(NormalizeDouble(Bid, i_digits+1)/d_point)-MathMod(NormalizeDouble(Bid, i_digits+1)/d_point,Kletka); //íîâûé íîðìàëèçîâàííûé ê êëåòêå êóðñ
CalculateBar(); //äîáàâèì òåêóùóþ êîòèðîâêó â ôàéë
}
}
//--------------------------------------
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalculateBar() //Ôóíêöèÿ îáðàáîòêè òåêóùèõ êîòèðîâîê (êîòèðîâêè â ïóíêòàõ)
{
if (i_open>i_last_close) //åñëè îòêðûòèå òåêóùåãî áàðà èíäèêàòîðà áîëüøå çàêðûòèÿ, òî íàïð.âíèç
{
if (i_last_close>Kurs) //åñëè ïðåäûäóùåå çàêðûòèå áîëüøå íîðìàëèçîâàííîãî êóðñà
{ // òî äâèæåíèå âíèç ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_time=TimeCurrent(); //âðåìÿ çàêðûòèÿ òåêóùåãî áàðà èíäèêàòîðà ðàâíî òåêóùåìó âðåìåíè ñåðâåðà
i_close=Kurs; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî êóðñó
i_low=i_close; //ìèíèìóì òåêóùåãî áàðà èíäèêàòîðà ðàâåí çàêðûòèþ
i_last_close=i_low; //ñîõðàíèì ìèíèìóì òåêóùåãî áàðà èíäèêàòîðà
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
}
else //èíà÷å ïðîâåðÿåì íà ðàçâîðîò
{
if (Kurs-i_last_close>Revers) //åñëè ðàçíèöà íîâîãî êóðñà è ìèíèìóìà òåêóùåãî áàðà èíäèêàòîðà áîëüøå øóìà
{ //òî ðàçâîðîò (íîâûé áàð ââåðõ)
i_close=i_last_close; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî ðàâíî åãî ìèíèìóìó
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
i_open=i_last_close+Kletka; //îòêðûòèå íîâîãî áàðà èíäèêàòîðà íà êëåòêó ââåðõ
i_low=i_open; //ìèíèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí åãî îòêðûòèþ
i_close=Kurs; //çàêðûòèå íîâîãî áàðà èíäèêàòîðà ðàâíî êóðñó
i_high=i_close; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí åãî çàêðûòèþ
i_last_close=i_high; //ñîõðàíèì ìàêñèìóì íîâîãî áàðà èíäèêàòîðà
i_time=TimeCurrent(); //âðåìÿ çàêðûòèÿ íîâîãî áàðà èíäèêàòîðà ðàâíî òåêóùåìó âðåìåíè ñåðâåðà
WriteNewBar(); //çàïèøåì íîâûé áàð èíäèêàòîðà
}
else //èíà÷å øóì íå ïðåâûøåí, íàðèñóåì òåíü
{
if (i_close!=Kurs) //åñëè çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà íå ðàâíî êóðñó
{ //òî ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà ñ òåíüþ
i_close=Kurs; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî êóðñó
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
}
}
}
}
else //èíà÷å îòêðûòèå òåêóùåãî áàðà èíäèêàòîðà ìåíüøå çàêðûòèÿ (íàïð.ââåðõ)
{
if (i_last_close<Kurs) //åñëè ïðåäûäóùåå çàêðûòèå ìåíüøå íîðìàëèçîâàííîãî êóðñà
{ // òî äâèæåíèå ââåðõ ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_time=TimeCurrent(); //âðåìÿ çàêðûòèÿ òåêóùåãî áàðà èíäèêàòîðà ðàâíî òåêóùåìó âðåìåíè ñåðâåðà
i_close=Kurs; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî êóðñó
i_high=i_close; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí åãî çàêðûòèþ
i_last_close=i_high; //ñîõðàíèì ìàêñèìóì íîâîãî áàðà èíäèêàòîðà
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
}
else //èíà÷å ïðîâåðÿåì íà ðàçâîðîò
if (i_last_close-Kurs>Revers) //åñëè ðàçíèöà çàêðûòèÿ òåêóùåãî áàðà èíäèêàòîðà è íîâîãî êóðñà áîëüøå øóìà
{ //òî ðàçâîðîò (íîâûé áàð âíèç)
i_close=i_last_close; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî ðàâíî åãî ìàêñèìóìó
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
i_open=i_close-Kletka; //îòêðûòèå íîâîãî áàðà èíäèêàòîðà íà êëåòêó âíèç
i_high=i_open; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí îòêðûòèþ ïðåäûäóùåãî
i_close=Kurs; //çàêðûòèå íîâîãî áàðà èíäèêàòîðà ðàâíî êóðñó
i_low=i_close; //ìèíèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí åãî çàêðûòèþ
i_last_close=i_low; //ñîõðàíèì ìèíèìóì òåêóùåãî áàðà èíäèêàòîðà
i_time=TimeCurrent(); //âðåìÿ çàêðûòèÿ íîâîãî áàðà èíäèêàòîðà ðàâíî òåêóùåìó âðåìåíè ñåðâåðà
WriteNewBar(); //çàïèøåì íîâûé áàð èíäèêàòîðà
}
else //èíà÷å øóì íå ïðåâûøåí, íàðèñóåì òåíü
{
if (i_close!=Kurs) //åñëè çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà íå ðàâíî êóðñó
{ //òî ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà ñ òåíüþ
i_close=Kurs; //çàêðûòèå òåêóùåãî áàðà èíäèêàòîðà ðàâíî êóðñó
WriteBar(); //ïåðåïèøåì òåêóùèé áàð èíäèêàòîðà
}
}
}
return(0);
}
void WriteNewBar() //ôóíêöèÿ çàïèñè íîâîãî áàðà
{
FileSeek(ExtHandle, 0, SEEK_CUR); //äëÿ èñêëþ÷åíèÿ îøèáîê ïåðåìåùåíèÿ
FileWriteInteger(ExtHandle, i_time, LONG_VALUE); //4 áàéòà òåêóùåå âðåìÿ ñåðâåðà
FileWriteDouble(ExtHandle, i_open*d_point, DOUBLE_VALUE); //8 áàéò îòêðûòèå
FileWriteDouble(ExtHandle, i_low*d_point, DOUBLE_VALUE); //8 áàéò ìèíèìóì
FileWriteDouble(ExtHandle, i_high*d_point, DOUBLE_VALUE); //8 áàéò ìàêñèìóì
FileWriteDouble(ExtHandle, i_close*d_point, DOUBLE_VALUE); //8 áàéò çàêðûòèå
FileWriteDouble(ExtHandle, i_high-i_low, DOUBLE_VALUE); //8 áàéò âûñîòà áàðà â ïóíêòàõ
FileFlush(ExtHandle); //ñáðîñ áóôåðà â ôàéë
FileSeek(ExtHandle, 0, SEEK_CUR); //äëÿ èñêëþ÷åíèÿ îøèáîê ïåðåìåùåíèÿ
if (b_work) //åñëè íå ïèøåì èñòîðèþ, òî îáíîâèì èíäèêàòîð
{
if(hwnd==0)hwnd=WindowHandle(Symbol(),ind_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
}
return(0);
}
void WriteBar() //ôóíêöèÿ ïåðåçàïèñè òåêóùåãî áàðà
{
FileSeek(ExtHandle, -44, SEEK_CUR); //ïåðåìåùàåìñÿ íà íà÷àëî òåêóùåãî áàðà
FileWriteInteger(ExtHandle, i_time, LONG_VALUE); //4 áàéòà òåêóùåå âðåìÿ ñåðâåðà
FileWriteDouble(ExtHandle, i_open*d_point, DOUBLE_VALUE); //8 áàéò îòêðûòèå
FileWriteDouble(ExtHandle, i_low*d_point, DOUBLE_VALUE); //8 áàéò ìèíèìóì
FileWriteDouble(ExtHandle, i_high*d_point, DOUBLE_VALUE); //8 áàéò ìàêñèìóì
FileWriteDouble(ExtHandle, i_close*d_point, DOUBLE_VALUE); //8 áàéò çàêðûòèå
FileWriteDouble(ExtHandle, i_high-i_low, DOUBLE_VALUE); //8 áàéò âûñîòà áàðà â ïóíêòàõ
FileFlush(ExtHandle); //ñáðîñ áóôåðà â ôàéë
FileSeek(ExtHandle, 0, SEEK_CUR); //äëÿ èñêëþ÷åíèÿ îøèáîê ïåðåìåùåíèÿ
if (b_work) //åñëè íå ïèøåì èñòîðèþ, òî îáíîâèì èíäèêàòîð
{
if(hwnd==0)hwnd=WindowHandle(Symbol(),ind_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
}
return(0);
}
int WriteHistory() //ôóíêöèÿ çàïèñè èñòîðèè
{
b_work=false; //ñíîñèì ôëàã ðàáîòû (ïèøåì èñòîðèþ)
int i=0; //èíäåêñ ñàìîãî ñòàðîãî áàðà íà òåêóùåì ãðàôèêå
int t=0; //ñ÷åò÷èê çàïèñàííûõ áàðîâ â ôàéë èíäèêàòîðà
int l,h; //ìèíèìóì è ìàêñèìóì òåêóùåãî áàðà íà òåêóùåì ãðàôèêå
i=Bars-2; //áåðåì èíäåêñ ñàìîãî ñòàðîãî áàðà íà òåêóùåì ãðàôèêå
//----------------------Ïèøåì ñàìûé ïåðâûé áàð
i_time=Time[i]+i_period; //âðåìÿ çàêðûòèÿ áàðà
i_low=NormalizeDouble(Low[i],i_digits+1)/d_point; //ìèíèìóì áàðà â ïóíêòàõ
i_low=i_low-MathMod(i_low,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
i_high=NormalizeDouble(High[i],i_digits+1)/d_point; //ìàêñèìóì áàðà â ïóíêòàõ
i_high=i_high-MathMod(i_high,Kletka); //íîðìàëèçóåì ìàêñèìóì ê êëåòêå
if (Open[i]>Close[i]) //åñëè îòêðûòè ñàìîãî ñòàðîãî áàðà ãðàôèêà áîëüøå çàêðûòèÿ
{ //òî áàð âíèç
i_open=i_high; //îòêðûòèå ïåðâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó áàðà ãðàôèêà
i_close=i_low; //çàêðûòèå ïåðâîãî áàðà èíäèêàòîðà ðàâíî ìèíèìóìó áàðà ãðàôèêà
}
else //èíà÷å ñàìûé ñòàðûé áàð ãðàôèêà ââåðõ
{
i_open=i_low; //îòêðûòèå ïåðâîãî áàðà èíäèêàòîðà ðàâíî ìèíèìóìó áàðà ãðàôèêà
i_close=i_high; //çàêðûòèå ïåðâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó áàðà ãðàôèêà
}
WriteBar(); //çàïèøåì ïåðâûé áàð
//----------------------------------------------
for (i=i-1; i>=0; i--) //äëÿ âñåx áàðîâ ãðàôèêà íà÷èíàÿ ñî 2-ãî ñòàðåéøåãî
{
if (i>0) i_time=Time[i]+i_period; //åñëè íå ïîñëåäíèé áàð, òî áåðåì âðåìÿ çàêðûòèÿ òåêóùåãî áàðà íà ãðàôèêå
else i_time=TimeCurrent(); //èíà÷å áåðåì òåêóùåå âðåìÿ ñåðâåðà
if (i_open>i_close) //åñëè ïðåäûäóùèé áàð èíäèêàòîðà âíèç
{
l=NormalizeDouble(Low[i],i_digits+1)/d_point; //ìèíèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
l=l-MathMod(l,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
if (l<i_close) //åñëè ìèíèìóì òåêóùåãî áàðà ìåíüøå ïîñëåäíåãî áàðà èíäèêàòîðà
{ // òî äâèæåíèå âíèç ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_close=l; //çàêðûòèå áàðà èíäèêàòîðà ðàâíî ìèíèìóìó òåêóùåãî áàðà
i_low=l; //ìèíèìóì áàðà èíäèêàòîðà ðàâåí ìèíèìóìó òåêóùåãî áàðà
WriteBar(); //ïåðåïèøåì áàð èíäèêàòîðà
}
else //èíà÷å âîçìîæíî ðàçâîðîò
{
h=NormalizeDouble(High[i],i_digits+1)/d_point; //ìàêñèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
h=h-MathMod(h,Kletka); //íîðìàëèçóåì ìàêñèìóì ê êëåòêå
if (h-i_close>Revers) //åñëè ðàçíèöà ìàêñèìóìà òåêóùåãî áàðà è çàêðûòèÿ ïîñëåäíåãî áàðà èíäèêàòîðàè áîëüøå øóìà
{ //òî ðàçâîðîò ââåðõ
i_open=i_close+Kletka; //îòêðûòèå íîâîãî áàðà èíäèêàòîðà íà êëåòêó ââåðõ
i_low=i_open; //ìèíèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí îòêðûòèþ ïðåäûäóùåãî áàðà èíäèêàòîðà
i_close=h; //çàêðûòèå íîâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà ãðàôèêà
i_high=h; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà ãðàôèêà
WriteNewBar(); //çàïèøåì íîâûé áàð èíäèêàòîðà
}
}
}
else //èíà÷å ïðåäûäóùèé áàð èíäèêàòîðà ââåðõ
{
h=NormalizeDouble(High[i],i_digits+1)/d_point; //ìàêñèìóì òåêóùåãî áàðà íà ãðàôèêå
h=h-MathMod(h,Kletka); //íîðìàëèçóåì ìàêñèìóì ê êëåòêå
if (h>i_close) //åñëè ìàêñèìóì òåêóùåãî áàðà áîëüøå ïîñëåäíåãî áàðà èíäèêàòîðà
{ // òî äâèæåíèå ââåðõ ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_close=h; //çàêðûòèå áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà
i_high=h; //ìàêñèìóì áàðà èíäèêàòîðà ðàâåí ìàêñèìóìó òåêóùåãî áàðà
WriteBar(); //ïåðåïèøåì áàð èíäèêàòîðà
}
else //èíà÷å âîçìîæíî ðàçâîðîò
{
l=NormalizeDouble(Low[i],i_digits+1)/d_point; //ìèíèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
l=l-MathMod(l,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
if (i_close-l>Revers) // åñëè ðàçíèöà çàêðûòèÿ ïîñëåäíåãî áàðà èíäèêàòîðàè è ìèíèìóìà òåêóùåãî áàðà áîëüøå øóìà
{ //òî ðàçâîðîò âíèç
i_open=i_close-Kletka; //îòêðûòèå íîâîãî áàðà èíäèêàòîðà íà êëåòêó âíèç
i_high=i_open; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí îòêðûòèþ ïðåäûäóùåãî áàðà èíäèêàòîðà
i_close=l; //çàêðûòèå íîâîãî áàðà èíäèêàòîðà ðàâíî ìèíèìóìó òåêóùåãî áàðà ãðàôèêà
i_low=l; //ìèíèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí ìèíèìóìó òåêóùåãî áàðà ãðàôèêà
WriteNewBar(); //çàïèøåì íîâûé áàð èíäèêàòîðà
}
}
}
//----------÷åðåç êàæäûå 1000 çàïèñåé îáíîâèì îêíî èíäèêàòîðà åñëè åñòü è íàðèñóåì êîìåíòàðèé
t++; //óâåëè÷èì ñ÷åò÷èê çàïèñè áàðîâ èíäèêàòîðà
if (t>1000)
{
t=0;
if(hwnd==0)hwnd=WindowHandle(Symbol(),ind_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
Comment ("\nÑêðèïò Êðåñòèêè-Íîëèêè v",s_ver," çàïóùåí. Êëåòêà: ",Kletka,"p. Ðàçâîðîò ", Revers, "p.",
"\nÎòêðîéòå àâòîíîìíûé ãðàôèê ",c_symbol,",M",ind_period,
"\n(Ôàéë -> Îòêðûòü àâòîíîìíî -> ",c_symbol,",M",ind_period," -> Îòêðûòü)",
"\n\nÏèøåì èñòîðèþ: Âðåìÿ ",TimeToStr(i_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
}
}
i_last_close=i_close; // ñîõðàíèì çàêðûòèå ïîñëåäíåãî áàðà èíäèêàòîðà
if(hwnd==0)hwnd=WindowHandle(Symbol(),ind_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
b_work=true; //óñòàíîâèì ôëàã ðàáîòû (çàêîí÷èëè ïèñàòü èñòîðèþ: ðàáîòàåì)
return(0);
}
void deinit() //âûãðóçêà ñêðèïòà èíäèêàòîðà
{
if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; } //çàêðîåì ôàéë èíäèêàòîðà åñëè åñòü
Comment("\nÑêðèïò Êðåñòèêè-íîëèêè v",s_ver," âûãðóæåí");
}
Comments