Tick-Tack-toe_v1
Download scriptThis script is designed to generate a specialized visual representation of financial market data known as a "Cross-Tic-Tac-Toe" chart. Instead of showing standard price candles, it transforms raw market movements into a structured, grid-like format to help traders visualize trends and potential reversals more clearly.
Core Logic Overview
The script operates by taking the live stream of price updates and "rounding" them into specific price levels (cells). By doing this, it filters out minor market noise and focuses on significant price movements. The logic can be broken down into three main stages:
1. Price Normalization (The Grid) The script uses a user-defined "Cell Size." It takes the current market price and snaps it to the nearest increment of that size. This creates a digital "grid" where only moves that cross these predefined boundaries are considered significant.
2. Trend Detection and Movement The script continuously monitors the direction of the price:
- Trend Continuation: If the price continues to move in the same direction (up or down) beyond the current grid level, the script updates the current "bar" to reflect this new position.
- Reversal Logic: The script looks for a specific threshold—defined by the user as the number of cells required to trigger a turn. If the price moves against the current trend by a sufficient distance (greater than the defined "noise" level), the script recognizes this as a reversal and creates a new bar in the opposite direction.
- Shadow Tracking: For very small movements that do not meet the criteria for a new cell or a reversal, the script adds a "shadow" to the current bar. This shows that price movement is occurring without changing the primary trend structure.
3. History and Data Management When you first run the script, it performs a one-time historical analysis:
- It scans all past data on your current chart.
- It reconstructs the "Cross-Tic-Tac-Toe" history by applying the same grid and reversal logic to old data.
- It saves this constructed history into an external file so that the visual data is preserved and consistent.
User Experience and Visuals
- Real-Time Updates: Once the historical data is loaded, the script enters a live mode where it processes every new tick of the market instantly.
- Dynamic Visualization: It communicates with an independent chart window to redraw the bars in real-time.
- Information Display: The script provides a text comment on the screen showing current settings, such as the cell size and the "noise" threshold, and updates the timestamp of the last processed movement.
In summary, this tool acts as a filter that converts chaotic price action into a structured series of blocks, highlighting the "true" direction of the market while ignoring insignificant fluctuations.
//+-------------------------------------------------------------------+
//| Tick-Tack-toe_v1.mq4 |
//| Copyright © 2009, GoldenFox corp. |
//| |
//| Ãðàôèê "Êðåñòèêè-Íîëèêè" |
//| |
//| |
//| Ìåòîä îòîáðàæåíèÿ ãðàôèêà îñíîâàí íà ñêðèïòå Period_Converter.mq4 |
//| âûëîæåííûé íà ñàéòå http://mql4.com/ru/ |
//| |
//| Äëÿ çàïóñêà ñêðèïòà íåîáõîäèìî ïåðåòàùèòü åãî íà òåêóùèé ãðàôèê, |
//| â ïîÿâèâøåìñÿ îêíå ïàðàìåòðîâ ñêðèïòà íà âêëàäêå "Îáùèå" óñòàíî- |
//| âèòü ãàëî÷êó "Ðàçðåøèòü èìïîðò ôóíêöèé èç DLL", è ñíÿòü ãàëî÷êó |
//| "Ðó÷íîå ïîäòâåðæäåíèå âûçîâà". Íà âêëàäêå "Âõîäíûå ïàðàìåòðû" |
//| óñòàíîâèòü íåîáõîäèìûå ïàðàìåòðû ðàáîòû ñêðèïòà è íàæàòü "ÎÊ". |
//| |
//| Âõîäíûå ïàðàìåòðû: |
//| Kletka - ðàçìåð êëåòêè â ïóíêòàõ |
//| RazvorotKletka - êîë-âî êëåòêîê, íåîáõîäèìîå äëÿ ðàçâîðîòà |
//| |
//| (çíà÷åíèÿ ïî óìîë÷àíèþ âçÿòû äëÿ ïàðû 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.0"; //âåðñèÿ èíäèêàòîðà
extern int Kletka=50; //ðàçìåð êëåòêè â ïóíêòàõ
extern int RazvorotKletka=2; //øóì - êîë-âî êëåòîê, ñ÷èòàþùèõñÿ øóìàìè ðûíêà
static int Shum=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=10.0;
static int hwnd=0,cnt=0;
static int ind_period=2; //Ïåðèîä ãðàôèêà èíäèêàòîðà
static int i_period=0; //ïåðèîä òåêóùåãî ãðàôèêà â ìèíóòàõ
static string c_symbol; //ñèìâîë òåêóùåãî ãðàôèêà
static bool b_work=false; //fals - ïèøåì èñòîðèþ; true - ðàáîòàåì
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//---- Çàãîëîâî÷íûå äàííûå
int version=400;
string c_copyright;
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
c_symbol=Symbol();
int i_unused[13];
i_digits=Digits;
d_point=Point;
i_period=Period()*60; //ïåðèîä òåêóùåãî ãðàôèêà â ìèíóòàõ
Shum=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(); //ïèøåì èñòîðèþ.
if(hwnd==0)hwnd=WindowHandle(Symbol(),i_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
Comment("\nÈíäèêàòîð Êðåñòèêè-Íîëèêè v",s_ver," çàïóùåí. Êëåòêà: ",Kletka,"p. Ðàçâîðîò ", Shum, "p.",
"\nÎòêðîéòå àâòîíîìíûé ãðàôèê ",c_symbol,",M",ind_period,
"\n(Ôàéë -> Îòêðûòü àâòîíîìíî -> ",c_symbol,",M",ind_period," -> Îòêðûòü)");
RefreshRates(); //îáíîâèì êîòèðîâêó
Kurs=(Bid/d_point)-MathMod(Bid/d_point,Kletka); //íîðìàëèçóåì êóðñ ê êëåòêå
CalculateBar(); //äîáàâèì òåêóùóþ êîòèðîâêó â ôàéë
//---------------- îñíîâíîé öèêë
while(IsStopped()==false) //Ðàáîòàåì ïîêà íå ïîëó÷åíà êîìàíäà çàâåðøåíèÿ
{
if(RefreshRates()) //åñëè åñòü íîâàÿ êîòèðîâêà
{
Kurs=(Bid/d_point)-MathMod(Bid/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>Shum) //åñëè ðàçíèöà íîâîãî êóðñà è çàêðûòèÿ òåêóùåãî áàðà èíäèêàòîðà áîëüøå øóìà
{ //òî ðàçâîðîò (íîâûé áàð ââåðõ)
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>Shum) //åñëè ðàçíèöà çàêðûòèÿ òåêóùåãî áàðà èíäèêàòîðà è íîâîãî êóðñà áîëüøå øóìà
{ //òî ðàçâîðîò (íîâûé áàð âíèç)
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, last_fpos+44, SEEK_SET); //ïåðåìåùàåìñÿ â êîíåö ôàéëà
WriteBar(); //Çàïèñûâàåì íîâûé áàð
return(0);
}
void WriteBar() //ôóíêöèÿ ïåðåçàïèñè òåêóùåãî áàðà
{
last_fpos=FileTell(ExtHandle); //ïîëó÷àåì ïîçèöèþ ïîñëåäíåãî áàðà â ôàéëå
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, last_fpos, SEEK_SET); //ïåðåìåùàåìñÿ íà íà÷àëî çàïèñàííîãî áàð
if (b_work) //åñëè íå ïèøåì èñòîðèþ, òî îáíîâèì èíäèêàòîð
{
if(hwnd==0)hwnd=WindowHandle(Symbol(),ind_period); //íàéäåì îêíî èíäèêàòîðà
if(hwnd!=0) PostMessageA(hwnd,WM_COMMAND,33324,0); //åñëè åñòü îêíî, òî îáíîâèì åãî
}
//Print ("Çàïèñü: âðåìÿ ",TimeToStr(i_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS)," i_open ",i_open," i_low ",i_low," i_high ",i_high," i_close ",i_close," ðàçìàõ ",d_volume);
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=Low[i]/d_point; //ìèíèìóì áàðà â ïóíêòàõ
i_low=i_low-MathMod(i_low,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
i_high=High[i]/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-ãî ñòàðåéøåãî
{
i_time=Time[i]+i_period; //âðåìÿ çàêðûòèÿ òåêóùåãî áàðà íà ãðàôèêå
if (i_open>i_close) //åñëè ïðåäûäóùèé áàð èíäèêàòîðà âíèç
{
l=Low[i]/d_point; //ìèíèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
l=l-MathMod(l,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
if (l<i_close) //åñëè ìèíèìóì òåêóùåãî áàðà ìåíüøå ïîñëåäíåãî áàðà èíäèêàòîðà
{ // òî äâèæåíèå âíèç ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_close=l; //çàêðûòèå áàðà èíäèêàòîðà ðàâíî ìèíèìóìó òåêóùåãî áàðà
i_low=l; //ìèíèìóì áàðà èíäèêàòîðà ðàâåí ìèíèìóìó òåêóùåãî áàðà
WriteBar(); //ïåðåïèøåì áàð èíäèêàòîðà
}
else //èíà÷å âîçìîæíî ðàçâîðîò
{
h=High[i]/d_point; //ìàêñèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
h=h-MathMod(h,Kletka); //íîðìàëèçóåì ìàêñèìóì ê êëåòêå
if (h-i_close>Shum) //åñëè ðàçíèöà ìàêñèìóìà òåêóùåãî áàðà è çàêðûòèÿ ïîñëåäíåãî áàðà èíäèêàòîðàè áîëüøå øóìà
{ //òî ðàçâîðîò ââåðõ
i_open=i_close+Kletka; //îòêðûòèå íîâîãî áàðà èíäèêàòîðà íà êëåòêó ââåðõ
i_low=i_open; //ìèíèìóì íîâîãî áàðà èíäèêàòîðà ðàâåí îòêðûòèþ ïðåäûäóùåãî áàðà èíäèêàòîðà
i_close=h; //çàêðûòèå íîâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà ãðàôèêà
i_high=h; //ìàêñèìóì íîâîãî áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà ãðàôèêà
WriteNewBar(); //çàïèøåì íîâûé áàð èíäèêàòîðà
}
}
}
else //èíà÷å ïðåäûäóùèé áàð èíäèêàòîðà ââåðõ
{
h=High[i]/d_point; //ìàêñèìóì òåêóùåãî áàðà íà ãðàôèêå
h=h-MathMod(h,Kletka); //íîðìàëèçóåì ìàêñèìóì ê êëåòêå
if (h>i_close) //åñëè ìàêñèìóì òåêóùåãî áàðà áîëüøå ïîñëåäíåãî áàðà èíäèêàòîðà
{ // òî äâèæåíèå ââåðõ ïðîäîëæàåòñÿ. ñîõðàíèì êîòèðîâêó
i_close=h; //çàêðûòèå áàðà èíäèêàòîðà ðàâíî ìàêñèìóìó òåêóùåãî áàðà
i_high=h; //ìàêñèìóì áàðà èíäèêàòîðà ðàâåí ìàêñèìóìó òåêóùåãî áàðà
WriteBar(); //ïåðåïèøåì áàð èíäèêàòîðà
}
else //èíà÷å âîçìîæíî ðàçâîðîò
{
l=Low[i]/d_point; //ìèíèìóì òåêóùåãî áàðà íà ãðàôèêå â ïóíêòàõ
l=l-MathMod(l,Kletka); //íîðìàëèçóåì ìèíèìóì ê êëåòêå
if (i_close-l>Shum) // åñëè ðàçíèöà çàêðûòèÿ ïîñëåäíåãî áàðà èíäèêàòîðàè è ìèíèìóìà òåêóùåãî áàðà áîëüøå øóìà
{ //òî ðàçâîðîò âíèç
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. Ðàçâîðîò ", Shum, "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; // ñîõðàíèì çàêðûòèå ïîñëåäíåãî áàðà èíäèêàòîðà
b_work=true; //óñòàíîâèì ôëàã ðàáîòû (çàêîí÷èëè ïèñàòü èñòîðèþ: ðàáîòàåì)
return(0);
}
void deinit() //âûãðóçêà ñêðèïòà èíäèêàòîðà
{
if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; } //çàêðîåì ôàéë èíäèêàòîðà åñëè åñòü
Comment("\nÑêðèïò Êðåñòèêè-íîëèêè v",s_ver," âûãðóæåí");
}
Comments