Marketvision





//+------------------------------------------------------------------+
//|                                                 Marketvision.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                                       Èìÿ: Ñàøà  |
//|                                mailto: marketadviser@rambler.ru  |
//|                                                                  |
//|   Èíäèêàòîð Marketvision.mq4 èñïîëíåí â îñíîâíîì îêíå ãðàôèêà    |
//| êîòèðîâîê è ìîæåò ïðèìåíÿòüñÿ êàê ñîâåòíèê â òîðãîâëå ðàçëè÷íûìè |
//| ôèíàíñîâûìè èíñòðóìåíòàìè. Äëÿ èñïîëüçîâàíèÿ èíäèêàòîðà          |
//| íåîáõîäèìî ñêîïèðîâàòü Marketvision.mq4 â êàòàëîã                |
//| C:\Program Files\ - Òåðìèíàë - \experts\indicators\              |
//| Òåõíè÷åñêèé àíàëèç êóðñà âàëþòíûõ ïàð âûïîëíÿåòñÿ ïî ñðåäñòâàì   |
//| ôóíäàìåíòàëüíîé ñòàòèñòèêè. Íà ðÿäó ñ îñíîâíûìè ñòàòèñòè÷åñêèìè  |
//| ïîêàçàòåëÿìè èñïîëüçóþòñÿ ñðåäñòâà êîíòðîëÿ âîëàòèëüíîñòè,       |
//| ìàðêèðîâêè è óâåäîìëåíèÿ ïî ñðåäñòâàì îòïðàâêè ñîîáùåíèÿ íà      |
//| ýëåêòðîííûé àäðåñ. Äëèííà èñõîäíîé âûáîðêè âûáèðàåòñÿ            |
//| ïîëüçîâàòåëåì â ìåíþ «Íàñòðîéêà èíäèêàòîðà» è çàäà¸òñÿ òî÷íîé    |
//| äàòîé è âðåìåíåì, ñ ïðèõîäîì íîâîé êîòèðîâêè öåí äëèííà âûáîðêè  |
//| óâåëè÷èâàåòñÿ. Åñëè âûáèðàåòñÿ ïåðèîä â «Bar» òî äëèííà âûáîðêè  |
//| îñòàåòñÿ íåèçìåííîé. Ïåðèîäè÷íîñòü ðàñ÷¸òà óñòàíàâëèâàåòñÿ â     |
//| òèêàõ, ãäå êàæäûé òèê ýòî íîâàÿ ïîñòóïèâøàÿ öåíà èíñòðóìåíòà, ïðè|
//| äîñòèæåíèè êîòîðîé ñ÷¸ò÷èê ñáðàñûâàåòñÿ, ñîõðàíÿÿ ðàññ÷èòàííûå   |
//| ïîêàçàòåëè â ôàéëå:                                              |
//| C:\Program Files\ Òåðìèíàë \experts\files\File Statistica.csv.   |
//| Åñëè âûïîëíÿåòñÿ óñëîâèå è âîëàòèëüíîñòü «Bara» ïðåâûøàåò        |
//| äîïóñòèìûå íîðìû, âûïîëíÿåòñÿ ìàðêèðîâêà áàðà è îòïðàâêà         |
//| óâåäîìëåíèÿ íà ýëåêòðîííûé àäðåñ.                                |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window


// Ââîä ïåðâîíà÷àëüíûõ äàííûõ.
   extern int ExBar=60;                        // Âûáîðêà â áàðàõ.
   extern string ExTime="2009.09.14 00:00";    // Âûáîðêà ïî âðåìåíè, åñëè ExBar=0.
   extern int ExTic=1200;                      // Âðåìÿ ïåðåðàñ÷¸òà ñòàòèñòèêè, â òèêàõ.
   extern int ExPoint=6;                       // Ìàðêåð âàëàòèëüíîñòè â ïóíêòàõ.
   extern bool ExSanction=false;               // Ðàçðåøèòü/Çàïðåòèòü îòïðàâêó íà ïî÷òîâûé ÿùèê (ïðîãðàììà, íàñòðîéêè, ïî÷òà).

// Îòñëåæèâàåìûå âàëþòíûå ïàðû.
   string Trac[]={"EURUSD","AUDCAD","AUDCHF","AUDJPY","AUDUSD","CADCHF","GOLD"};

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
   int init()
   {
    return(0);
   }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
   int deinit()
   {
    ObjectsDeleteAll();
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
   int start()
   {
    static int Tic;
    double SymPoint,Beg,End,Total;
// Îïðåäåëåíèå ïóíêòà âàëþòíîé êîòèðîâêè.
        if(SymPoint==0)
        SymPoint=MarketInfo(Symbol(),MODE_POINT);
// Ïîèñê áàðà.
        if(ExBar==0) 
        Beg=iBarShift(NULL,0,iTime(NULL,0,iBarShift(NULL,0,StrToTime(ExTime))));
        else
        Beg=ExBar;
// Îïðåäåëåíèå íà÷àëüíûõ è êîíå÷íûõ òî÷åê, äëèííû âûáîðêè.
        if(Period()==1)
        {
         End=1;
         Total=Beg;
        }
        else
        {
         End=0;
         Total=Beg+1;
        }
// Èíäèêàòîð ïåðåðàñ÷¸òà ñòàòèñòèêè, â òèêàõ.
        Tic++; 
        Indexing(Tic);
// Ìàðêèðîâêà ãðàôèêà ïî óñëîâèþ âîëàòèëüíîñòè.
        Marker(SymPoint,Beg,End,ExPoint,ExSanction);  
// Èíäèêàòîð êîòèðîâîê.
        News(Trac,Beg,End);
// Óñëîâèå è ðàñ÷¸ò ñòàòèñòèêè.
        if(Tic==ExTic)
        Tic=1;
        if(Tic==1)
        Statistica(Beg,End,Total,ExSanction);
   }    
//+------------------------------------------------------------------+
//| Ñ÷¸ò÷èê ïðèõîäÿùèõ êîòèðîâîê.                                    |
//+------------------------------------------------------------------+
   void Indexing(int Tic)
   {
        ObjectCreate("Tic",OBJ_LABEL,0,0,0,0,0);
       ObjectSetText("Tic",DoubleToStr(Tic,0),8,"Times New Roman",Red);
           ObjectSet("Tic",OBJPROP_CORNER,3);
           ObjectSet("Tic",OBJPROP_XDISTANCE,10);
           ObjectSet("Tic",OBJPROP_YDISTANCE,5);
   }
//+------------------------------------------------------------------+
//| Ðàñ÷¸ò ñòàòèñòè÷åñêèõ ïîêàçàòåëåé                                |
//+------------------------------------------------------------------+
   void Statistica(double Beg,double End,double Total,bool ExSanction)
   {
    int SC11,i;
    double Min,Max,Stdev,Var,Slop,intercept,Regress,Stderr,Er,Corr,Corr2,Cvar,Kurt,Skew;
    double SC1,SC2,SC3,SC4,SC5,SC6,SC7,SC8,SC9; 
    string SC10; 
    datetime SC12,SC13,SC14,SC17;
// Ðàñ÷¸ò ñêîëüçÿùåãî ñðåäíåãî, ìàêñèìóìà è ìèíèìóìà.
        for(i=Beg;i>=End;i--)
        {
         SC2=iMA(NULL,0,Beg,0,MODE_SMA,PRICE_MEDIAN,End);
         SC1+=i/Total;
         Min=Low[iLowest(0,0,MODE_LOW,Beg,End)];
         Max=High[iHighest(0,0,MODE_HIGH,Beg,End)];
        }
// Ðàñ÷¸ò ñðåäíåêâàäðàòè÷íîãî îòêëîíåíèÿ, äèñïåðñèè.
        for(i=Beg;i>=End;i--)
        {
         SC3+=MathPow(((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-SC2,2);
         SC4+=MathPow(i-SC1,2);
         Stdev=MathSqrt(SC3/(Total-1));
         Var=SC3/(Total-1);
        }
// Ðàñ÷¸ò êîýôôèöèåíòîâ óðàâíåíèÿ ðåãðåññèè.  
        for(i=Beg;i>=End;i--)
        {
         SC5+=(((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-SC2)*(i- SC1);
         Slop=SC5/SC4; 
         intercept=SC2-Slop*SC1;
        }
// Ðàñ÷¸ò ðåãðåññèè, àïïðîêñèìàöèè, ñòàíäàðòíîé îøèáêè óðàâíåíèÿ ðåãðåññèè. 
        for(i=Beg;i>=End;i--)
        {
         Regress=intercept+Slop*(i);
         Stderr=MathSqrt((SC3-(MathPow(SC5,2)/SC4))*(1/(Total-2)));
         Er+=(MathAbs(((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-Regress)/((iHigh(NULL,0,i)+iLow(NULL,0,i))/2))*(1/Total)*100;
        } 
// Ðàñ÷åò êîððåëÿöèè, êîâàðèàöèè, àñèììåòðèè, ýêñöåññà.
        for(i=Beg;i>=End;i--)
        {
         Corr=SC5/(MathSqrt(SC4*SC3));
         Corr2=MathPow(Corr,2);
         Cvar+=((i-SC1)*(((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-SC2)*1/Total);
         SC6+=MathPow((((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-SC2)/Stdev,4);
         Kurt=((Total*(Total+1))/((Total-1)*(Total-2)*(Total-3)))*SC6-((3*MathPow(Total-1,2))/((Total-2)*(Total-3)));
         SC7+=MathPow((((iHigh(NULL,0,i)+iLow(NULL,0,i))/2)-SC2)/Stdev,3);
         Skew=(Total/((Total-1)*(Total-2)))*SC7;
        }
// Ðàñ÷åò êîîðäèíàò ðåãðåññèè.
        SC9=intercept+Slop*(Beg);
        SC8=intercept+Slop*(End);
// Êîîðäèíàòû ñðåäíåé àðèôìåòè÷åñêîé ëèíèè.
        SC12=iTime(NULL,0,Beg);
        SC13=iTime(NULL,0,End);
// Ãðàôèê ëèíåéíîé ðåãðåññèè.
        ObjectCreate("LR",OBJ_TREND,0,SC12,SC9,SC13,SC8);
        ObjectSet("LR",OBJPROP_COLOR,Blue);
// Ãðàôèê ñðåäíåé àðèôìåòè÷åñêîé ëèíèè.
        ObjectCreate("AVG",OBJ_TREND,0,SC12,SC2,SC13,SC2);
        ObjectSet("AVG",OBJPROP_RAY,false); 
        ObjectSet("AVG",OBJPROP_COLOR,Red);
// Òàáëèöà ñòàòèñòèêè.
        SC10=StringConcatenate("Name ",Symbol(),"\n",
             "Time A ",TimeToStr(SC13),"\n",
             "Time B ",TimeToStr(SC12),"\n",
             "Bar = ",Total,"\n",
             "----------------------- ","\n",
             "Min = ",DoubleToStr(NormalizeDouble(Min,4),4),"\n",
             "Mean = ",DoubleToStr(NormalizeDouble(SC2,4),4),"\n",
             "Max = ",DoubleToStr(NormalizeDouble(Max,4),4),"\n",
             "Slop = ",DoubleToStr(NormalizeDouble(Slop,6),6),"\n",
             "Intercept = ",DoubleToStr(NormalizeDouble(intercept,6),6),"\n",  
             "Stderr = ",DoubleToStr(NormalizeDouble(Stderr,6),6),"\n",
             "Er = ",DoubleToStr(NormalizeDouble(Er,6),6),"\n",
             "Stdev = ",DoubleToStr(NormalizeDouble(Stdev,6),6),"\n",
             "Var = ",DoubleToStr(NormalizeDouble(Var,6),6),"\n",
             "Corr = ",DoubleToStr(NormalizeDouble(Corr,6),6),"\n",
             "Corr2 = ",DoubleToStr(NormalizeDouble(Corr2,6),6),"\n",  
             "Cvar = ",DoubleToStr(NormalizeDouble(Cvar,6),6),"\n",
             "Kurt = ",DoubleToStr(NormalizeDouble(Kurt,6),6),"\n",
             "Skew = ",DoubleToStr(NormalizeDouble(Skew,6),6),"\n",
             "R/tA = ",DoubleToStr(NormalizeDouble(SC8,4),4),"\n",
             "R/tB = ",DoubleToStr(NormalizeDouble(SC9,4),4),"\n",
             "R-m = ",DoubleToStr(NormalizeDouble(SC8-SC2,4),4));
// Îòïðàâêà ïî÷òîé.
        if(ExSanction==true)
           SendMail(StringConcatenate("Statistical information"," ",
                    TimeToStr(TimeCurrent(),TIME_DATE)," ",Hour(),"`",Minute()),SC10);
// Çàïèñü ñòàòèñòèêè â ôàèë (C:\Program Files\ - Òåðìèíàë - \experts\files).
        SC11=FileOpen(StringConcatenate("File Statistica"," ",
                      TimeToStr(TimeCurrent(),TIME_DATE)," ",Hour(),"`",Minute(),".csv"),
             FILE_CSV|FILE_WRITE,"\t");
        FileWrite(SC11,SC10);
        FileClose(SC11);
// Ïåðåðèñîâêà êîîðäèíàò ñðåäíåé àðèôìåòè÷åñêîé ëèíèè.
        SC14=ObjectGet("AVG",OBJPROP_TIME2); 
        if(SC14!=SC13)
        {
         ObjectMove("AVG",0,SC12,SC2);
         ObjectMove("AVG",1,SC13,SC2);
         WindowRedraw();
        }
// Ïåðåðèñîâêà êîîðäèíàò ëèíåéíîé ðåãðåññèè.
        SC17=ObjectGet("LR",OBJPROP_TIME2); 
        if(SC17!=SC13)
        {
         ObjectMove("LR",0,SC12,intercept+Slop*(Beg));
         ObjectMove("LR",1,SC13,intercept+Slop*(End));
         WindowRedraw();
        }
   }
//+------------------------------------------------------------------+
//| Ìàðêåð êðèòè÷åñêîé âîëàòèëüíîñòè                                 |
//+------------------------------------------------------------------+
   void Marker(double SymPoint,double Beg,double End,int ExPoint,bool ExSanction)
   {
    color MRc;
    int MR1,MRp,t;
    string MRt,MR2,MR3;
    datetime MRs5,MR4;
    double MRs1,MRs2,MRs3,MRs4;
// Ðàñ÷¸ò êðèòè÷åñêîé âîëàòèëüíîñòè.
        for(t=Beg;t>=End;t--)
        {
         MRs1=iOpen(NULL,0,t);
         MRs2=iClose(NULL,0,t);
         MRs3=iHigh(NULL,0,t);
         MRs4=iLow(NULL,0,t);
         MRs5=iTime(NULL,0,t); 
         MR1=NormalizeDouble((MRs3-MRs4)/SymPoint,8);
// Öâåòíàÿ è òåêñòîâàÿ ìàðêèðîâêà.        
         if(MR1>=ExPoint)
         {
          if(MRs1<MRs2)
          {
           MRc=Red;
           MRt="Up";
           MRp=NormalizeDouble((MRs2-MRs1)/SymPoint,8);
          }
          if(MRs1>MRs2)
          {
           MRc=Blue;
           MRt="Down";
           MRp=NormalizeDouble((MRs2-MRs1)/SymPoint,8);
          }
          if(MRs1==MRs2)
          {
           MRc=Gold;
           MRt="<>";
           MRp=0.0;
          }
          MR2=StringConcatenate(Symbol(),"\n",
              TimeToStr(MRs5),"\n",MRs2,"  ",MRt,"  ",MRp,"\n","High/Low","  ",MR1);
// Ïðîðèñîâêà ìàðêèðîâêè.
          ObjectCreate(MR2,OBJ_TREND,0,MRs5,MRs3,MRs5,MRs4);
             ObjectSet(MR2,OBJPROP_WIDTH,2);
             ObjectSet(MR2,OBJPROP_COLOR,MRc);
             ObjectSet(MR2,OBJPROP_RAY,false);
          if(t==1)
          {
           MR3=TimeToStr(MRs5)+" "+Symbol()+" "+
               DoubleToStr(MRs2,4)+" "+MRt+" "+MRp+" High/Low "+MR1;
// Ðèñóíîê êîíâåðòà íà ãðàôèêå.
               ObjectCreate("Mail",OBJ_ARROW,0,MRs5,MRs4);
                  ObjectSet("Mail",OBJPROP_ARROWCODE,43);
                  ObjectSet("Mail",OBJPROP_COLOR,Gold);
// Ïåðåðèñîâêà êîíâåðòà.
           MR4=ObjectGet("Mail",OBJPROP_TIME1);
           if(MR4!=MRs5)
           {
            ObjectMove("Mail",0,MRs5,MRs4);
            if(ExSanction==true)
            SendMail(MR3,"");
            WindowRedraw();
           }
          }
         }
        }
   }
//+------------------------------------------------------------------+
//| Íàáëþäåíèå çà ñîñòîÿíèåì ðûíêà ôèíàíñîâûõ èíñòðóìåíòîâ           |
//+------------------------------------------------------------------+
   void News(string Trac[],double Beg,double End)
   {
    string NW1;
    double NW2,NW3;
// Óñëîâèå äëÿ ðàñ÷¸òà íàïðàâëåíèÿ äâèæåíèÿ ðûíêà.
        for(int x=0;x<ArraySize(Trac);x++)
        {
         NW1=Trac[x];
         NW2=iClose(NW1,0,End);
         NW3=iMA(NW1,0,Beg,0,0,4,End);
// Ñèìâîëû ôèíàíñîâûõ èíñòðóìåíòîâ íà ãðàôèêå.
         ObjectCreate("Symbol"+x,OBJ_LABEL,0,0,0,0,0);
        ObjectSetText("Symbol"+x,NW1,8,"Times New Roman",SlateGray);
            ObjectSet("Symbol"+x,OBJPROP_CORNER,2);
            ObjectSet("Symbol"+x,OBJPROP_XDISTANCE,x*50+10);
            ObjectSet("Symbol"+x,OBJPROP_YDISTANCE,5);
// Ñèãíàë íàïðàâëåíèÿ äâèæåíèÿ ðûíêà.
         ObjectCreate("Signal"+x,OBJ_LABEL,0,0,0,0,0);
        ObjectSetText("Signal"+x,CharToStr(85),11,"Wingdings",Gold);
            ObjectSet("Signal"+x,OBJPROP_CORNER,2);
            ObjectSet("Signal"+x,OBJPROP_XDISTANCE,x*50+25);
            ObjectSet("Signal"+x,OBJPROP_YDISTANCE,20);
         if(NW2>NW3)
         ObjectSetText("Signal"+x,CharToStr(241),11,"Wingdings",OrangeRed); 
         else 
         ObjectSetText("Signal"+x,CharToStr(242),11,"Wingdings",SlateBlue);
        }
   }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Series array that contains open prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features:

It sends emails
Uses files from the file system
It writes information to file