Ошибки, баги, вопросы - страница 422

 
После обновления на билд 468 в тестере перестатали обрабатываться сделки с диагнозом [trade disabled]. Тестирование на счёте чемпионата 2010.
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

Добрый день, форумчане.

 Помогите, пожалуйста, разобраться. Индикатор почему-то не отображается на графике - где ошибка, непонятно.

В общем, на графике он должен отображаться вот так:

 

Но у меня в окне этого индикатора просто пустота. МТ 4-й.

 Вот код индикатора. Ошибка в коде или в чём-то ещё?

//+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
//---- indicator parameters
extern int    BandsPeriod=50;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;
extern int    TrendBars = 10;
extern bool EnableTextDisplay = true;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
double HighTrend[];
double LowTrend[];
double MidTrend[];

//bool DisplayText = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
   SetIndexBuffer(3,HighTrend);
   SetIndexBuffer(4,LowTrend);
   SetIndexBuffer(5,MidTrend);
   
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   if(EnableTextDisplay)
   {
      DisplayLabel_1();
      DisplayLabel_2();
      DisplayLabel_3();
   }
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      while(k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
//----

   double TestVal1 = 0;
   double TrendValueHigh = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = UpperBuffer[i] - UpperBuffer[1+1];
         TrendValueHigh = TrendValueHigh - TestVal1;

   }
   double TrendValueLow = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = LowerBuffer[i] - LowerBuffer[1+1];
         TrendValueLow = TrendValueLow - TestVal1;

   }   
   double TrendValueMid = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = MovingBuffer[i] - MovingBuffer[1+1];
         TrendValueMid = TrendValueMid - TestVal1;

   }  
   
   
   MidTrend[0] = TrendValueMid * 1000;
   HighTrend[0] = TrendValueHigh * 1000;
   LowTrend[0] = TrendValueLow * 1000;


   if(EnableTextDisplay)
   {
      ObjectSetText("Label_Message1","High " + DoubleToStr(HighTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message2","Mid " + DoubleToStr(MidTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message3","Low " + DoubleToStr(LowTrend[0], 2),14,"Arial",Yellow);
   }


   return(0);
  }
  
  int  DisplayLabel_1()  
{
   ObjectCreate("Label_Message1", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message1", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message1", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message1", OBJPROP_YDISTANCE, 15);// Y coordinate

   ObjectSetText("Label_Message1","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_2()  
{
   ObjectCreate("Label_Message2", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message2", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message2", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message2", OBJPROP_YDISTANCE, 35);// Y coordinate

   ObjectSetText("Label_Message2","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_3()  
{
   ObjectCreate("Label_Message3", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message3", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message3", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message3", OBJPROP_YDISTANCE, 55);// Y coordinate

   ObjectSetText("Label_Message3","",14,"Arial",White);
   
   return(0);      
}

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

Соори конечно но тебе скорее на сайт МТ4

http://forum.mql4.com/ru/


Это МТ5

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


Не подскажет кто какой макс. допустимый размер файла bin

который может открыть советник для чтения, а то 25 метров с 3 млн. десят. значения

открывать не хочет, а вот с 500.000 значений открывает ?

MQL4: форум по механическим торговым системам и тестированию стратегий
  • www.mql5.com
MQL4: форум по механическим торговым системам и тестированию стратегий
 
Im_hungry:

Соори конечно но тебе скорее на сайт МТ4

https://www.mql5.com/ru/forum


Это МТ5

Спасибо, пойду туда.
 
Im_hungry:

Не подскажет кто какой макс. допустимый размер файла bin

который может открыть советник для чтения, а то 25 метров с 3 млн. десят. значения

открывать не хочет, а вот с 500.000 значений открывает ?

К разработчикам. В документации ничего про ограничения размера файла нетути.
 
Im_hungry:


Не подскажет кто какой макс. допустимый размер файла bin

который может открыть советник для чтения, а то 25 метров с 3 млн. десят. значения

открывать не хочет, а вот с 500.000 значений открывает ?

Надо полагать файл читаете в массив? - скорее всего просто не хватает оперативной памяти.
 
Строка


Print((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)," ",(int)ChartGetInteger(0,CHART_VISIBLE_BARS));

Возвращает почти одинаковые значения (разница только в один бар), это как?

2011.06.18 00:03:45     CHFJPY (CHFJPY,M15)     384 385

По идее одна функция должна возвращать сколько всего баров для просмотра да текущем графике ( к примеру 5000) а другая только то количество которое влезло в экран (в моем случае чуть более 380).

Билд 466, ОС Форточки 7 х64

 
olyakish:
Строка


Возвращает почти одинаковые значения (разница только в один бар), это как?

По идее одна функция должна возвращать сколько всего баров для просмотра да текущем графике ( к примеру 5000) а другая только то количество которое влезло в экран (в моем случае чуть более 380).

Билд 466, ОС Форточки 7 х64

Всё правильно. Количество видимых баров:
ChartGetInteger(0,CHART_VISIBLE_BARS)

всегда на 1 больше чем номер первого (левого) видимого бара:

ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)

Ведь последний бар (правый) имеет номер 0.

Если конечно график не "прокручен". Если график "прокручен", <номер первого видимого бара>=<количество видимых баров>+<смещение грфика в барах>-1.

А то, что Вы пишете:

...сколько всего баров для просмотра да текущем графике ( к примеру 5000)...

это немного другое:

TerminalInfoInteger(TERMINAL_MAXBARS);   // Максимальное количество баров на графике
 

Насчет того что не открывает файл размером, да и за 2010 год и 2009 2008 не хочет открывать,

код вот этим пытаюсь открыть файл созданный индюком, но пишет что не удается открыть

2 значения - первое целое (хранит время в секундах)

второе дробное (цену или еще что),


Когда время (т.е. секунды) в файле совпадает с временем, текущим, используем второе значение

и выводим его. Все это я реализовал следующим образом - работает без косяков - пока :-)


double proverka()
{
 handle= FileOpen("kor.bin", FILE_BIN|FILE_READ);
 if(handle<0) Print("-----Неоткрывается :-)");
 ulong file=FileSize(handle);
 ulong N = 0.0;
 double kor = 0.0;
 datetime bar[1];
 CopyTime(Symbol_1,NULL,0,1,bar);
 ulong New = (ulong) bar[0];
 while (N < file)
  {
   kor=FileReadDouble(handle); 
   N = FileTell(handle);
   if (kor == New) 
    {
     double ss = FileReadDouble(handle);
     FileClose(handle);
     return (ss);
     break;
    }
  } 
 FileClose(handle);
 return (kor);
}

любой промежуток времени кроме как от 2011, 01, 01 открывает остальные нет,

Что за дела?

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
uncleVic:

это немного другое:


Боюсь это не подойдет

TerminalInfoInteger(TERMINAL_MAXBARS); 

Потому как к примеру выставлено в настройках 50000 баров а реально загружено 11375 баров, а цель убрать вот это


Методом

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);


И какую тут цифру использовать. 

ЗЫ вот то что в onInit

   SetIndexBuffer(0,CHF,INDICATOR_DATA);
   PlotIndexSetString(0,PLOT_LABEL,"CHF");
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrMagenta);
   ArraySetAsSeries(CHF,true);
   ArrayInitialize(CHF,EMPTY_VALUE);
   //PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);

И мусор что в истории так и не чистится...

Причина обращения: