Author: Copyright � 2011, MetaQuotes Software Corp.
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
X_O_V1
//+------------------------------------------------------------------+
//|                                              Êðåñòèêè-Íîëèêè.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
// âûâîäèì îêíî ñ ïàðàìåòðàìè ïðè çàïóñêå
#property show_inputs
// ïåðèîä îáíîâëåíèÿ ãðàôèêà
extern int delay = 100;
// ìèíèìàëüíîå êîëè÷åñòâî ïóíêòîâ äëÿ ðàçâîðîòà
extern int Razvorot=372;
// ìèíèìàëüíîå êîëè÷åñòâî ïóíêòîâ äëÿ ïðîäîëæåíèÿ òåíäåíöèè
extern int PryamoyHod=124;
// øèðèíà ñòîëáöîâ â êîëè÷åñòâå áàðîâ
extern int Dlina=2;
// ïîêàçûâàåì ñåòêó
extern bool Setka=false;
//âðåìÿ íà÷àëà ðàñ÷åòà äëÿ ãëóáîêèõ ãðàôèêîâ
extern string BeginDate="2000.01.01 00:00";
// ôëàã óñïåøíîãî âûïîëíåíèÿ èíèöèàëèçàöèè
bool initOk = true;
// ãëîáàëüíàÿ ïåðåìåííàÿ äëÿ ñîõðàíåíèÿ äîñòèãíóòîãî óðîâíÿ íà ìàðêåðå
double PP;
// ìàññèâû èìåí îáúåêòîâ äëÿ êîîðåêòíîãî óäàëåíèÿ òîëüêî òîãî ÷òî ñîçäàë ñêðèïò
string Names[],Names1[],VLines[],HLines[];
// ìàññèâ äî ìàðêåðà
int prev[];
// èíèöèàëèçàöèÿ ñêðèïòà
int init() 
{
   // ïûòàåìñÿ ñîçäàòü âåðòèêàëüíóþ ëèíèþ
   if (!ObjectCreate("Our_Time", OBJ_VLINE, 0, WindowTimeOnDropped(), 0)) 
   {
      Print("Îøèáêà ïðè ñîçäàíèè âåðòèêàëüíîé ëèíèè Our_Time");
      initOk = false;
      return (0);
   }
   // óñòàíàâëèâàåì öâåòà ñîçäàííûõ ëèíèé
   ObjectSet("Our_Time", OBJPROP_COLOR, Green);
//   ObjectsDeleteAll();
   // îáíîâëÿåì îêíî
   WindowRedraw();
   return (0);
}

// äåèíèöèàëèçàöèÿ ñêðèïòà
int deinit() 
{
   // åñëè èíèöèàëèçàöèÿ íå óäàëàñü - âûõîäèì
   if (!initOk) 
   {
      return (0);
   }
   // óíè÷òîæàåì âåðòèêàëüíóþ ëèíèþ
   ObjectDelete("Our_Time");
   // îáíîâëÿåì îêíî
   //ObjectsDeleteAll();
   //óäàëÿåì ïðîøëûé ðèñóíîê
   for(int l=ArraySize(Names)-1;l>=0;l--)
     {
      ObjectDelete(Names[l]);
      ObjectDelete(Names1[l]);
     }
     if(Setka)
     {     
      for( l=ArraySize(VLines)-1;l>=0;l--)
         ObjectDelete(VLines[l]);
      for( l=ArraySize(HLines)-1;l>=0;l--)
         ObjectDelete(HLines[l]);
      }
   WindowRedraw();
   return (0);
}


int start()
  {
//----
   int nach_bar;
   int temp2;
   double Ptemp;
   int bgbr=iBarShift(NULL,0,StrToTime(BeginDate));
   double BegPrice=Open[bgbr];
   bool krestik;
   string name,name1,nameHLine,nameVLine;
   int ch,chvl,chhl;
   double min_znach,max_znach;
   // åñëè èíèöèàëèçàöèÿ íå óäàëàñü - âûõîäèì
   if (!initOk) 
   {
      return (0);
   }
   // ïðåäûäóùèå ïîëîæåíèÿ óïðàâëÿþùèõ ëèíèé
   datetime timePrevLine = -1;
   while (!IsStopped()) 
   {
      // âûäåðæèâàåì ïàóçó äëÿ óìåíüøåíèÿ íàãðóçêè íà ñèñòåìó
      Sleep(delay);
      // ïðîâåðÿåì íàëè÷èå óïðàâëÿþùèõ ëèíèé íà ãðàôèêå (åñëè îòñóòñòâóþò - çàâåðøàåìñÿ)
      if (ObjectFind("Our_Time") == -1) 
      {
         Print("Íå íàéäåíà ëèíèÿ Our_Time");
         break;
      }
      // ñ÷èòûâàåì ïîëîæåíèÿ óïðàâëÿþùèõ ëèíèé
      datetime timeLine = ObjectGet("Our_Time", OBJPROP_TIME1);
      // ïðîâåðÿåì íåîáõîäèìîñòü îáíîâëåíèÿ ïîñòðîåíèé
      if (timeLine == timePrevLine)
      {
         continue;
      }
      
      //óäàëÿåì ïðîøëûé ðèñóíîê
      for(int l=ch-1;l>=0;l--)
         {
         ObjectDelete(Names[l]);
         ObjectDelete(Names1[l]);
         }
      ch=0;    
      if(Setka)
      {
      for( l=chvl-1;l>=0;l--)
         ObjectDelete(VLines[l]);
      chvl=0;
      for( l=chhl-1;l>=0;l--)
         ObjectDelete(HLines[l]);
      chhl=0;
      }
      timePrevLine = timeLine;
      // îïðåäåëÿåì ñìåùåíèÿ áàðîâ
      int shiftLine = iBarShift(Symbol(), Period(), timeLine);
      if (shiftLine==0)
      {
         Alert("Íåäîïóñòèìîå ïîëîæåíèå ìàðêåðíîé ëèíèè");
         break;
      }
      // îñíîâíîå âû÷èñëåíèå
      PP=z(prev,Razvorot,PryamoyHod,bgbr,shiftLine,BegPrice,0);
      //ïðîâåðêà ïåðåïîëíåíèÿ îêíà îòîáðàæåíèÿ
      if((bgbr-shiftLine)/Dlina<ArraySize(prev))
      {
         Alert("Äî ìàðêåðà:   ðàçìåð ìàññèâà= "+ArraySize(prev)+"    Êîëè÷åñòâî áàðîâ= "+(Bars-1-shiftLine));
         break;
      }
      //áëîê îòðèñîâêè ***********************
      //ïîäãîòîâèòåëüíûå ðàñ÷åòû, ñ êàêîãî áàðà ðèñîâàòü
      nach_bar=shiftLine+ArraySize(prev)*Dlina;
      Ptemp=BegPrice;//öåíà ñ êîòîðîé íà÷èíàåì ðàñ÷åò
      //âû÷èñëÿåì íàèáîëüøóþ è íàèìåíüøóþ öåíó êîòîðàÿ áóäåò íà ãðàôèêå äëÿ ñåòêè
      if(Setka)
      {
      double promejut[];
      ArrayResize(promejut,ArraySize(prev));
      ArrayInitialize(promejut,0.0);
      promejut[0]=BegPrice+prev[0]*PryamoyHod*Point;
      for(int q=1;q<=ArraySize(prev)-1;q++)
         {
         promejut[q]=promejut[q-1]+prev[q]*PryamoyHod*Point;
         }
      min_znach=promejut[ArrayMinimum(promejut)];
      max_znach=promejut[ArrayMaximum(promejut)];
      Print(min_znach+"   "+max_znach);
      //ñòðîèì âèðòèêàëüíûå ëèíèè ñåòêè
      for(int a=nach_bar;a>=shiftLine;a=a-Dlina)
      {
         chvl++;
         ArrayResize(VLines,chvl);
         nameVLine="VLine"+chvl;
         VLines[chvl-1]=nameVLine;
         ObjectCreate(nameVLine,OBJ_VLINE,0,Time[a],0);
         ObjectSet(nameVLine,OBJPROP_COLOR,Silver);
      }
      //ñòðîèì ãîðèçîíòàëüíûå ëèíèè ñåòêè
      for(double o=min_znach;o<=max_znach;o=o+PryamoyHod*Point)
      {
         chhl++;
         ArrayResize(HLines,chhl);
         nameHLine="HLine"+chhl;
         HLines[chhl-1]=nameHLine;
         ObjectCreate(nameHLine,OBJ_HLINE,0,Time[1],o);
         ObjectSet(nameHLine,OBJPROP_COLOR,Silver);
      }
      }
         
      for(int i=0;i<=ArraySize(prev);i++)//öèêë äëÿ âñåõ ñòîëáöîâ
      {
         //Print(prev[i]);
         if(prev[i]<0)//ôëàã äëÿ îïðåäåëåíèÿ êðåñòèêà èëè íîëèêà
            {
            krestik=false;
            temp2=-prev[i];
            }
         else
            {
            krestik=true;
            temp2=prev[i];
            }   
            if(i!=0)//óñëîâèå äëÿ îïðåäåëåíèÿ íà÷àëà îòðèñîâêè â ïåðâûé ðàç íè÷åãî íå ñìåùàåì
            {
               if(krestik)//ñìåùàåì ââåðõ
               {
                  Ptemp=Ptemp+PryamoyHod*Point;
               }
               else//ñìåùàåì âíèç
               {
                  Ptemp=Ptemp-PryamoyHod*Point;
               }
            }
         for(int j=temp2;j>0;j--)//öèêë äëÿ ýëåìåíòîâ ñòîëáöà
         {
               name="Prev"+i+"a"+j;
               name1="Prev_"+i+"a"+j;

               if(krestik)
               {
                  
                  ch++;
                  ArrayResize(Names,ch);
                  ArrayResize(Names1,ch);
                  Names[ch-1]=name;
                  Names1[ch-1]=name1;
                  //ðèñóåì êðåñòèê
                  //Print(Ptemp+"               "+(Ptemp+PryamoyHod*Point));
                  ObjectCreate(name,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp+PryamoyHod*Point);
                  ObjectSet(name,OBJPROP_COLOR,OldLace);
                  ObjectSet(name,OBJPROP_BACK,true);
                  //ðèñóåì ãðàíèöó
                  ObjectCreate(name1,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp+PryamoyHod*Point);
                  ObjectSet(name1,OBJPROP_COLOR,Black);
                  ObjectSet(name1,OBJPROP_BACK,false);

                  Ptemp=Ptemp+PryamoyHod*Point;
            
               }
               else
               {  
                  
                  ch++;
                  ArrayResize(Names,ch);
                  ArrayResize(Names1,ch);
                  Names[ch-1]=name;
                  Names1[ch-1]=name1;
                  //ðèñóåì íîëèê
                  //Print(Ptemp+"               "+(Ptemp-PryamoyHod*Point));
                  ObjectCreate(name,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp-PryamoyHod*Point);
                  ObjectSet(name,OBJPROP_COLOR,Red);
                  ObjectSet(name,OBJPROP_BACK,true);
                  //ðèñóåì ãðàíèöó
                  ObjectCreate(name1,OBJ_RECTANGLE,0,Time[nach_bar-i*Dlina],Ptemp,Time[nach_bar-i*Dlina-Dlina],Ptemp-PryamoyHod*Point);
                  ObjectSet(name1,OBJPROP_COLOR,Black);
                  ObjectSet(name1,OBJPROP_BACK,false);

                  Ptemp=Ptemp-PryamoyHod*Point;
                  
               }
         }
      }
      Comment(shiftLine);
   }   

      
      


//----
   return(0);
  }
//+------------------------------------------------------------------+

// ****************************************************************************************
// ôóíêöèÿ äëÿ ôîðìèðîâàíèÿ ìàññèâà ïîñòðîåíèÿ ôóíêöèÿ âîçâðàùàåò ïîñëåäíåå äîñòèãíóòîå çíà÷åíèå
// k[]-èñêîìûé ìàññèâ
// razv-ðàçâîðîò â ïóíêòàõ
// prhod-ïðÿìîé õîä â ïóíêòàõ
// begin-íîìåð áàðà íà÷àëà ðàñ÷åòà
// end-íîìåð áàðà êîíåö ðàñ÷åòà
// begin_price-öåíà ñ êîòîðîé âåäåì ðàñ÷åò
// vektor-êóäà ñ÷èòàåì -1 âíèç, +1 íàâåðõ
//*****************************************************************************************
double z (int& k[],int razv,int prhod,int begin,int end,double begin_price,int vektor)
{
   double pr=begin_price;//òåêóùàÿ öåíà
   int index=0;//òåêóùèé èíäåêñ ìàññèâà
   int temp1;
   ArrayResize(k,1);//ïåðåèíèöèàëèçèðóåì ìàññèâ
   ArrayInitialize(k,vektor); //çàäåì íàïðàâëåíèå äâèæåíèÿ
   
   for(int i=begin;i>=end;i--)//ïðîõîä ïî áàðàì äî ìàðêåðà
   {
     if(k[index]>=0)//ïðîâåðêà ÷òî çàïèñàíî â ìàññèâ ïîñëåäíèì êðåñòèê èëè íîëèê Õ=+,0=0 èëè - 
     {
      if(High[i]>=pr+prhod*Point)//ïðîâåðêà íà ïðÿìîé õîä
      {
         //ñìîòðèì íà ñêîëüêî êðåñòèêîâ óøëà öåíà
         temp1=((High[i]-pr)/Point)/prhod;
         //çàïîìèàåì äîñòèãíóòûé óðîâåíü
         pr=pr+prhod*temp1*Point;
         //çàïîëíÿåì ìàññèâ
         k[index]=k[index]+temp1;
         continue;
      }   
      if(Low[i]<=pr-razv*Point)//ïðîâåðêà íà îáðàòíûé õîä
      {
         //ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
         temp1=((pr-Low[i])/Point)/prhod;
         //çàïîìèíàåì äîñòèãíóòûé óðîâåíü
         pr=pr-prhod*temp1*Point;
         //óâåëè÷èâàåì êîëè÷åñòâî ýëåìåíòîâ ìàññèâà íà åäèíèöó
         index++;
         ArrayResize(k,index+1);
         //çàïîëíÿåì ìàññèâ 
         k[index]=-temp1;
      }
     }
     else
     {
      if(Low[i]<=pr-prhod*Point)//ïðîâåðêà íà ïðÿìîé õîä
      {
         //ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
         temp1=((pr-Low[i])/Point)/prhod;
         //çàïîìèàåì äîñòèãíóòûé óðîâåíü
         pr=pr-prhod*temp1*Point;
         //çàïîëíÿåì ìàññèâ
         k[index]=k[index]-temp1;
         continue;
      }   
      if(High[i]>=pr+razv*Point)//ïðîâåðêà íà îáðàòíûé õîä
      {
         //ñìîòðèì íà ñêîëüêî íîëèêîâ óøëà öåíà
         temp1=((High[i]-pr)/Point)/prhod;
         //çàïîìèíàåì äîñòèãíóòûé óðîâåíü
         pr=pr+prhod*temp1*Point;
         //óâåëè÷èâàåì êîëè÷åñòâî ýëåìåíòîâ ìàññèâà íà åäèíèöó
         index++;
         ArrayResize(k,index+1);
         //çàïîëíÿåì ìàññèâ 
         k[index]=temp1;
      }

     } 
   }      
   return(pr);   
}

Comments