MCVA





//+------------------------------------------------------------------+
//|                                   Multichart Visual Analyser.mq4 |
//|                                                          Strator |
//|                                                  k-v-p@yandex.ru |
//+------------------------------------------------------------------+
//|Ñêðèïò ïðåäíàçíà÷åí äëÿ âèçóàëüíîãî àíàëèçà äâèæåíèÿ íåñêîëüêèõ   |
//|âàëþòíûõ ïàð íà ïðîèçâîëüíîì âðåìåííîì èíòåðâàëå                  |
//+------------------------------------------------------------------+
//Ñêðèïò ñîçäàåò íà ÷àðòå òðè "ñâÿçàííûõ" ãðàôè÷åñêèõ îáúåêòà: äâå âåðòèêàëüíûå ëèíèè
//è ëèíåéíóþ ðåãðåññèþ.
//Ïðè ïåðåìåùåíèè ïîëüçîâàòåëåì êàêîãî-ëèáî èç òðåõ îáúåêòîâ
//àâòîìàòè÷åñêè âûïîëíÿåòñÿ ïîçèöèîíèðîâàíèå íà ÷àðòå "ñâÿçàííûõ" îáúåêòîâ.
//Ïðè çàïóñêå ñêðèïòà íà íåñêîëüêèõ ÷àðòàõ, ïåðåìåùàòü îáúåêòû ìîæíî íà ëþáîì èç íèõ,
//ïðè ýòîì ïîçèöèîíèðîâàíèå "ñâÿçàííûõ" îáúåêòîâ âûïîëíÿåòñÿ íà âñåõ ÷àðòàõ.

#property copyright "Strator"
#property link      "k-v-p@yandex.ru"

#define id          "MCVA Script"
#define vline1_name "MCVA vl1_time"
#define vline2_name "MCVA vl2_time"
#define linreg_name "MCVA lr"

//Ïðåäûäóøåå ñîñòîÿíèå ãëîáàëüíûõ ïåðåìåííûõ
datetime glvar_prv_time1;
datetime glvar_prv_time2;
//Òåêóùåå ñîñòîÿíèå ãëîáàëüíûõ ïåðåìåííûõ
datetime glvar_cur_time1;
datetime glvar_cur_time2;

//Ïðåäûäóùèå ïàðàìåòðû ãðàôè÷åñêèõ îáúåêòîâ
datetime vline_prv_time1;   //Ïðåäûäóùåå ïîëîæåíèå Ïåðâîé âåðòèêàëüíîé ëèíèè
datetime vline_prv_time2;   //Ïðåäûäóùåå ïîëîæåíèå Âòîðîé âåðòèêàëüíîé ëèíèè
datetime linreg_prv_time1;  //Ïðåäûäóùåå ïîëîæåíèå Ëåâîé êîîðäèíàòû ëèíåéíîé ðåãðåññèè
datetime linreg_prv_time2;  //Ïðåäûäóùåå ïîëîæåíèå Ïðàâîé êîîðäèíàòû ëèíåéíîé ðåãðåññèè

//Òåêóùèå ïàðàìåòðû ãðàôè÷åñêèõ îáúåêòîâ
datetime vline_cur_time1;
datetime vline_cur_time2;
datetime linreg_cur_time1;
datetime linreg_cur_time2;

//Ôëàã äëÿ ïåðåðèñîâêè ÷àðòà
bool redraw=false;

//+------------------------------------------------------------------+
//| Script initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  //Óâåëè÷èì ñ÷åò÷èê êîëè÷åñòâà çàïóøåííûõ ñêðèïòîâ
  int value=GlobalVariableGet(id);
  GlobalVariableSet(id, value+1);
  return(0);
  }

//+------------------------------------------------------------------+
//| Script deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
  //Óìåíüøèì ñ÷åò÷èê êîëè÷åñòâà çàïóøåííûõ ñêðèïòîâ
  //Åñëè óäàëÿåòñÿ åäèíñòâåííûé ýêçåìïëÿð ñêðèïòà, òî óäàëèì ãëîáàëüíûå ïåðåìåííûå
  int value=GlobalVariableGet(id);
  if (value>1) GlobalVariableSet(id, value-1);
  else 
    {
    GlobalVariableDel(id);
    GlobalVariableDel(vline1_name);
    GlobalVariableDel(vline2_name);
    }
  //óäàëèì ãðàôè÷åñêèå îáúåêòû
  ObjectDelete(vline1_name);
  ObjectDelete(vline2_name);
  ObjectDelete(linreg_name);
  RedrawChart();
  return(0);
  }

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  while (!IsStopped())
    {
    //Åñëè ãëîáàëüíàÿ ïåðåìåííàÿ <id> áûëà óäàëåíà, çàâåðøèòü ðàáîòó ñêðèïòà
    if (!GlobalVariableCheck(id)) break;
    //Îáíîâèòü ïðåäîïðåäåëåííûå ïåðåìåííûå
    RefreshRates();
    //ñáðîñèòü ôëàã ïåðåðèñîâêè ÷àðòà
    redraw=false;
    //âûïîëíèòü ïðîãðàììó
    main();
    //ïåðåðèñîâàòü ÷àðò, åñëè ýòî íåîáõîäèìî
    if (redraw) RedrawChart();
    //çàäåðæêà âûïîëíåíèÿ ñêðèïòà
    Pause();
    }
  return(0);
  }

void main()
  {
  //Ïðîâåðêà íà íàëè÷èå è ñîçäàíèå íåîáõîäèìûõ ãëîáàëüíûõ ïåðåìåííûõ
  GlobalVariablesCheckPresent();
  //Ïðîâåðêà íà íàëè÷èå è ñîçäàíèå íåîáõîäèìûõ ãðàôè÷åñêèõ îáúåêòîâ
  ObjectsCheckPresent();
  //Ïðîâåðêà íà èçìåíåíèå ãëîáàëüíûõ ïåðåìåííûõ
  GlobalVariablesCheckModify();
  //Ïðîâåðêà íà èçìåíåíèå ïîëîæåíèÿ ãðàôè÷åñêèõ îáúåêòîâ íà ÷àðòå
  ObjectsCheckModify();  
  }

void ObjectsCheckModify()
  {
  vline_cur_time1=ObjectGet(vline1_name, OBJPROP_TIME1);
  vline_cur_time2=ObjectGet(vline2_name, OBJPROP_TIME1);
  linreg_cur_time1=ObjectGet(linreg_name, OBJPROP_TIME1);
  linreg_cur_time2=ObjectGet(linreg_name, OBJPROP_TIME2);
  if (vline_cur_time1!=vline_prv_time1) GlobalVariableSet(vline1_name, vline_cur_time1);
  if (vline_cur_time2!=vline_prv_time2) GlobalVariableSet(vline2_name, vline_cur_time2);
  if (linreg_cur_time1!=linreg_prv_time1) GlobalVariableSet(vline1_name, linreg_cur_time1);
  if (linreg_cur_time2!=linreg_prv_time2) GlobalVariableSet(vline2_name, linreg_cur_time2);
  GlobalVariablesCheckModify();
  }
  
void GlobalVariablesCheckModify()
  {
  glvar_cur_time1=GlobalVariableGet(vline1_name);
  glvar_cur_time2=GlobalVariableGet(vline2_name);
  if (glvar_cur_time1!=glvar_prv_time1 || glvar_cur_time2!=glvar_prv_time2)
    {
    ObjectSet(vline1_name, OBJPROP_TIME1, glvar_cur_time1);
    ObjectSet(vline2_name, OBJPROP_TIME1, glvar_cur_time2);
    ObjectSet(linreg_name, OBJPROP_TIME1, MathMin(glvar_cur_time1, glvar_cur_time2));
    ObjectSet(linreg_name, OBJPROP_TIME2, MathMax(glvar_cur_time1, glvar_cur_time2));
    
    glvar_prv_time1=glvar_cur_time1;
    glvar_prv_time2=glvar_cur_time2;
    
    vline_prv_time1=ObjectGet(vline1_name, OBJPROP_TIME1);
    vline_prv_time2=ObjectGet(vline2_name, OBJPROP_TIME1);
    linreg_prv_time1=ObjectGet(linreg_name, OBJPROP_TIME1);
    linreg_prv_time2=ObjectGet(linreg_name, OBJPROP_TIME2);
    
    redraw=true;
    }  
  }
  
void GlobalVariablesCheckPresent()
  {
  if (!GlobalVariableCheck(vline1_name)) 
    {
    GlobalVariableSet(vline1_name, Time[0]);
    glvar_prv_time1=GlobalVariableGet(vline1_name);
    }
  if (!GlobalVariableCheck(vline2_name))
    {
    GlobalVariableSet(vline2_name, Time[100]);
    glvar_prv_time2=GlobalVariableGet(vline2_name);
    }
  }

void ObjectsCheckPresent()
  {
  glvar_cur_time1=GlobalVariableGet(vline1_name);
  glvar_cur_time2=GlobalVariableGet(vline2_name);
  
  //åñëè îáúåêò ñ èìåíåì <vline1_name> (ïåðâàÿ âåðòèêàëüíàÿ ëèíèÿ) íå íàéäåí, ñîçäàòü åãî
  if (ObjectFind(vline1_name)<0)
    {
    ObjectCreate(vline1_name, OBJ_VLINE, 0, glvar_cur_time1, 0);
    ObjectSet(vline1_name, OBJPROP_STYLE, STYLE_DASH);
    ObjectSet(vline1_name, OBJPROP_COLOR, Red);
    vline_prv_time1=glvar_cur_time1;
    redraw=true;
    }
  
  //åñëè îáúåêò ñ èìåíåì <vline2_name> (âòîðàÿ âåðòèêàëüíàÿ ëèíèÿ) íå íàéäåí, ñîçäàòü åãî
  if (ObjectFind(vline2_name)<0)
    {
    ObjectCreate(vline2_name, OBJ_VLINE, 0, glvar_cur_time2, 0);
    ObjectSet(vline2_name, OBJPROP_STYLE, STYLE_DASH);
    ObjectSet(vline2_name, OBJPROP_COLOR, Red);
    vline_prv_time2=glvar_cur_time2;
    redraw=true;
    }
  //åñëè îáúåêò ñ èìåíåì <linreg_name> (ëèíåéíàÿ ðåãðåññèÿ) íå íàéäåí, ñîçäàòü åãî
  if (ObjectFind(linreg_name)<0)
    {
    datetime time1=MathMin(glvar_cur_time1, glvar_cur_time2);
    datetime time2=MathMax(glvar_cur_time1, glvar_cur_time2);
    ObjectCreate(linreg_name, OBJ_REGRESSION, 0, time1, 0, time2, 0);
    ObjectSet(linreg_name, OBJPROP_STYLE, STYLE_DASH);
    ObjectSet(linreg_name, OBJPROP_COLOR, Red);
    linreg_prv_time1=time1;
    linreg_prv_time2=time2;
    redraw=true;
    }
  }

void Pause()
  {
  static datetime lastmove;
  if (redraw) lastmove=TimeLocal();
  if (TimeLocal()-lastmove>5) Sleep(1000);
  else Sleep(10);
  }

void RedrawChart()
  {
  WindowRedraw();
  }





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: