Author: Copyright 2019, QstrQstr
Miscellaneous
It issuies visual alerts to the screenImplements a curve of type %1
0 Views
0 Downloads
0 Favorites
QstrTic
ÿþ//+------------------------------------------------------------------+

//|                                                      QstrTic.mq4 |

//|                                         Copyright 2018, QstrQstr |

//|                                             https://www.qstr.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2019, QstrQstr"

#property link      "https://www.qstr.com"

#property version   "1.00"

#property strict

//+------------------------------------------------------------------+

#property indicator_separate_window       // =48:. @8AC5BAO 2 >B45;L=>< >:=5

#property indicator_buffers 3          // >;8G5AB2> 1CD5@>2

#property indicator_color1 Red         // &25B ?5@2>9 ;8=88

#property indicator_color2 Blue        // &25B 2B>@>9 ;8=88

#property indicator_color3 Green       // &25B B@5BL59 ;8=88



extern int STic1 = 10;              // >;8G. B8:>2, @07=>ABL <564C :>B>@K<8 ?@>AG8BK205BAO 8 AC<<8@C5BAO 4;O ;8=88 1

extern int STic2 = 140;             // >;8G. B8:>2, @07=>ABL <564C :>B>@K<8 ?@>AG8BK205BAO 8 AC<<8@C5BAO 4;O ;8=88 2

extern int STic3 = 360;             // >;8G. B8:>2, @07=>ABL <564C :>B>@K<8 ?@>AG8BK205BAO 8 AC<<8@C5BAO 4;O ;8=88 3

extern int STic  = 400;             // 1I55 :>;8G5AB2> ?@>AG8BK205<KE B8:>2 =0 @07=>ABL <564C A>A54=8<8 B8:0<8.

extern ENUM_OBJECT ObjUp = OBJ_ARROW_UP; // 1J5:B @8A>20=8O, MB> AB@5;:0 225@E

extern color ClUp = clrBlue;             // &25B AB@5;:8 A8=89

extern ENUM_ARROW_ANCHOR AnchorUp = ANCHOR_BOTTOM; // ">G:0 ?@82O7:8, A=87C AB@5;:8 225@E



extern ENUM_OBJECT ObjDown = OBJ_ARROW_DOWN; // 1J5:B @8A>20=8O, MB> AB@5;:0 2=87

extern color ClDown = clrRed;                // &25B AB@5;:8 :@0A=K9

extern ENUM_ARROW_ANCHOR AnchorDown = ANCHOR_TOP; // ">G:0 ?@82O7:8, A25@EC AB@5;:8 2=87



extern bool alert=True;    //:;NG5=85/2K:;NG5=85 2A?><>30B5;L=>3> ;5@B, 4 ?5@2KE 7=0G5=8O @07=>AB59

                           // 8 AC<< @07=>AB59 =0 :064>< B8:5 4;O :064>3> 8=48:0B>@0 =0 =C;52>< B8:5

extern bool ObjTic=True;   //:;NG5=85/2K:;NG5=85 @8A>20=8O B8:>2 ?> F5=5 A:

extern bool Deinit=False;  //:;NG5=85/2K:;NG5=85 DC=:F88 >G8B:8 3@0D8:0. '8AB8B 2A5 M;5<5=BK =0 3@0D8:5.

double Line_0[],Line_1[],Line_2[],raz[1000];     // 1JO2;5=85 <0AA82>2 40==KE 8=48:0B>@>2 8 B8:>2

double ask,                                      //@54K4CI0O F5=0 A:,

       Raz,                                      // 07=8F0 <564C ?@54K4CI59 8 B5:CI59 F5=>9

       point;                                    // 1/Point - 'B> 1K =5 45;8BL =0 >8=B, 0 C<=>60BL.



bool bErr;                                       //>H81:0 @01>BK

//--------------------------------------------------------------------

int OnInit()                             // !?5F80;L=0O DC=:F8O init()

  {

   bErr = false;

   if(STic>1000 || STic1>STic || STic2>STic || STic3>STic)  // ?@>25@:0 =0 >H81:8

     {

      bErr = true;

      Alert("'8A;> ?@>AG8BK205<KE B8:>2 =5 1>;55 1000") ;

      Alert("K>;8G5AB2> B8:>2 4;O 8=48:0B>@>2 4>;6=> 1KBL <5=LH5 >1I53> :>;8G5AB20 ?@>AG8B205<KE B8:>2");

     }

//--------------------------------------------------------------------

   SetIndexBuffer(0,Line_0);           // 07=0G5=85 <0AA820 1CD5@C 0

   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); // !B8;L ;8=88

//--------------------------------------------------------------------

   SetIndexBuffer(1,Line_1);           // 07=0G5=85 <0AA820 1CD5@C 1

   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); // !B8;L ;8=88

//--------------------------------------------------------------------

   SetIndexBuffer(2,Line_2);           // 07=0G5=85 <0AA820 1CD5@C 2

   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2); // !B8;L ;8=88

//--------------------------------------------------------------------

   point = 1/Point;

   return(INIT_SUCCEEDED);                             // KE>4 87 A?5F. D-88 init()

  }

//--------------------------------------------------------------------

//int start()                            // !?5F80;L=0O DC=:F8O start()

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])



  {

   if(bErr == true)

      return(rates_total);

   int i,                              // =45:A 10@0

       r,                   // $>@<0;L=K9 ?0@0<5B@ (8=45:A F8:;0 ?@8A2>5=8O F5=K B8:>2 2 <0AA82, 8=45:A M;5<5=B0 <0AA820 rsz)

       k                   // >=B@>;L=K9 ?0@0<5B@ F8:;0, 2K2>48B A:>;L:> F8:;>2 ?@8A2>5=8O ?@>H;>.

       ;

   double

   Sum,Sum1,Sum2,Sum3;                            //>=5G=0O AC<<0 8  !C<<K @07=>AB59 4;O ?5@2>9, 2B>@>9 8 B@5BL59 ;8=88

//--------------------------------------------------------------------











   datetime tm=TimeCurrent();

   string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);



   if(ObjTic == True) // A;8 @8A>20=85 B8:>2 2:;NG5=>, B> @8AC5<.

     {

      if(ask != Ask) //  8AC5< 5A;8 F5=0 87<5=8;0AL

        {

         string Obj = ObjUp;             // 84 >1J5:B0, ?> C<>;G0=8N AB@5;:0 225@E

         color Cl = ClUp;               // &25B AB@5;:8, ?> C<>;G0=8N A8=89

         string Anchor = AnchorUp;      // ">G:0 ?@82O7:8, A=87C AB@5;:8

         if(ask >= Ask)       // 25@E @8AC5< ?> =0AB@>9:0< Up, 2=87 ?> =0AB@>9:0< Down

           {

            Cl = ClDown ;

            Obj = ObjDown;

            Anchor = AnchorDown;

           }

         string NameObjTic="Ask_" + i + "_"+var1;

         bool   created=ObjectCreate(0,NameObjTic,Obj,0,TimeCurrent(),Ask);

         if(created)// 5A;8 A>740;AO - A45;05< 5<C BN=8=3

           {

            //--- B>G:0 ?@82O7:8 A25@EC 8;8 A=87C, GB>1K =5 =05760BL =0 10@

            ObjectSetInteger(0,NameObjTic,OBJPROP_ANCHOR,Anchor);



            // ?>:@0A8<

            ObjectSetInteger(0,NameObjTic,OBJPROP_COLOR,Cl);

           }

        }

     }



   for(r=STic; r>0; r--)  // &8:; ?@8A2>5=8O F5=K B8:>2 2 <0AA82 raz 8 AC<<8@>20=8O 7=0G5=89 @07=>AB8 <564C B8:0<8

     {

      // @8A208205< =0 :064>< F8:;5 ?@54K4CI55 7=0G5=85 A;54CNI5<C M;5<5=BC, =C;52>9 ?5@2><C, ?5@2K9 2B>@><C

      raz[r]=raz[r-1];



      Sum = Sum + raz[r];



      if(r==STic3)

         Sum3=Sum;

      if(r==STic2)

         Sum2=Sum;

      if(r==STic1)

         Sum1=Sum;



      k++;

     }



   if(MathAbs(Raz) < 1000.0)        // BA5:05< @07=>ABL <564C 7=0G5=85< A: ?5@2>3> B8:0 8 =C;5<, MB> ?OB87=0G=>5 G8A;>

      raz[0]=Raz  ;                    // @8A20205< =C;52><C M;5<5=BC <0AA820 @07=8FC <564C ?@54K4CI59 8 B5:CI59 F5=>9

   Raz = round((Ask - ask) * point);       // !G8B05< @07=>ABL <564C ?@54K4CI59 8 B5:CI59 F5=>9





   Line_0[i]= Sum1;      // =0G5=85 0 1CD5@0 =0 i->< 10@5



   Line_1[i]= Sum2;      // =0G5=85 1 1CD5@0 =0 i->< 10@5



   Line_2[i]= Sum3;      // =0G5=85 2 1CD5@0 =0 i->< 10@5



   if(alert == True) // 45@B, 5A;8 0;5@B 2:;NG5=

     {

      Alert(" Raz0 = ",raz[0]," Raz1 = ",raz[1]," Raz2 = ",raz[2]," Raz3 = ",raz[3],    // 7=0G5=8O <0AA820 @07=>AB59

            " Raz248 = ",raz[248]," Raz249 = ",raz[249]," Raz250 = ",raz[250]);

      Alert(" Sum",STic1," = ",Sum1," Line_0[0] = ",Line_0[0],                     // 7=0G5=8O AC<< 87 F8:;0 8 <0AA820

            " Sum",STic2," = ",Sum2, " Line_1[0] = ",Line_1[0],

            " Sum",STic3," = ",Sum3," Line_2[0] = ",Line_2[0],

            " Sum",STic," = ",Sum, " k = ",k);                  //7=0G5=8O >1I59 AC<<K 87 F8:;0 8 :>;8G5AB2> 8B5@0F89 F8:;0

     }





   ask = Ask; // 0?><8=05< 7=0G5=85 A:







//--------------------------------------------------------------------

   return(rates_total);                           // KE>4 87 A?5F. D-88 start()

  }

//--------------------------------------------------------------------

void OnDeinit(const int reason)

  {



   if(Deinit == True)                         // !B8@05< B8:8 A 3@0D8:0, 5A;8 2:;NG5=0 DC=:F8O >G8AB:8 3@0D8:0

     {

      int obj_total=ObjectsTotal();

      PrintFormat("A53> %d >1J5:B>2",obj_total);

      for(int i=obj_total-1; i>=0; i--)

        {

         string name=ObjectName(i);

         PrintFormat("1J5:B %d: %s",i,name);

         ObjectDelete(name);

        }

     }

//--- destroy timer

   EventKillTimer();



  }





//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

Comments