Tick-Tack-toe_v1

Download script
Author: Copyright � 2009, GoldenFox Corp.
Tick-Tack-toe_v1

This 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.

Miscellaneous
It writes information to fileIt writes information to fileIt writes information to fileIt writes information to file
7 Views
0 Downloads
0 Favorites
Tick-Tack-toe_v1
//+-------------------------------------------------------------------+
//|                                              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