Elliott_Waves

Author: Copyright � 2009, ������� �������
Elliott_Waves

The provided code snippet is part of a MetaTrader 4 (MT4) expert advisor (EA) or script. It contains various functions and methods used to manage objects, calculate volumes, and perform operations on symbols in the trading environment. Here's an explanation of each function:

  1. Îáüåì_Âîëíû - Calculates the average volume over a specified period.
  2. string_ïåð(int per) - Returns a string representing the timeframe based on the input parameter per.
  3. óäàëèòü_îáüåêòû(string PreName) - Deletes objects with names that start with PreName.

The code appears to be managing objects related to different timeframes and performing volume calculations for those timeframes.

Potential Improvements and Corrections

  1. Code Structure:

    • The code could benefit from better structure, such as separating concerns into more functions or classes.
    • Proper indentation is missing, which makes the code hard to read.
  2. Function Naming Conventions:

    • Function names should follow consistent naming conventions for better readability and maintainability. For example, Îáüåì_Âîëíû could be renamed to something like CalculateAverageVolume.
  3. String Comparison:

    • The use of == for string comparison in the óäàëèòü_îáüåêòû function is correct, but it's good practice to always compare strings using proper functions.
  4. Error Handling:

    • There should be error handling mechanisms (e.g., checking if an object exists before deleting) to prevent potential crashes.
  5. Comments and Documentation:

    • Adding more comments to explain the purpose of each function can greatly help in maintaining and understanding the code.

Revised Code Example

Here is a revised version of the code with improved structure, readability, and error handling:

//+------------------------------------------------------------------+
//| Function: CalculateAverageVolume                                 |
//| Description: Calculates the average volume for a given symbol   |
//|              over a specified period.                             |
//+------------------------------------------------------------------+
double CalculateAverageVolume(string Name)
{
   double vol = 0;
   int startShift, endShift;
   startShift = iBarShift(NULL, 0, ObjectGet(Name, OBJPROP_TIME1), FALSE);
   endShift = iBarShift(NULL, 0, ObjectGet(Name, OBJPROP_TIME2), FALSE);

   for(int n = endShift; n <= startShift; n++)
   {
      vol += iVolume(NULL, 0, n);
   }
   
   if(vol > 0)
   {
      return vol / (startShift - endShift + 1);
   }

   return 0;
}

//+------------------------------------------------------------------+
//| Function: StringForTimeframe                                    |
//| Description: Returns a string representing the timeframe based on |
//|              the input parameter per.                             |
//+------------------------------------------------------------------+
string StringForTimeframe(int per)
{
   switch(per)
   {
      case 1: return "M_1";
      case 5: return "M_5";
      case 15: return "M15";
      case 30: return "M30";
      case 60: return "H 1";
      case 240: return "H_4";
      case 1440: return "D_1";
      case 10080: return "W_1";
      case 43200: return "MN1";
   }
   
   return "Unknown timeframe";
}

//+------------------------------------------------------------------+
//| Function: DeleteObjectsByPrefix                                  |
//| Description: Deletes all objects whose names start with a given prefix.|
//+------------------------------------------------------------------+
int DeleteObjectsByPrefix(string PreName)
{
   int total = ObjectsTotal();
   for(int k = total - 1; k >= 0; k--)
   {
      string Obj_Name = ObjectName(k);
      string Head = StringSubstr(Obj_Name, 0, StringLen(PreName));
      
      if (Head == PreName)
      {
         ObjectDelete(Obj_Name);
      }
   }

   return 0;
}

Explanation:

  • Function Names: Renamed to follow consistent naming conventions.
  • Comments: Added comments to explain the purpose of each function.
  • Error Handling: Added a check to ensure that vol is not zero before calculating the average volume.
  • String Comparison: Used the correct string comparison operator (==) and ensured proper indentation.

This revised version should be easier to read, maintain, and understand.

Price Data Components
Series array that contains tick volumes of each bar
Indicators Used
MACD HistogramFractalsBill Williams Market Facilitation index
1 Views
0 Downloads
0 Favorites
Elliott_Waves
//+------------------------------------------------------------------+
//|                                                Elliott_Waves.mq4 |
//|                                Copyright © 2009, Õëûñòîâ Âëàäèìð |
//|                                                ñmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Õëûñòîâ Âëàäèìð"
#property link      "ñmillion@narod.ru"
 
#property indicator_chart_window
 
   datetime X1,X2;
   double   Y1,Y2,LINE[11][6];
   int ÑÒÈËÜ,Ò_ËÈÍÈÈ,ÂÎËÍÀ,ÖÂÅÒ;
   double High_Win,Low_Win,shift_X,shift_Y;
   string Name[11]={ "-",
                     "1 ÂÎËÍÀ ","2 ÂÎËÍÀ ","3 ÂÎËÍÀ ","4 ÂÎËÍÀ ","5 ÂÎËÍÀ ",
                     "a ÂÎËÍÀ ","b ÂÎËÍÀ ","c ÂÎËÍÀ ","d ÂÎËÍÀ ","e ÂÎËÍÀ "};
   string òåêñò,Obj_Name,ÈÍÔÎ;
   int per;
   extern bool  ïîêàçàòü_âñå_ïåðèîäû = true;
   extern color Ö1=White;
   extern color Ö2=DeepSkyBlue;
   extern color Ö3=Yellow;
   extern color Ö4=Turquoise;
   extern color Ö5=Magenta;
   extern color Ö6=Yellow;
   extern color Ö7=MediumSpringGreen;
   extern color Ö8=Violet;
   extern color Ö9=DarkOrchid;
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//////////////////////////////////////////////////////////////////////
int init()
{
   ObjectCreate ("áàð", OBJ_LABEL, 0, 0, 0);// Ñîçäàíèå îáú.
   ObjectSet    ("áàð", OBJPROP_XDISTANCE, 500);      
   ObjectSet    ("áàð", OBJPROP_YDISTANCE, 0);
   ObjectSet    ("áàð", OBJPROP_CORNER, 1); //óãîë_âûâîäà_îðäåðîâ
   per =Period();
   Obj_Name = string_ïåð(per);
   for(int k=0; k<=10; k++) Name[k] = Name[k]+Obj_Name;
   Comment("ÂÎËÍÛ ÝËËÈÎÒÀ "+Obj_Name+" "+âðåìÿ(CurTime()));
   return(0);
}
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//*////////////////////////////////////////////////////////////////*//
int deinit()
  {
      ObjectDelete("áàð");
      óäàëèòü_îáüåêòû("Ö");
      óäàëèòü_îáüåêòû("Name");
      óäàëèòü_îáüåêòû("Èíôî");
   return(0);
  }
//*////////////////////////////////////////////////////////////////*//
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//////////////////////////////////////////////////////////////////////
int start()
{
   High_Win = WindowPriceMax();
   Low_Win  = WindowPriceMin();
   shift_X = WindowBarsPerChart();
   ObjectSetText("áàð","Áàð íà ýêðàíå "+DoubleToStr(shift_X,0),8,"Arial",White);   
   shift_X = shift_X/80*per;
   shift_Y = (High_Win-Low_Win) / 50;
   for(int k=0; k<=ObjectsTotal(); k++) 
   {
      Obj_Name = ObjectName(k);                           // Çàïðàøèâàåì èìÿ îáúåêòà
      if (Obj_Name=="") continue;
      ÂÎËÍÀ = N_Âîëíû(Obj_Name);
      if (ÂÎËÍÀ>0&&ÂÎËÍÀ<11)
      {
         if (Obj_Name != Name[ÂÎËÍÀ]) redraw_LINE(Obj_Name,Name[ÂÎËÍÀ]);
         X1 =    ObjectGet(Name[ÂÎËÍÀ], OBJPROP_TIME1); 
         Y1 =    ObjectGet(Name[ÂÎËÍÀ], OBJPROP_PRICE1);
         X2 =    ObjectGet(Name[ÂÎËÍÀ], OBJPROP_TIME2); 
         Y2 =    ObjectGet(Name[ÂÎËÍÀ], OBJPROP_PRICE2);
         ÖÂÅÒ  = ObjectGet(Name[ÂÎËÍÀ], OBJPROP_COLOR);
         ÑÒÈËÜ = ObjectGet(Name[ÂÎËÍÀ], OBJPROP_STYLE);
         Ò_ËÈÍÈÈ=ObjectGet(Name[ÂÎËÍÀ], OBJPROP_WIDTH);
         if (X1 > X2) redraw_LINE(Name[ÂÎËÍÀ],Name[ÂÎËÍÀ]+" r ");
         if (Y1 < Y2) LINE[ÂÎËÍÀ][0]=1; else LINE[ÂÎËÍÀ][0]=-1;//íàïðàâëåíèå âîëíû
         ObjectDelete("Ö "+Name[ÂÎËÍÀ]);
         ObjectDelete("Öåëü "+Name[ÂÎËÍÀ]);
         LINE[ÂÎËÍÀ][1]=X1;//íà÷àëî âîëíû
         LINE[ÂÎËÍÀ][2]=Y1;
         LINE[ÂÎËÍÀ][3]=X2;//êîíåö âîëíû
         LINE[ÂÎËÍÀ][4]=Y2;
         LINE[ÂÎËÍÀ][5]=Îáüåì_Âîëíû(Name[ÂÎËÍÀ]);
         if ((MathAbs(LINE[ÂÎËÍÀ][3]-LINE[ÂÎËÍÀ+1][1])<per*120) || (MathAbs(LINE[ÂÎËÍÀ][4]-LINE[ÂÎËÍÀ+1][2])/Point<=MarketInfo(Symbol(),MODE_STOPLEVEL)))
         {
            ObjectSet   (Name[ÂÎËÍÀ+1], OBJPROP_COLOR, ÖÂÅÒ); //ñòûêîâêà - âûäåëåíèå öâåòà
            ObjectSet   (Name[ÂÎËÍÀ+1], OBJPROP_STYLE, ÑÒÈËÜ);// Ñòèëü   
            ObjectSet   (Name[ÂÎËÍÀ+1], OBJPROP_WIDTH, Ò_ËÈÍÈÈ);
            ObjectSet   (Name[ÂÎËÍÀ+1], OBJPROP_PRICE1 ,LINE[ÂÎËÍÀ][4]);//Ïðèâÿçêà ñëåäóþùåé âîëíû ê òåêóùåé PRICE1
            ObjectSet   (Name[ÂÎËÍÀ+1], OBJPROP_TIME1  ,LINE[ÂÎËÍÀ][3]);//Ïðèâÿçêà ñëåäóþùåé âîëíû ê òåêóùåé TIME1
         }
         ÈÍÔÎ = "Èíôî "+Name[ÂÎËÍÀ]+" ðû÷àã "+DoubleToStr(MathAbs(LINE[ÂÎËÍÀ][2]-LINE[ÂÎËÍÀ][4])/Point,0);
         if (ÂÎËÍÀ==3&&(LINE[3][5]<LINE[2][5]||LINE[3][5]<LINE[1][5]||LINE[3][5]<LINE[4][5]||LINE[3][5]<LINE[5][5])) òåêñò = "Îáüåì íå ìîæåò áûòü ìåíüøå â 3 âîëíå "+DoubleToStr(LINE[ÂÎËÍÀ][5],0);
         else òåêñò = "V = "+DoubleToStr(LINE[ÂÎËÍÀ][5],0);
         óäàëèòü_îáüåêòû("Èíôî");
         ObjectCreate (ÈÍÔÎ, OBJ_TEXT  ,0,LINE[ÂÎËÍÀ][3], LINE[ÂÎËÍÀ][4]+shift_Y*Ò_ËÈÍÈÈ*3*LINE[ÂÎËÍÀ][0],0,0,0,0);
         ObjectSetText(ÈÍÔÎ,òåêñò ,8,"Arial");
         ObjectSet    (ÈÍÔÎ, OBJPROP_COLOR, ÖÂÅÒ);
         
         ObjectDelete ("Name "+Name[ÂÎËÍÀ]);
         ObjectCreate ("Name "+Name[ÂÎËÍÀ], OBJ_TEXT  ,0,LINE[ÂÎËÍÀ][3], LINE[ÂÎËÍÀ][4]+shift_Y*Ò_ËÈÍÈÈ*2*LINE[ÂÎËÍÀ][0]+0.7*shift_Y,0,0,0,0);
         if (ÔÐÀÊÒÀË(LINE[ÂÎËÍÀ][3],Name[ÂÎËÍÀ])==true)
         {
            ObjectSetText("Name "+Name[ÂÎËÍÀ], StringSubstr(Name[ÂÎËÍÀ],0,1),10*Ò_ËÈÍÈÈ,"Arial");
            ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, ÖÂÅÒ);
         }
         else
         {
            ObjectSetText("Name "+Name[ÂÎËÍÀ], "íåò ôðàêòàëà" ,10,"Arial");
            ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
         }
         if (LINE[ÂÎËÍÀ][3]!=LINE[ÂÎËÍÀ+1][1]) // åñëè íåò ñëåäóþùåé âîëíû
         {
               if (LINE[ÂÎËÍÀ][1]!=LINE[ÂÎËÍÀ-1][3]) // åñëè íåò ïðåäûäóùåé âîëíû
               {
                  X1=LINE[ÂÎËÍÀ][3]+(LINE[ÂÎËÍÀ][3]-LINE[ÂÎËÍÀ][1])*0.38;
                  X2=LINE[ÂÎËÍÀ][3]+(LINE[ÂÎËÍÀ][3]-LINE[ÂÎËÍÀ][1])*0.62;
                  Y1=LINE[ÂÎËÍÀ][4]+(LINE[ÂÎËÍÀ][2]-LINE[ÂÎËÍÀ][4])*0.38; 
                  Y2=LINE[ÂÎËÍÀ][4]+(LINE[ÂÎËÍÀ][2]-LINE[ÂÎËÍÀ][4])*0.62;
 
                  if (ÂÎËÍÀ==6) //òåêóùàÿ Âîëíà a
                        Y1=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.50; 
 
               }
               else//åñòü ïðåä âîëíà
               {
                  switch(ÂÎËÍÀ)
                  {
                     case 2 ://òåêóùàÿ Âîëíà 2
                        X2=LINE[2][3]+(LINE[2][3]-LINE[1][1])/0.38;
                        X1=LINE[2][3]+(LINE[2][3]-LINE[1][1])/0.62;
                        Y1=LINE[1][4]-MathAbs(LINE[1][2]-LINE[1][4])*LINE[2][0]*1.00; 
                        Y2=LINE[1][4]-MathAbs(LINE[1][2]-LINE[1][4])*LINE[2][0]*1.62;
                        break;
                     case 3 ://òåêóùàÿ Âîëíà 3
                        X1=LINE[2][1]+(LINE[3][3]-LINE[1][3])*1.38;
                        X2=LINE[3][1]+(LINE[3][3]-LINE[1][3])*1.62;
                        Y1=LINE[3][4]-MathAbs(LINE[3][2]-LINE[3][4])*LINE[3][0]*0.38; 
                        Y2=LINE[3][4]-MathAbs(LINE[3][2]-LINE[3][4])*LINE[3][0]*0.50;
                        if ((Y2<LINE[1][4] && LINE[3][0]==1)||(Y2>LINE[1][4] && LINE[3][0]==-1))
                        {
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"4 ÂÎËÍÀ íå ìîæåò ëåæàòü íèæå 1 ÂÎËÍÛ",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        if (LINE[1][3]!=LINE[2][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ 1",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 4 ://òåêóùàÿ Âîëíà 4
                        X1=LINE[4][3]+(LINE[3][3]-LINE[3][1])*0.38;
                        X2=LINE[4][3]+(LINE[3][3]-LINE[3][1])*0.62;
                        Y1=LINE[4][2]-MathAbs(LINE[1][2]-LINE[3][4])*LINE[4][0]*0.62; 
                        Y2=LINE[4][2]-MathAbs(LINE[1][2]-LINE[3][4])*LINE[4][0]*1.00;
                        òåêñò="--4 ÂÎËÍÀ <> 1 ÂÎËÍÛ--";
                        ObjectDelete(òåêñò);
                        if ((LINE[4][4]<LINE[1][4] && LINE[4][0]==-1)||(LINE[4][4]>LINE[1][4] && LINE[4][0]==1))
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"4 ÂÎËÍÀ íå ìîæåò ëåæàòü íèæå 1 ÂÎËÍÛ",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectCreate(òåêñò, OBJ_TREND, 0,LINE[1][3],LINE[1][4],LINE[4][3],LINE[1][4]);
                           ObjectSet   (òåêñò, OBJPROP_COLOR, Red);    // Öâåò   
                           ObjectSet   (òåêñò, OBJPROP_STYLE, STYLE_DASH);// Ñòèëü   
                           ObjectSet   (òåêñò, OBJPROP_WIDTH, 0);
                           ObjectSet   (òåêñò, OBJPROP_BACK,  true);
                           ObjectSet   (òåêñò, OBJPROP_RAY,   false);     // Ëó÷   
                        }
                        if (LINE[1][3]!=LINE[2][1] || LINE[2][3]!=LINE[3][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ 1 èëè 2",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 5 ://òåêóùàÿ Âîëíà 5
                        X1=LINE[5][3]+(LINE[5][3]-LINE[5][1])*0.38;
                        X2=LINE[5][3]+(LINE[5][3]-LINE[5][1])*0.62;
                        Y1=LINE[5][4]-MathAbs(LINE[5][2]-LINE[5][4])*LINE[5][0]*0.38; 
                        Y2=LINE[5][4]-MathAbs(LINE[5][2]-LINE[5][4])*LINE[5][0]*0.62;
                        double MFI_3=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN  ,iBarShift(NULL,0,LINE[3][3],FALSE));
                        double MFI_5=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN  ,iBarShift(NULL,0,LINE[5][3],FALSE));
                        if (LINE[1][3]!=LINE[2][1] || LINE[2][3]!=LINE[3][1] || LINE[3][3]!=LINE[4][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ 1,2 èëè 3",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        if ((MFI_3 < MFI_5 && LINE[5][0]==1)||(MFI_3 > MFI_5 && LINE[5][0]==-1))
                        {
                           ObjectDelete ("MFI "+âðåìÿ(LINE[3][3]));
                           ObjectCreate ("MFI "+âðåìÿ(LINE[3][3]),OBJ_TEXT,0,LINE[3][3],LINE[5][4]+shift_Y*LINE[5][0],0,0,0,0);
                           ObjectSetText("MFI "+âðåìÿ(LINE[3][3]),DoubleToStr(MFI_3,0),8,"Arial");
                           ObjectSet    ("MFI "+âðåìÿ(LINE[3][3]),OBJPROP_COLOR, ÖÂÅÒ);
                           ObjectDelete ("MFI "+âðåìÿ(LINE[5][3]));
                           ObjectCreate ("MFI "+âðåìÿ(LINE[5][3]),OBJ_TEXT,0,LINE[5][3],LINE[5][4]+shift_Y*LINE[5][0],0,0,0,0);
                           ObjectSetText("MFI "+âðåìÿ(LINE[5][3]),DoubleToStr(MFI_5,0),8,"Arial");
                           ObjectSet    ("MFI "+âðåìÿ(LINE[5][3]),OBJPROP_COLOR, ÖÂÅÒ);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"Íåò äèâåðãåíöèè MFI 3 è 5 ÂÎËÍÛ",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 6 ://òåêóùàÿ Âîëíà a
                        X1=LINE[6][3]+(LINE[6][3]-LINE[6][1])*0.38;
                        X2=LINE[6][3]+(LINE[6][3]-LINE[6][1])*0.62;
                        Y1=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.50; 
                        Y2=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.62;
                        break;
                     case 7 ://òåêóùàÿ Âîëíà b
                        X2=LINE[7][3]+(LINE[7][3]-LINE[6][1])/0.38;
                        X1=LINE[7][3]+(LINE[7][3]-LINE[6][1])/0.62;
                        Y1=LINE[6][4]-MathAbs(LINE[6][2]-LINE[6][4])*LINE[7][0]*1.00; 
                        Y2=LINE[6][4]-MathAbs(LINE[6][2]-LINE[6][4])*LINE[7][0]*1.62;
                        break;
                     case 8 ://òåêóùàÿ Âîëíà c
                        X1=LINE[7][1]+(LINE[8][3]-LINE[6][3])*1.38;
                        X2=LINE[7][1]+(LINE[8][3]-LINE[6][3])*1.62;
                        Y1=LINE[8][4]-MathAbs(LINE[8][2]-LINE[8][4])*LINE[8][0]*0.38; 
                        Y2=LINE[8][4]-MathAbs(LINE[8][2]-LINE[8][4])*LINE[8][0]*0.50;
                        if (LINE[6][3]!=LINE[7][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ a",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 9 ://òåêóùàÿ Âîëíà d
                        X1=LINE[9][3]+(LINE[8][3]-LINE[8][1])*0.38;
                        X2=LINE[9][3]+(LINE[8][3]-LINE[8][1])*0.62;
                        Y1=LINE[9][2]-MathAbs(LINE[6][2]-LINE[8][4])*LINE[9][0]*0.62; 
                        Y2=LINE[9][2]-MathAbs(LINE[6][2]-LINE[8][4])*LINE[9][0]*1.00;
                         if (LINE[6][3]!=LINE[7][1] || LINE[7][3]!=LINE[8][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ a èëè b ",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 10 ://òåêóùàÿ Âîëíà e
                        X1=LINE[10][3]+(LINE[10][3]-LINE[10][1])*0.38;
                        X2=LINE[10][3]+(LINE[10][3]-LINE[10][1])*0.62;
                        Y1=LINE[10][4]-MathAbs(LINE[10][2]-LINE[10][4])*LINE[10][0]*0.38; 
                        Y2=LINE[10][4]-MathAbs(LINE[10][2]-LINE[10][4])*LINE[10][0]*0.62;
                        if (LINE[6][3]!=LINE[7][1] || LINE[7][3]!=LINE[8][1] || LINE[8][3]!=LINE[9][1])
                        {
                           ObjectSet(Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[ÂÎËÍÀ],"íåò ÂÎËÍÛ a,b èëè c",8,"Arial");
                           ObjectSet    ("Name "+Name[ÂÎËÍÀ], OBJPROP_COLOR, Red);
                        }
                        break;
                  }//switch
            }
            ObjectCreate("Ö "+Name[ÂÎËÍÀ], OBJ_TREND, 0,LINE[ÂÎËÍÀ][3],LINE[ÂÎËÍÀ][4],X1,Y1);
            ObjectSet   ("Ö "+Name[ÂÎËÍÀ], OBJPROP_COLOR, ÖÂÅÒ);    // Öâåò   
            ObjectSet   ("Ö "+Name[ÂÎËÍÀ], OBJPROP_STYLE, STYLE_DASH);// Ñòèëü   
            ObjectSet   ("Ö "+Name[ÂÎËÍÀ], OBJPROP_WIDTH, 0);
            ObjectSet   ("Ö "+Name[ÂÎËÍÀ], OBJPROP_BACK,  true);
            ObjectSet   ("Ö "+Name[ÂÎËÍÀ], OBJPROP_RAY,   false);     // Ëó÷   
               
            ObjectCreate("Öåëü "+Name[ÂÎËÍÀ], OBJ_RECTANGLE,0,0,0,0,0);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_STYLE, STYLE_DASH);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_COLOR, ÖÂÅÒ);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_BACK,  false);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_TIME1 ,X1);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_PRICE1,Y1);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_TIME2 ,X2);
            ObjectSet   ("Öåëü "+Name[ÂÎËÍÀ], OBJPROP_PRICE2,Y2);
         }
      }//-Âîëíû 1 - å --------------------------------------------------------------------------------------------------------+
   }//for
  
   ÖÂÅÒ = color_per(per);
   for(k=1; k<=10; k++) 
   {
      ObjectDelete ("Name "+k);
      if (ObjectFind(Name[k])==0)
      {
         ObjectCreate ("Name "+k, OBJ_LABEL, 0, 0, 0);// Ñîçäàíèå îáú.
         ObjectSetText("Name "+k, Name[k]+âðåìÿ(LINE[k][1])+" "+DoubleToStr(LINE[k][2],Digits)+" "+âðåìÿ(LINE[k][3])+" "+DoubleToStr(LINE[k][4],Digits)     ,8,"Arial");
         ObjectSet    ("Name "+k, OBJPROP_CORNER, 3);
         ObjectSet    ("Name "+k, OBJPROP_XDISTANCE, 300);
         ObjectSet    ("Name "+k, OBJPROP_YDISTANCE, 10+10*k);
         ObjectSet    ("Name "+k, OBJPROP_COLOR, ÖÂÅÒ);    // Öâåò 
      }
      else //î÷èñòêà çíà÷åíèé óäàëåííîé âîëíû
      {
         LINE[k][0]=0;LINE[k][1]=0;LINE[k][2]=0;LINE[k][3]=0;LINE[k][4]=0;LINE[k][5]=0;
         //óäàëèòü_îáüåêòû("Name");
         //óäàëèòü_îáüåêòû("MFI");
         ObjectDelete("Ö "+Name[k]);
         ObjectDelete("ÔÐÀÊÒÀË "+Name[k]);
         ObjectDelete("color_MFI "+Name[k]+"1");
         ObjectDelete("color_MFI "+Name[k]+"2");
         ObjectDelete("color_MFI "+Name[k]+"3");
         ObjectDelete("color_MFI "+Name[k]+"4");
         ObjectDelete("color_MFI "+Name[k]+"5");
         óäàëèòü_îáüåêòû("Èíôî "+Name[k]);
         ObjectDelete("Öåëü "+Name[k]);
         ObjectDelete("Name "+Name[k]);
      } //î÷èñòêà çíà÷åíèé óäàëåííîé âîëíû
   }
return;
}
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
//////////////////////////////////////////////////////////////////////
void redraw_LINE(string old, string ÈÌß)
{
   datetime x1,x2;
   double   y1,y2;
   ÑÒÈËÜ = ObjectGet(old, OBJPROP_STYLE);
   ÖÂÅÒ = ObjectGet(old, OBJPROP_COLOR);
   Ò_ËÈÍÈÈ = ObjectGet(old, OBJPROP_WIDTH);    // Ò ËÈÍÈÈ
   x1 =     ObjectGet(old, OBJPROP_TIME1);
   y1 =     ObjectGet(old, OBJPROP_PRICE1);
   x2 =     ObjectGet(old, OBJPROP_TIME2);
   y2 =     ObjectGet(old, OBJPROP_PRICE2);
   if (x1>x2)
   {
      x2 =     ObjectGet(old, OBJPROP_TIME1);
      y2 =     ObjectGet(old, OBJPROP_PRICE1);
      x1 =     ObjectGet(old, OBJPROP_TIME2);
      y1 =     ObjectGet(old, OBJPROP_PRICE2);
   }
   ObjectDelete(ÈÌß); //óäàëÿåò äâîéíèêà
   ObjectCreate(ÈÌß, OBJ_TREND, 0,  x1,y1,x2,y2);
   ObjectSet   (ÈÌß, OBJPROP_COLOR, ÖÂÅÒ);    // Öâåò   
   ObjectSet   (ÈÌß, OBJPROP_STYLE, ÑÒÈËÜ);    // Ñòèëü   
   ObjectSet   (ÈÌß, OBJPROP_WIDTH, Ò_ËÈÍÈÈ);    // Ò ËÈÍÈÈ
   ObjectSet   (ÈÌß, OBJPROP_BACK,  true);
   ObjectSet   (ÈÌß, OBJPROP_RAY,   false);    // Ëó÷   
   ObjectDelete(old);
 
return;
}
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
//////////////////////////////////////////////////////////////////////
//-- ÔÐÀÊÒÀË -------------------------------------------------------------------------
bool ÔÐÀÊÒÀË(datetime t,string ÈÌß)
{
   int i=0,KOD;
   int ÒÅÊ_ÁÀÐ=iBarShift(NULL,0,t,FALSE);
   double fr_DN = iFractals(NULL,0,MODE_LOWER,ÒÅÊ_ÁÀÐ);
   double fr_UP = iFractals(NULL,0,MODE_UPPER,ÒÅÊ_ÁÀÐ);
   if (fr_UP==0 &&fr_DN ==0) return(false);
   ObjectDelete("ÔÐÀÊÒÀË "+ÈÌß);
   double y,Y,fr;
   if (ObjectFind(ÈÌß)==0)
   {
      if (fr_DN!=0) fr=fr_DN; else fr=fr_UP;
      if (t==ObjectGet(ÈÌß, OBJPROP_TIME2)) ObjectSet(ÈÌß, OBJPROP_PRICE2,fr);//Ïðèâÿçêà âîëíû ê ÔÐÀÊÒÀËÓ
      if (t==ObjectGet(ÈÌß, OBJPROP_TIME1)) ObjectSet(ÈÌß, OBJPROP_PRICE1,fr);//Ïðèâÿçêà âîëíû ê ÔÐÀÊÒÀËÓ
      ÖÂÅÒ  = ObjectGet(ÈÌß, OBJPROP_COLOR);
      Ò_ËÈÍÈÈ = ObjectGet(ÈÌß, OBJPROP_WIDTH);    // Ò ËÈÍÈÈ
   }
   else
   {
      ÖÂÅÒ  = Yellow;
      Ò_ËÈÍÈÈ = 1;    // Ò ËÈÍÈÈ
   }
   if (fr_DN != 0) {Y = fr_DN-shift_Y * Ò_ËÈÍÈÈ + 0.5 * shift_Y; y = Y + 0.7 * shift_Y; KOD=218;} 
   if (fr_UP != 0) {Y = fr_UP+shift_Y * Ò_ËÈÍÈÈ + 0.5 * shift_Y; y = Y - 1.2 * shift_Y; KOD=217;}
   ObjectCreate("ÔÐÀÊÒÀË "+ÈÌß, OBJ_ARROW,0,t,Y,0,0,0,0);
   ObjectSet   ("ÔÐÀÊÒÀË "+ÈÌß, OBJPROP_ARROWCODE,KOD);
   ObjectSet   ("ÔÐÀÊÒÀË "+ÈÌß, OBJPROP_COLOR,ÖÂÅÒ );
   for(int k=ÒÅÊ_ÁÀÐ-2; k<=ÒÅÊ_ÁÀÐ+2; k++) 
   {
      i++;
      ObjectDelete("color_MFI "+ÈÌß+i);
      ObjectCreate("color_MFI "+ÈÌß+i, OBJ_ARROW,0,Time[k],y,0,0,0,0);
      ObjectSet   ("color_MFI "+ÈÌß+i, OBJPROP_ARROWCODE,117);
      ObjectSet   ("color_MFI "+ÈÌß+i, OBJPROP_WIDTH, 0);    // Ò ËÈÍÈÈ
      ObjectSet   ("color_MFI "+ÈÌß+i, OBJPROP_BACK, true);
      if ( iVolume(NULL, 0, k) > iVolume(NULL, 0, k+1) && iBWMFI(NULL, 0, k) > iBWMFI(NULL, 0, k+1) ) ObjectSet("color_MFI "+ÈÌß+i, OBJPROP_COLOR,Lime); //Çåëåíûé
      if ( iVolume(NULL, 0, k) < iVolume(NULL, 0, k+1) && iBWMFI(NULL, 0, k) < iBWMFI(NULL, 0, k+1) ) ObjectSet("color_MFI "+ÈÌß+i, OBJPROP_COLOR,Brown); //Óâÿäàþùèé
      if ( iVolume(NULL, 0, k) < iVolume(NULL, 0, k+1) && iBWMFI(NULL, 0, k) > iBWMFI(NULL, 0, k+1) ) ObjectSet("color_MFI "+ÈÌß+i, OBJPROP_COLOR,Blue); //Ôàëüøèâûé
      if ( iVolume(NULL, 0, k) > iVolume(NULL, 0, k+1) && iBWMFI(NULL, 0, k) < iBWMFI(NULL, 0, k+1) ) ObjectSet("color_MFI "+ÈÌß+i, OBJPROP_COLOR,Pink); //Ïðèñåäàþùèé
      ObjectSet("ÔÐÀÊÒÀË "+ÈÌß, OBJPROP_WIDTH,Ò_ËÈÍÈÈ);    // Ò ËÈÍÈÈ
   }
return(true);
}
   //-- ÔÐÀÊÒÀË -------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
///////////////////////////////////////////////////////////////////
string âðåìÿ(int taim)
{
   string sTaim;
   //int YY=TimeYear(taim);   // Year         
   int MN=TimeMonth(taim);  // Month                  
   int DD=TimeDay(taim);    // Day         
   int HH=TimeHour(taim);   // Hour                  
   int MM=TimeMinute(taim); // Minute   
 
   if (DD<10) sTaim = "0"+DoubleToStr(DD,0);
   else sTaim = DoubleToStr(DD,0);
   sTaim = sTaim+"/";
   if (MN<10) sTaim = sTaim+"0"+DoubleToStr(MN,0);
   else sTaim = sTaim+DoubleToStr(MN,0);
   sTaim = sTaim+" ";
   if (HH<10) sTaim = sTaim+"0"+DoubleToStr(HH,0);
   else sTaim = sTaim+DoubleToStr(HH,0);
   if (MM<10) sTaim = sTaim+":0"+DoubleToStr(MM,0);
   else sTaim = sTaim+":"+DoubleToStr(MM,0);
   return(sTaim);
}
//*////////////////////////////////////////////////////////////////*//
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//////////////////////////////////////////////////////////////////////
int N_Âîëíû(string Obj_Name)
{
   if (ObjectType(Obj_Name)!=2) return(-1);//òèï îáüåêòà íå ëèíèÿ
   int V=-1;
   string volna = StringSubstr( Obj_Name, 0, 2);
   if (volna=="1 ") V=1; 
   if (volna=="2 ") V=2; 
   if (volna=="3 ") V=3; 
   if (volna=="4 ") V=4; 
   if (volna=="5 ") V=5; 
   if (volna=="a ") V=6; 
   if (volna=="b ") V=7; 
   if (volna=="c ") V=8; 
   if (volna=="d ") V=9; 
   if (volna=="e ") V=10;
   if (V<0) return(-1);
   if (StringFind(Obj_Name,"ÂÎËÍÀ",2) != 2) return(V);
   //Îñòàëèñü òîëüêî ÂÎËÍû îáîçíà÷åííûå "ÂÎËÍÀ"
   if (StringFind(Obj_Name,string_ïåð(per),8) == 8) //âîëíà ñîçäàíà â ýòîì âðåìåííîì ïåðèîäå
   {
      ÖÂÅÒ = color_per(per);
      ObjectSet(Obj_Name,OBJPROP_COLOR,ÖÂÅÒ);
      return(V);
   }
return(-1);
}
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//////////////////////////////////////////////////////////////////////
color color_per(int per)
{
      switch(per)
      {
         case 1    :  //1 ìèíóòà
            return(Ö1);
         case 5    :  //5 ìèíóò 
            return(Ö2);
         case 15   :  //15 ìèíóò
            return(Ö3);
         case 30   :  //30 ìèíóò
            return(Ö4);
         case 60   :  //1 ÷àñ
            return(Ö5);
         case 240  :  //4 ÷àñà
            return(Ö6);
         case 1440 :  //1 äåíü
            return(Ö7);
         case 10080:  //1 íåäåëÿ
            return(Ö8);
         case 43200:  //1 ìåñÿö
            return(Ö9);
      }
return(Gray);
}
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//////////////////////////////////////////////////////////////////////
double Îáüåì_Âîëíû(string Name)
{
   double vol=0;
   int Íà÷_ÁÀÐ,Êîí_ÁÀÐ;
   int i=0;
   Íà÷_ÁÀÐ=iBarShift(NULL,0,ObjectGet(Name, OBJPROP_TIME1),FALSE);
   Êîí_ÁÀÐ=iBarShift(NULL,0,ObjectGet(Name, OBJPROP_TIME2),FALSE);
   for(int n=Êîí_ÁÀÐ; n<=Íà÷_ÁÀÐ; n++) 
   {
      vol = vol + iVolume(NULL,0,n);
      i++;
   }
   vol = vol/i;
//   vol = iVolume(NULL,0,Íà÷_ÁÀÐ);
return(vol);
}
//////////////////////////////////////////////////////////////////////
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ*/
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//*////////////////////////////////////////////////////////////////*//
string string_ïåð(int per)
{
   switch(per)
   {
      case 1    : return("M_1");   //1 ìèíóòà
         break;
      case 5    : return("M_5");   //5 ìèíóò 
         break;
      case 15   : return("M15");  //15 ìèíóò
         break;
      case 30   : return("M30");  //30 ìèíóò
         break;
      case 60   : return("H 1");   //1 ÷àñ
         break;
      case 240  : return("H_4");   //4 ÷àñà
         break;
      case 1440 : return("D_1");   //1 äåíü
         break;
      case 10080: return("W_1");   //1 íåäåëÿ
         break;
      case 43200: return("MN1");  //1 ìåñÿö
         break;
   }
return("îøèáêà ïåðèîäà");
}
//*////////////////////////////////////////////////////////////////*//
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
 
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//*////////////////////////////////////////////////////////////////*//
int óäàëèòü_îáüåêòû(string PreName)                                     //óäàëÿåò îáüåêòû íà÷èíàþùèåñÿ íà PreName
  {
   for(int k=ObjectsTotal()-1; k>=0; k--) 
     {
      string Obj_Name=ObjectName(k);                           // Çàïðàøèâàåì èìÿ îáúåêòà
      string Head=StringSubstr(Obj_Name,0,StringLen(PreName)); // Èçâëåêàåì ïåðâûå ñèìîëû
 
      if (Head==PreName)// Íàéäåí îáúåêò, ..
         {
         ObjectDelete(Obj_Name);
         }                  
     }
   return(0);
  }
//*////////////////////////////////////////////////////////////////*//
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---