Author: Clickaider 2019
0 Views
0 Downloads
0 Favorites
MVCA_MT5
ÿþ//+------------------------------------------------------------------+

//|                                                     MVCA_MT5.mq5 |

//|                                                  Clickaider 2019 |

//|                                             https://www.mql5.com |

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

#property copyright "Clickaider 2019"

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

#property version   "1.00"

#property indicator_chart_window

#property indicator_plots 1

#property indicator_buffers 1



#define id          "MCVA Script"

#define vline1_name "MCVA vl1_time"

#define vline2_name "MCVA vl2_time"

#define linreg_name "MCVA lr"



//A4283 ?5@2>9 :>>@48=0BK 2@5<5=8 2 A5:C=40E

input int data_shift_first = 1500;    

//A4283 2B>@>9 :>>@48=0BK 2@5<5=8 2 A5:C=40E 

input int data_shift_second = 4500;    



//@54K4CH55 A>AB>O=85 3;>10;L=KE ?5@5<5==KE

datetime tf_current = PERIOD_CURRENT;

datetime tf_next;



datetime vline1_time; 

datetime vline2_time;

datetime linreg_time1; 

datetime linreg_time2;



//@54K4CI85 ?0@0<5B@K 3@0D8G5A:8E >1J5:B>2

datetime vline_prv_time1;   //@54K4CI55 ?>;>65=85 5@2>9 25@B8:0;L=>9 ;8=88

datetime vline_prv_time2;   //@54K4CI55 ?>;>65=85 B>@>9 25@B8:0;L=>9 ;8=88

datetime linreg_prv_time1;  //@54K4CI55 ?>;>65=85 52>9 :>>@48=0BK ;8=59=>9 @53@5AA88

datetime linreg_prv_time2;  //@54K4CI55 ?>;>65=85 @02>9 :>>@48=0BK ;8=59=>9 @53@5AA88



//"5:CI85 ?0@0<5B@K 3@0D8G5A:8E >1J5:B>2

datetime vline_cur_time1 = TimeCurrent() - data_shift_first;

datetime vline_cur_time2 = TimeCurrent() - data_shift_second;

datetime linreg_cur_time1 = TimeCurrent();

datetime linreg_cur_time2 = TimeCurrent();

bool redraw=false;





void OnInit()

  {

  EventSetMillisecondTimer(100);

  //#25;8G8< AG5BG8: :>;8G5AB20 70?CH5==KE A:@8?B>2

  int value=int(GlobalVariableGet(id));

  GlobalVariableSet(id, value+1);

  }



void OnTimer()

{

 main_cycle();

}



int Deinit(const int reason)

  {

  //#<5=LH8< AG5BG8: :>;8G5AB20 70?CH5==KE A:@8?B>2

  //A;8 C40;O5BAO 548=AB25==K9 M:75<?;O@ A:@8?B0, B> C40;8< 3;>10;L=K5 ?5@5<5==K5



  //C40;8< 3@0D8G5A:85 >1J5:BK

  ObjectDelete(0,vline1_name);

  ObjectDelete(0,vline2_name);

  ObjectDelete(0,linreg_name);

  return(0);

  }

 

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

//| Custom indicator iteration function                              |

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

int OnCalculate (const int rates_total,      // @07<5@ <0AA820 price[] 

                 const int prev_calculated,  // >1@01>B0=> 10@>2 =0 ?@54K4CI5< 2K7>25

                  const int begin,            // >B:C40 =0G8=0NBAO 7=0G8<K5 40==K5

                  const double& price[])       // <0AA82 4;O @0AG5B0

  {





  return(rates_total);

  }



void main_cycle()

{

   while(!IsStopped())

  {

   if (!GlobalVariableCheck(id)) break;;

   ObjectsCheckPresent();

   ObjectsCheckModify(); 

   CheckTimeframe();

   }

}



//@>25@:0 =0 =0;8G85 8 A>740=85 =5>1E>48<KE 3@0D8G5A:8E >1J5:B>2

void ObjectsCheckPresent()

  {

  

  //5A;8 >1J5:B A 8<5=5< <vline1_name> (?5@20O 25@B8:0;L=0O ;8=8O) =5 =0945=, A>740BL 53>

  if (ObjectFind(0,vline1_name)<0)

    {

    ObjectCreate(0,vline1_name, OBJ_VLINE, 0, vline_cur_time1, 0);

    ObjectSetInteger(0,vline1_name, OBJPROP_STYLE, STYLE_DASH);

    ObjectSetInteger(0,vline1_name, OBJPROP_COLOR, clrRed);

    ObjectSetInteger(0,vline1_name, OBJPROP_SELECTABLE,true);

    ObjectSetInteger(0,vline1_name, OBJPROP_SELECTED,true);

    vline_prv_time1=vline_cur_time1;

    }

  

  //5A;8 >1J5:B A 8<5=5< <vline2_name> (2B>@0O 25@B8:0;L=0O ;8=8O) =5 =0945=, A>740BL 53>

  if (ObjectFind(0,vline2_name)<0)

    {

    ObjectCreate(0,vline2_name, OBJ_VLINE, 0, vline_cur_time2, 0);

    ObjectSetInteger(0,vline2_name, OBJPROP_STYLE, STYLE_DASH);

    ObjectSetInteger(0,vline2_name, OBJPROP_COLOR, clrRed);

    ObjectSetInteger(0,vline2_name, OBJPROP_SELECTABLE,true);

    ObjectSetInteger(0,vline2_name, OBJPROP_SELECTED,true);

    vline_prv_time2=vline_cur_time2;

    }

    

  //5A;8 >1J5:B A 8<5=5< <linreg_name> (;8=59=0O @53@5AA8O) =5 =0945=, A>740BL 53>

  if (ObjectFind(0,linreg_name)<0)

    {

    datetime time1=MathMin(vline_cur_time1, vline_cur_time2);

    datetime time2=MathMax(vline_cur_time1, vline_cur_time2);

    ObjectCreate(0,linreg_name, OBJ_REGRESSION,0, time1, 0, time2, 0);

    ObjectSetInteger(0,linreg_name, OBJPROP_STYLE, STYLE_DASH);

    ObjectSetInteger(0,linreg_name, OBJPROP_COLOR, clrRed);

    ObjectSetInteger(0,linreg_name, OBJPROP_SELECTABLE,true);

    ObjectSetInteger(0,linreg_name, OBJPROP_SELECTED,true);

    linreg_prv_time1=time1;

    linreg_prv_time2=time2;

    }

  }

  

//@>25@:0 =0 87<5=5=85 ?>;>65=8O 3@0D8G5A:8E >1J5:B>2 =0 G0@B5

void ObjectsCheckModify()

  { 

  

  vline_cur_time1=datetime(ObjectGetInteger(0,vline1_name, OBJPROP_TIME,0));

  vline_cur_time2=datetime(ObjectGetInteger(0,vline2_name, OBJPROP_TIME,0));

  linreg_cur_time1=datetime(ObjectGetInteger(0,linreg_name, OBJPROP_TIME,0));

  linreg_cur_time2=datetime(ObjectGetInteger(0,linreg_name, OBJPROP_TIME,1));

  if (linreg_cur_time1 > linreg_cur_time2) 

  if (vline_cur_time1!=vline_prv_time1) ObjectSetInteger(0,vline1_name, OBJPROP_TIME,0,vline_cur_time1);

  if (vline_cur_time2!=vline_prv_time2) ObjectSetInteger(0,vline2_name, OBJPROP_TIME,0,vline_cur_time2);

  if (linreg_cur_time1!=linreg_prv_time1) ObjectSetInteger(0,linreg_name, OBJPROP_TIME,0, datetime(MathMin(vline_cur_time1, vline_cur_time2)));

  if (linreg_cur_time2!=linreg_prv_time2) ObjectSetInteger(0,linreg_name, OBJPROP_TIME,1, datetime(MathMax(vline_cur_time1, vline_cur_time2)));

  

  vline_prv_time1=vline_cur_time1;

  vline_prv_time2=vline_cur_time2;



  vline_prv_time1=ObjectSetInteger(0,vline1_name, OBJPROP_TIME,0,vline_cur_time1);

  vline_prv_time2=ObjectSetInteger(0,vline2_name, OBJPROP_TIME,0,vline_cur_time2);

  linreg_prv_time1=ObjectSetInteger(0,linreg_name, OBJPROP_TIME,0, datetime(MathMin(vline_cur_time1, vline_cur_time2)));

  linreg_prv_time2=ObjectSetInteger(0,linreg_name, OBJPROP_TIME,1, datetime(MathMax(vline_cur_time1, vline_cur_time2)));  

  }





void CheckTimeframe()

  {

     switch (PERIOD_CURRENT)

  {    

    case PERIOD_M1:tf_next=PERIOD_M1;break;

    case PERIOD_M2:tf_next=PERIOD_M2;break;

    case PERIOD_M3:tf_next=PERIOD_M3;break;

    case PERIOD_M4:tf_next=PERIOD_M4;break;

    case PERIOD_M5:tf_next=PERIOD_M5;break;

    case PERIOD_M6:tf_next=PERIOD_M6;break;

    case PERIOD_M10:tf_next=PERIOD_M10;break;

    case PERIOD_M12:tf_next=PERIOD_M12;break;

    case PERIOD_M15:tf_next=PERIOD_M15;break;

    case PERIOD_M20:tf_next=PERIOD_M20;break;

    case PERIOD_M30:tf_next=PERIOD_M30;break;

    case PERIOD_H1:tf_next=PERIOD_H1;break;

    case PERIOD_H2:tf_next=PERIOD_H2;break;

    case PERIOD_H3:tf_next=PERIOD_H3;break;

    case PERIOD_H4:tf_next=PERIOD_H4;break;

    case PERIOD_H6:tf_next=PERIOD_H6;break;

    case PERIOD_H8:tf_next=PERIOD_H8;break;

    case PERIOD_H12:tf_next=PERIOD_H12;break;

    case PERIOD_D1:tf_next=PERIOD_D1;break;

    case PERIOD_W1:tf_next=PERIOD_W1;break;

    case PERIOD_MN1:tf_next=PERIOD_MN1;break;

  }

   if (tf_current != tf_next)

   {

    tf_current = tf_next;

    ChartRedraw();

   }

  }

Comments