Скачать MetaTrader 5

Помогите пожалуйста с этим кодом

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Michael Sargsyan
129
Michael Sargsyan  

Вот уже неделя мучаюсь исправить ошибку вроде все нормально. При отладке дает ошибка Array out of range

Посмотрите пожалуйста я строку отметил красным. Спасибо  

#define  defIndicatorName  "Hidden Gap Volume"
#define  defObjectPrefix   "HGV_"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_minimum 0

//----------------   Inputs   --------------------
extern string  n = "      Input Values";
extern string  Note = "0 means Display all bars";
extern int     Display_Bars = 2000;
extern int     LookBack = 20;

extern string  a = "    Moving Avg ";
extern int     MA_Period = 20;

extern string  b = "    Standard Deviation ";
extern int     Std_Deviation_Period = 30;
extern double  StdDeviation_Factor = 2.0;

extern string  c = "    ";
extern string  cc = "    Display Properties";
extern string  ca = "      Mov Avg Line";
extern bool    Show_MALine = true;

extern string  cb = "   Std Deviation Line";
extern bool    Display_StdDevLine = true;

extern string  e = "    Chart Symbol & TF ";
extern bool    Display_ChartSymbol = true;
extern int     ChartLabel_Font= 10;
extern color   ChartLabel_Color = IndianRed;

extern string  d = "    Clock Display ";
extern bool    Display_Clock = true;
extern int     Clock_Font = 10;
extern color   Clock_color = Tomato;

extern string  f = "    Current Volume";
extern bool    Show_Vol = true;
extern int     Vol_Font = 10;
extern color   Vol_Color = Blue;

extern string  g = "    Current Moving Avg ";
extern bool    Show_MA = false;
extern int     MA_Font = 10;
extern color   MA_Color = Blue;

extern string  h = "    Current Deviation";
extern bool    Show_DEV = false;
extern int     DEV_Font = 10;
extern color   DEV_Color = Blue;
//-----------------------------------------

//------ Variables
int      NumberOfBars;
double   LowestVol;
string   objprefix;

//--------------  Output Buffer Arrays ------------------------
double   LessThanPrevBar[],GreaterThanPrevBar[],LowestVolBar[],ClimaxBar[],white[],LessThanPrev2Bars[];
double   ClimaxLessThanPrev[],ClimaxLessThanPrev2[];
//------ Moving Avg  &&    Standard Deviation
double   MA_Line[],StdDevLine[];
double   dblRange,dblLastRange;

double   MA_sum, MovingAvg;
double   Std_Deviation,StdDevMA_sum,StdDev_Mean, stdDevSum;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
      Print("Init() - Start Initialization");
      if(Display_Bars > 0)
         { NumberOfBars = Display_Bars;}
         else
            if(Display_Bars == 0 && MA_Period >=  Std_Deviation_Period)
               {NumberOfBars = Bars-(MA_Period+10);}
               else
                  {NumberOfBars = Bars-(NumberOfBars - Std_Deviation_Period+10);}
               
      InitializeBuffers(NumberOfBars+Std_Deviation_Period+MA_Period);   
      IndicatorShortName(defIndicatorName);
      objprefix = defObjectPrefix; //Prefix for this indicators objects
      
      //-----
      if(Display_Clock)  Do_Clock();    //start clock
      if(Display_ChartSymbol) {CreateChartLabel();}
      //MA_sum = InitializeMA(NumberOfBars,MA_Period );

//----
      return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
      Clear_Objects(StringLen(objprefix),objprefix);  //Delete created objects
      EmptyBuffers(NumberOfBars+Std_Deviation_Period+MA_Period); WindowRedraw();
//----
      return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int loop =0;
   int counted_bars=IndicatorCounted();
   if(Bars-counted_bars == Bars || Bars-counted_bars > 2)
      { MA_sum = InitializeMA(NumberOfBars,MA_Period );
         loop=NumberOfBars;
         Print("Calc From Start","  CountedBars = ",counted_bars,"  Bars-counted = ",Bars-counted_bars);}
      else
         {loop = Bars-counted_bars; }
   
   for(int i=loop; i>=0; i--)   
      {
         LessThanPrevBar[i] = 0; GreaterThanPrevBar[i] = 0; LowestVolBar[i] = 0; ClimaxBar[i] = 0; LessThanPrev2Bars[i] = 0;
         ClimaxLessThanPrev[i] = 0;ClimaxLessThanPrev2[i]=0;
         
         if(NewPeriod(i) )  {Do_Calculations(i); }
         Do_Labels(i);
         
         if(Volume[i]*(High[i]-Low[i]) >= dblLastRange && Volume[i] > Volume[i+1])
            {ClimaxBar[i] = Volume[i];continue; }
                
         if(Volume[i] > Std_Deviation)
            {
               if(Volume[i] < Volume[i+1] && Volume[i] < Volume[i+2])  
                  {if(Display_StdDevLine)
                     {ClimaxLessThanPrev[i] = Volume[i];continue;}
                    else
                      {ClimaxLessThanPrev2[i] = Volume[i];continue;}}   
               if(Volume[i] < Volume[i+1] )
                  {ClimaxLessThanPrev[i] = Volume[i];continue;} 
               if(Volume[i] > Volume[i+1] )
                  {ClimaxBar[i] = Volume[i];continue; }
            }
         LowestVol = Volume[iLowest(NULL,0,MODE_VOLUME,LookBack,i)];
         if(Volume[i] <= LowestVol ) {LowestVolBar[i] = NormalizeDouble(Volume[i],0); continue;}
            else
               if(Volume[i] < Volume[i+1] && Volume[i] < Volume[i+2] ) {LessThanPrev2Bars[i] = Volume[i]; continue;}  // <Prev 2
                  else
                     if(Volume[i] <= Volume[i+1]) {LessThanPrevBar[i] = Volume[i]; continue;}   // <= Prev

         if(Volume[i] > Volume[i+1] ) {GreaterThanPrevBar[i] = Volume[i];}  // >Prev
      }
//----
   return(0);
}
//--------------------------  Functions
void  Do_Labels(int icnt)
{
   Do_Clock();    //update clock ea tick
   Do_VolLabel(icnt);
   Do_MALabel(icnt);
   Do_DEVLabel(icnt);
}
//--------------------------------
void  Do_Calculations(int icnt)
{
   dblLastRange = CalcRange(icnt+1);

   MovingAvg = Calc_MA(icnt+1,MA_Period);
   if(Show_MALine)
      {MA_Line[icnt+1] = MovingAvg;MA_Line[icnt] = MA_Line[icnt+1];}
   
   Std_Deviation = MovingAvg + (CalcStdDev(icnt,Std_Deviation_Period)*StdDeviation_Factor);
   if(Display_StdDevLine)
      {StdDevLine[icnt+1] = Std_Deviation; StdDevLine[icnt] = StdDevLine[icnt+1];}
   
   
}
//-------------------------------------------               
double   CalcStdDev(int icnt,int StdDevPeriod)
{
   StdDevMA_sum = 0;
   //Create Moving Avg
   for(int i = (icnt+StdDevPeriod+1);i>icnt;i--)
      {  StdDevMA_sum += NormalizeDouble(Volume[i],0); }
   StdDev_Mean = NormalizeDouble(StdDevMA_sum/StdDevPeriod,0);   //-Mean Avg
   
   double stdDevSum = 0;
   for(i = (icnt+Std_Deviation_Period+1); i>icnt;i--)
      { stdDevSum += NormalizeDouble(MathPow(Volume[i]-StdDev_Mean,2.0),0); }
   return(NormalizeDouble(MathSqrt(stdDevSum/StdDevPeriod),0)) ; 
}
//-------------------------
double   CalcRange(int cnt)
{
   double hiRange = 0;
   for (int i=(cnt+LookBack); i > cnt; i--)
      {
         if(Volume[i]*(High[i]-Low[i])> hiRange  ) 
            { hiRange = (Volume[i]*(High[i]-Low[i])); }
        }
   return(hiRange);
}   
//-----------------
double   InitializeMA(int cnt,int MAPeriod)
{
   MA_sum=0;MovingAvg=0;
   Print("InitializeMA()  Start Bar = ",(cnt+MAPeriod+1));
   for (int i=(cnt+MAPeriod+1); i > cnt; i--)   {MA_sum  += Volume[i];}
   return(NormalizeDouble(MA_sum,0));
}
//------------------------------
double  Calc_MA(int cnt,int MAPeriod)
{
   MA_sum -= NormalizeDouble(Volume[cnt+MAPeriod+1],0);
   MA_sum += NormalizeDouble(Volume[cnt],0);
   return(NormalizeDouble(MA_sum/MAPeriod,0));
}
//----------------
bool NewPeriod(int cnt)
{
   static datetime dtTime = 0;
   if( Time[cnt] > dtTime)
      {dtTime = Time[cnt];return(true);}
   return(false);
}
//------------
bool Do_DEVLabel(int i)                        //CURR VOL xxxx - screen label
{
   //Current Bars Volume, changes with each tick
   if(!Show_DEV) return(true);
   if(ObjectFind(objprefix+"CurrDEV") != 0)                     //create vol object
      { string DEVLabel = StringConcatenate(objprefix,"CurrDEV");   
         ObjectCreate(DEVLabel,OBJ_LABEL,WindowFind(defIndicatorName),0,0,0,0);
            ObjectSet(DEVLabel,OBJPROP_CORNER,1);          //anchor left corner,will expand to the right
               ObjectSet(DEVLabel,OBJPROP_XDISTANCE,5);    //set position from left side of screen,leave room for large #'s
                  ObjectSet(DEVLabel,OBJPROP_YDISTANCE,30);}
   ObjectSetText(DEVLabel,"Dev  "+DoubleToStr(Std_Deviation,0),DEV_Font,"Arial",DEV_Color);
   return(true);
}
//------------------------
bool Do_MALabel(int i)                        //CURR VOL xxxx - screen label
{
   //Current Bars Volume, changes with each tick
   if(!Show_MA) return(true);
   if(ObjectFind(objprefix+"CurrMA") != 0)                     //create vol object
      { string MALabel = StringConcatenate(objprefix,"CurrMA");   
         ObjectCreate(MALabel,OBJ_LABEL,WindowFind(defIndicatorName),0,0,0,0);
            ObjectSet(MALabel,OBJPROP_CORNER,1);          //anchor left corner,will expand to the right
               ObjectSet(MALabel,OBJPROP_XDISTANCE,5);    //set position from left side of screen,leave room for large #'s
                  ObjectSet(MALabel,OBJPROP_YDISTANCE,15);}
   ObjectSetText(MALabel,"MA  "+DoubleToStr(MovingAvg,0),MA_Font,"Arial",MA_Color);
   return(true);
}
//------------------------
bool Do_VolLabel(int i)                        //CURR VOL xxxx - screen label
{
   //Current Bars Volume, changes with each tick
   if(!Show_Vol) return(true);
   if(ObjectFind(objprefix+"CurrVol") != 0)                     //create vol object
      { string currVolLabel = StringConcatenate(objprefix,"CurrVol");   
         ObjectCreate(currVolLabel,OBJ_LABEL,WindowFind(defIndicatorName),0,0,0,0);
            ObjectSet(currVolLabel,OBJPROP_CORNER,1);          //anchor left corner,will expand to the right
               ObjectSet(currVolLabel,OBJPROP_XDISTANCE,5);    //set position from left side of screen,leave room for large #'s
                  ObjectSet(currVolLabel,OBJPROP_YDISTANCE,1);}
   ObjectSetText(currVolLabel,"Vol.  "+DoubleToStr(Volume[i],0),Vol_Font,"Arial",Vol_Color);
   return(true);
}
//---------       Clock Routine     --------------------------------
void Do_Clock()                     //displays time left in bar, may be toggled on/off in settings
{
         datetime saveTime; string itime;
         
    if(!Display_Clock) return;                                  //clock display setting to false, return
    if(TimeCurrent() < saveTime+1)  return;                    //only calculate every second

    saveTime = TimeCurrent();                                  //save new time
//----
    if(ObjectFind(objprefix+"Clock") != 0)                     //create clock object
      {ObjectCreate(objprefix+"Clock", OBJ_LABEL, 0, 0, 0,0,0);
         ObjectSet(objprefix+"Clock",OBJPROP_CORNER,1);         
            ObjectSet(objprefix+"Clock",OBJPROP_XDISTANCE,5);     
               ObjectSet(objprefix+"Clock",OBJPROP_YDISTANCE,30); }
               
    ObjectSetText(objprefix+"Clock",TimeToStr((Time[0] + Period()*60)-TimeCurrent(),TIME_SECONDS),
                Clock_Font,"Verdana", Clock_color); 
    return;
}
//------------------------- 
void  CreateChartLabel()      //create label on init
{
   if(!Display_ChartSymbol) return;    //ChartLabel display set to false
   string   strChartLabel = StringConcatenate(objprefix,"ChartLabel"); 
   string   strTime = " ";
   switch(Period())
   {
      case  1:    strTime = "M1";   break;
      case  5:    strTime = "M5";   break;
      case  15:   strTime = "M15";  break;
      case  30:   strTime = "M30";  break;
      case  60:   strTime = "H1";   break;
      case  240:  strTime = "H4";   break;
      case  1440: strTime = "D1";   break;
      default:    strTime =  " ";
   }            
   ObjectCreate(strChartLabel,OBJ_LABEL,0,0,0,0,0);
   ObjectSet(strChartLabel,OBJPROP_CORNER,1);         //anchor left corner,will expand to the right
   ObjectSet(strChartLabel,OBJPROP_XDISTANCE,5);   //set position from left side of screen,leave room for large #'s
   ObjectSet(strChartLabel,OBJPROP_YDISTANCE,15);
   ObjectSetText(strChartLabel,StringConcatenate(Symbol(),"  ",strTime),ChartLabel_Font,"Arial",ChartLabel_Color);
   return(true);
}
//----------------------------------------------------
bool  Clear_Objects(int stringlength,string objprefix)
   {
      for(int i=ObjectsTotal();i >= 0;i--)
          {if(StringSubstr(ObjectName(i),0,stringlength)==objprefix) ObjectDelete(ObjectName(i));}
      return(true);
   }
//------------------------------------     
void  InitializeBuffers(int NmbrBars)
{
//---- indicators
      SetIndexBuffer(0,LowestVolBar);
      SetIndexStyle(0,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,Yellow);
      SetIndexDrawBegin(0,Bars-NmbrBars);
      SetIndexLabel(0,"Lowest Vol Bar");
      SetIndexEmptyValue(0,0.0) ;
      
      SetIndexBuffer(1,LessThanPrevBar);
      SetIndexStyle(1,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,Red);
      SetIndexLabel(1,"Vol < Prev Bar");
      SetIndexEmptyValue(1,0.0) ;
      
      SetIndexBuffer(2,LessThanPrev2Bars);
      SetIndexStyle(2,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,Pink);
      SetIndexLabel(2,"Vol < Prev 2 Bars");
      SetIndexEmptyValue(2,0.0) ;
      
      SetIndexBuffer(3,GreaterThanPrevBar);
      SetIndexStyle(3,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,RoyalBlue);
      SetIndexLabel(3,"Vol > Prev Bar");
      SetIndexEmptyValue(3,0.0) ;
      
      SetIndexBuffer(4,ClimaxBar);
      SetIndexStyle(4,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,DarkBlue);
      SetIndexLabel(4,"Climactic Bar");
      SetIndexEmptyValue(4,0.0) ;
      
      SetIndexBuffer(5,ClimaxLessThanPrev);
      SetIndexStyle(5,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,Crimson);
      SetIndexLabel(5,"Climactic < Prev ");
      SetIndexEmptyValue(5,0.0) ;

   //   if(Display_StdDevLine == true)
         {
            SetIndexBuffer(6,StdDevLine);
            SetIndexStyle(6,DRAW_LINE,STYLE_DOT,1,Green);
            SetIndexLabel(6,"Std Deviation("+DoubleToStr(StdDeviation_Factor,2)+")");
            SetIndexEmptyValue(6,0.0) ;
         }
   /*   else
         {
            SetIndexBuffer(6,ClimaxLessThanPrev2);
            SetIndexStyle(6,DRAW_HISTOGRAM,DRAW_HISTOGRAM,3,Magenta);
            SetIndexLabel(6,"Climactic < Prev 2");
            SetIndexEmptyValue(6,0.0) ;
         }*/
      SetIndexBuffer(7,MA_Line);
      SetIndexStyle(7,DRAW_LINE,STYLE_SOLID,1,DarkGreen);
      SetIndexLabel(7,"Average("+MA_Period+")");
      SetIndexEmptyValue(7,0.0) ;
      
      EmptyBuffers(NmbrBars);
      Print("Buffers Initialized Bars = ",NmbrBars);  
}
//-------------------------------
bool EmptyBuffers(int NmbrBars)
{     
      //----------   Make sure buffers are cleaned out on TF change
      int icnt= 0;
      for(icnt = NmbrBars; icnt >= 0; icnt--)
         {
            LessThanPrevBar[icnt] = 0; GreaterThanPrevBar[icnt] = 0; LowestVolBar[icnt] = 0; 
            ClimaxBar[icnt] = 0; LessThanPrev2Bars[icnt] = 0;ClimaxLessThanPrev[icnt]=0;//ClimaxLessThanPrev2[icnt]=0;
            MA_Line[icnt] = 0;StdDevLine[icnt]=0;
         }
      MA_sum=0;MovingAvg=0;  
      WindowRedraw();  
}
Vladimir Karputov
Модератор
85887
Vladimir Karputov  

Вставляйте, пожалуйста, код правильно. Воспринимать правильно вставленный код намного приятнее: Правильно вставляем код на форуме 
Michael Sargsyan
129
Michael Sargsyan  
barabashkakvn:

Вставляйте, пожалуйста, код правильно. Воспринимать правильно вставленный код намного приятнее: Правильно вставляем код на форуме 
Спасибо что откликнулись уже исправил просто первый раз я тут
Vladimir Karputov
Модератор
85887
Vladimir Karputov  

Обновите свой терминал, если еще не обновили. Ошибки выхода за диапазон не увидел, но были ошибки объявлять имена переменных с уже объявленными именами.

Ошибки отмечены

//Error.
Файлы:
Michael Sargsyan
129
Michael Sargsyan  
barabashkakvn:

Обновите свой терминал, если еще не обновили. Ошибки выхода за диапазон не увидел, но были ошибки объявлять имена переменных с уже объявленными именами.

Ошибки отмечены

Извините а у Вас работает ? у меня отладчик новый стоит а терминал не знаю 
Michael Sargsyan
129
Michael Sargsyan  
miksargsyan:
Извините а у Вас работает ? у меня отладчик новый стоит а терминал не знаю 
Терминал 4 версии
Vladimir Karputov
Модератор
85887
Vladimir Karputov  
miksargsyan:
Терминал 4 версии

 MetaTrader 4 build 660

Alexander Voronkov
15776
Alexander Voronkov  

Помогите пожалуйста заставить работать скрипт "удаления полоски-заголовка (caption) окон графиков", для 670-го билда.

#import "user32.dll"
  int SetWindowLongA(int hWnd,int nIndex, int dwNewLong);
  int GetWindowLongA(int hWnd,int nIndex);
  int SetWindowPos(int hWnd, int hWndInsertAfter,int X, int Y, int cx, int cy, int uFlags);
  int GetParent(int hWnd);
#import

#define GWL_STYLE         -16 
#define WS_CAPTION        0x00C00000 
#define WS_BORDER         0x00800000
#define WS_SIZEBOX        0x00040000
#define WS_DLGFRAME       0x00400000
#define SWP_NOSIZE        0x0001
#define SWP_NOMOVE        0x0002
#define SWP_NOZORDER      0x0004
#define SWP_NOACTIVATE    0x0010
#define SWP_FRAMECHANGED  0x0020

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start() {
  int iChartParent=GetParent(WindowHandle(Symbol(),0));    
  int iNewStyle = GetWindowLongA(iChartParent, GWL_STYLE) & (~(WS_BORDER | WS_DLGFRAME | WS_SIZEBOX));    
  if (iChartParent>0 && iNewStyle>0) {
    SetWindowLongA(iChartParent, GWL_STYLE, iNewStyle);
    SetWindowPos(iChartParent,0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE| SWP_FRAMECHANGED);
  }
  return(0);
}
Vladimir Karputov
Модератор
85887
Vladimir Karputov  
Fillellin:

Помогите пожалуйста заставить работать скрипт "удаления полоски-заголовка (caption) окон графиков", для 670-го билда.

Посмотрите у меня скрипт Transparent. В нём используются Win API получения свойств окон и хендлов. 
Alexander Voronkov
15776
Alexander Voronkov  
barabashkakvn:
Посмотрите у меня скрипт Transparent. В нём используются Win API получения свойств окон и хендлов. 
Спасибо!   Буду разбираться.
Alexander Voronkov
15776
Alexander Voronkov  
barabashkakvn:
Посмотрите у меня скрипт Transparent. В нём используются Win API получения свойств окон и хендлов. 
Если вы про, то но тоже не хочет функционировать в 670-ом.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий