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

 
abeiks:

Добрый день.

Пытаюсь разобратся с MQL5.  Разобрал exp_tema.mq5 и переделал код. Сейчас должен печатать в журнале MA каждой свечи (последние 20 ). Но не понимаю, почему журнале отсутствует некоторые записи. Заметил,  если в журнале отсутствует ma[3] тогда и не будет ma[13]. Почему это происходит? Где там ошибка?

Вот тут

if(CopyBuffer(Handle[Number],0,0,20,ma)<0)

 

явно не хватает проверок:

  1. BarsCalculated >= 20
  2. CopyBuffer==20 
Файлы:
exp_tema.mq5  27 kb
 
sergeev:

видюшку не надо.

сделайте в коде подробное Print, чтоб мы в журнале посмотрели чему равны промежуточные переменные.

#property copyright "Copyright 2011, "

#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double Vhod=0;
      Print("Начало_Vhod="+DoubleToString(Vhod,2));
   Vhod=linfunc(15);
      Print("Конец_Vhod="+DoubleToString(Vhod,2));
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
double  linfunc(double b) // имя функции и список параметров
  {
   double a=1;

   while((a/b)<1 && !IsStopped())//-------------------
     {
      Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
      a=a+1;
     }
   Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
   Print("a+b="+DoubleToString(a+b,2));
         double f=a+b;
         // составной оператор
         return(f);           // возвращаемое значение
         }
//+------------------------------------------------------------------+

Вот такой код.

Вот его принт

GM    0    1 (EURUSD,M1)    18:11:11    Начало_Vhod=0.00
FO    0    1 (EURUSD,M1)    18:11:13    а=1.00, b=15.00, a/b=0.07
JF    0    1 (EURUSD,M1)    18:11:13    а=2.00, b=15.00, a/b=0.13
CQ    0    1 (EURUSD,M1)    18:11:13    а=3.00, b=15.00, a/b=0.20
EH    0    1 (EURUSD,M1)    18:11:13    а=4.00, b=15.00, a/b=0.27
KS    0    1 (EURUSD,M1)    18:11:13    а=5.00, b=15.00, a/b=0.33
PJ    0    1 (EURUSD,M1)    18:11:13    а=6.00, b=15.00, a/b=0.40
PE    0    1 (EURUSD,M1)    18:11:13    а=7.00, b=15.00, a/b=0.47
HL    0    1 (EURUSD,M1)    18:11:13    а=8.00, b=15.00, a/b=0.53
MF    0    1 (EURUSD,M1)    18:11:13    а=9.00, b=15.00, a/b=0.60
JR    0    1 (EURUSD,M1)    18:11:13    а=10.00, b=15.00, a/b=0.67
FK    0    1 (EURUSD,M1)    18:11:13    а=11.00, b=15.00, a/b=0.73
OP    0    1 (EURUSD,M1)    18:11:13    а=12.00, b=15.00, a/b=0.80
MI    0    1 (EURUSD,M1)    18:11:13    а=13.00, b=15.00, a/b=0.87
KF    0    1 (EURUSD,M1)    18:11:13    а=14.00, b=15.00, a/b=0.93
EO    0    1 (EURUSD,M1)    18:11:13    а=15.00, b=15.00, a/b=1.00
DJ    0    1 (EURUSD,M1)    18:11:14    a+b=30.00
RL    0    1 (EURUSD,M1)    18:11:17    Конец_Vhod=0.00
NH    2    1 (EURUSD,M1)    18:11:24    debugging terminated

 
Fia:


Если дебажный EX5 запускать не из редактора, а прямо в терминале - такой же результат?

Можете приложить отладочный EX5? 

 
Fia:

Вот его принт

GM    0    1 (EURUSD,M1)    18:11:11    Начало_Vhod=0.00
FO    0    1 (EURUSD,M1)    18:11:13    а=1.00, b=15.00, a/b=0.07
JF    0    1 (EURUSD,M1)    18:11:13    а=2.00, b=15.00, a/b=0.13
CQ    0    1 (EURUSD,M1)    18:11:13    а=3.00, b=15.00, a/b=0.20
EH    0    1 (EURUSD,M1)    18:11:13    а=4.00, b=15.00, a/b=0.27
KS    0    1 (EURUSD,M1)    18:11:13    а=5.00, b=15.00, a/b=0.33
PJ    0    1 (EURUSD,M1)    18:11:13    а=6.00, b=15.00, a/b=0.40
PE    0    1 (EURUSD,M1)    18:11:13    а=7.00, b=15.00, a/b=0.47
HL    0    1 (EURUSD,M1)    18:11:13    а=8.00, b=15.00, a/b=0.53
MF    0    1 (EURUSD,M1)    18:11:13    а=9.00, b=15.00, a/b=0.60
JR    0    1 (EURUSD,M1)    18:11:13    а=10.00, b=15.00, a/b=0.67
FK    0    1 (EURUSD,M1)    18:11:13    а=11.00, b=15.00, a/b=0.73
OP    0    1 (EURUSD,M1)    18:11:13    а=12.00, b=15.00, a/b=0.80
MI    0    1 (EURUSD,M1)    18:11:13    а=13.00, b=15.00, a/b=0.87
KF    0    1 (EURUSD,M1)    18:11:13    а=14.00, b=15.00, a/b=0.93
EO    0    1 (EURUSD,M1)    18:11:13    а=15.00, b=15.00, a/b=1.00
DJ    0    1 (EURUSD,M1)    18:11:14    a+b=30.00
RL    0    1 (EURUSD,M1)    18:11:17    Конец_Vhod=0.00
NH    2    1 (EURUSD,M1)    18:11:24    debugging terminated

Не воспроизводится.

2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Конец_Vhod=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   a+b=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=15.00, b=15.00, a/b=1.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=14.00, b=15.00, a/b=0.93
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=13.00, b=15.00, a/b=0.87
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=12.00, b=15.00, a/b=0.80
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=11.00, b=15.00, a/b=0.73
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=10.00, b=15.00, a/b=0.67
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=9.00, b=15.00, a/b=0.60
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=8.00, b=15.00, a/b=0.53
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=7.00, b=15.00, a/b=0.47
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=6.00, b=15.00, a/b=0.40
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=5.00, b=15.00, a/b=0.33
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=4.00, b=15.00, a/b=0.27
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=3.00, b=15.00, a/b=0.20
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=2.00, b=15.00, a/b=0.13
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=1.00, b=15.00, a/b=0.07
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Начало_Vhod=0.00

Win7 x64

MT5 x64  build 687

 
alexvd:

Если дебажный EX5 запускать не из редактора, а прямо в терминале - такой же результат?

Можете приложить отладочный EX5? 

Да интересно получается, если запускаю с тестера, работает 30 выдает, если в качестве советника тоже выдает 30 на принт.

Если иду опять в отладку там 0.


MetaDriver

На каком билде и на какой виде (извиняюсь за выражение) получилось.

Надо все таки наверно видюшку выложить будет, если не у кого воспроизвести сие чудо не получится.

Файлы:
1.ex5  5 kb
 
alexvd:

Вот тут

 

явно не хватает проверок:

  1. BarsCalculated >= 20
  2. CopyBuffer==20 

Спасибо, попытаюсь добавить.

 

Вот видео (только там разрешение побольше 720 выбирайте, а то все в мыле будит)

https://www.youtube.com/watch?v=Prpw6DUYvjY&feature=youtu.be

Win7 64bit   MT5 687 билд

Как выяснил эффект когда return  выдает 0, происходит вроде только в отладчике. 

При этом, если использовать только кнопку "шаг с заходом" вроде работает.

Если войдя в цикл while выйти кнопкой "шаг на ружу" не работает на выходе стабильно 0.

В общем на видео все видно, но как быть и чего делать пока мне не понятно (и почему так только у меня?)

 
Fia:
Win7 64bit   MT5 687 билд
Битность терминала какая?
 

При оптимизации вылезли непонятные символы

На вкладке график оптимизации по вертикали все значения -1

 
alexvd:

Вот тут

 

явно не хватает проверок:

  1. BarsCalculated >= 20
  2. CopyBuffer==20 

Однако с буферами мне пока проблеми, читаю - всё понятно а как надо применять в коде, так не особо понятно. Если не сложно, можете вставить это в код?

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