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

 
Interesting:
Насколько я понимаю начисление, как на демке или в тестере...
ето как? переоткритие или начисление
 
Dmitriy2:

 

Так вот при выводе в лог значений, только один раз(в первый раз) функция параболика, т.е. CopyBuffer, возвращает 0, а не -1, как должно было быть в случае ошибки(хотя и этого не должно быть, все данные есть, все закачано, никаких офигенных многомерных массивов нет, ошибки быть не должно!).  И так происходит ТОЛЬКО в тестере и ТОЛЬКО ОДИН РАЗ. Дальше все нормально работает.

В основном коде мне без разницы что мне возвращают функции, в конечном итоге когда дело доходит до торгового запроса, полученные значения для запроса проверяются универсальной функцией, и если все нормально отправляем запрос, нет - ждем когда нормально будет... 

 

Попробуйте такой код в вашей функции получения значения параболика.

double Параболик(ENUM_TIMEFRAMES период,double step,double maximum,int бар)
  {
   double ЗначениеParabolic[1];
   int Parabolic=iSAR(Symbol(),период,step,maximum);
   int cb=CopyBuffer(Parabolic,0,бар,1,ЗначениеParabolic);
   if(cb!=1) Print("BarsCalculated ",BarsCalculated(Parabolic),", CopyBuffer ", cb, ", ArrayValue ",ЗначениеParabolic[0]);
   return(ЗначениеParabolic[0]);
  }

Вы получите примерно такой вывод в лог

2010.09.15 14:53:53     Core 1  2010.09.01 00:00:07   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
2010.09.15 14:53:53     Core 1  2010.09.01 00:00:07   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
2010.09.15 14:53:53     Core 1  2010.09.01 00:00:07   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
2010.09.15 14:53:53     Core 1  2010.09.01 00:00:07   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
2010.09.15 14:53:53     Core 1  2010.09.01 00:00:07   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
2010.09.15 14:53:53     Core 1    SLпоПервойТочкеПараболика=true

Это объяснит почему вы получаете 0 а не -1.

Повторю 3-й раз. Данные есть, но значения индикатора в тот момент МОГУТ быть еще не расчитаны. Про это написано в справке!

 
maryan.dirtyn:
ето как? переоткритие или начисление
Переоткрчтием страдает ФК, в МТ всю жизнь было начисление. Однократное в обычные дни и х3 в среду (День тройного свопа следует уточнить)...
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Interesting:
Переоткрчтием страдает ФК, в МТ всю жизнь было начисление. Однократное в обычные дни и х3 в среду (День тройного свопа следует уточнить)...
я не знаю что такое фК.. мне просто нужно знать КАК БУДЕТ на чемпионате
 
alexvd:

Попробуйте такой код в вашей функции получения значения параболика.

Вы получите примерно такой вывод в лог

Это объяснит почему вы получаете 0 а не -1.

Повторю 3-й раз. Данные есть, но значения индикатора в тот момент МОГУТ быть еще не расчитаны. Про это написано в справке!

 

точно, получаем же значение параболика, а не ответ CopyBuffer...

 

ладно... изменяем функцию параболика на приведенную вами(с принтами).

добавляю принты в цикле for(он без защиты от нуля)

if(НапрСигнала==ORDER_TYPE_BUY)
     {
      if(SLпоПервойТочкеПараболика==true)
         for(i=0;;i=i+1)
           {
            Print("бай, параболик до иф ",Параболик(PERIOD_CURRENT,0.02,0.2,i+1));
            if(iLow(PERIOD_CURRENT,i+1,1)<Параболик(PERIOD_CURRENT,0.02,0.2,i+1))// || Параболик(PERIOD_CURRENT,0.02,0.2,i+1)<=0
              {
               Print("бай, параболик после иф ",Параболик(PERIOD_CURRENT,0.02,0.2,i+1));
               break;
              }
           }
      ЗначениеSAR=NormalizeDouble(Параболик(PERIOD_CURRENT,0.02,0.2,i)/ТИК,0)*ТИК;
      if(БИД>ЗначениеSAR) //bay
         slтики=(int)NormalizeDouble((АСК-ЗначениеSAR)/ТИК,0);
     }
   if(НапрСигнала==ORDER_TYPE_SELL)
     {
      if(SLпоПервойТочкеПараболика==true)
         for(i=0;;i=i+1)
           {
            Print("селл, параболик до иф ",Параболик(PERIOD_CURRENT,0.02,0.2,i+1));
            if(iHigh(PERIOD_CURRENT,i+1,1)>Параболик(PERIOD_CURRENT,0.02,0.2,i+1))// || Параболик(PERIOD_CURRENT,0.02,0.2,i+1)<=0
              {
               Print("селл, параболик после иф ",Параболик(PERIOD_CURRENT,0.02,0.2,i+1));
               break;
              }
           }
      ЗначениеSAR=NormalizeDouble(Параболик(PERIOD_CURRENT,0.02,0.2,i)/ТИК,0)*ТИК;
      if(БИД<ЗначениеSAR) //sell
         slтики=(int)NormalizeDouble((ЗначениеSAR-БИД)/ТИК,0);
     }

 

Запускаем в тестере 

JQ      0       Core 1  15:16:37        agent process started
NJ      0       Core 1  15:16:37        connecting to 127.0.0.1:3000
NJ      0       Core 1  15:16:39        connected
GP      0       Core 1  15:16:39        authorized (agent build 328)
LK      0       Tester  15:16:39        EURUSD,H1 (MetaQuotes-Demo): testing of Experts\Отладка.ex5 from 2010.01.01 00:00 to 2010.09.11 00:00 to be started
RH      0       Core 1  15:16:41        common synchronization completed
RS      0       Core 1  15:16:41        3124 bytes of account info loaded
RI      0       Core 1  15:16:41        3768 bytes of group info loaded
MN      0       Core 1  15:16:41        7170 bytes of tester parameters loaded
EL      0       Core 1  15:16:41        275 bytes of selected symbols loaded
IK      0       Core 1  15:16:41        expert file added: Experts\Отладка.ex5. 6597 bytes loaded
LE      0       Core 1  15:16:41        initial deposit 10000.00 USD, leverage 1:100
KO      0       Core 1  15:16:41        successfully initialized
RQ      0       Core 1  15:16:41        23 Kb of total initialization data received
KK      0       Core 1  15:16:41        performance: 72
HP      0       Core 1  15:16:41        EURUSD: symbol synchronized, 2904 bytes of symbol info received
RI      0       Core 1  15:16:43        EURUSD: load 27 bytes of history data to synchronize
MG      0       Core 1  15:16:43        EURUSD: history synchronized from 1993.05.13 to 2010.09.10
MP      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
CD      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
IK      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
ON      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
ER      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
KI      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
QL      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
GP      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
MG      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
CK      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
IN      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
OE      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
EI      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
KL      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
QS      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
GG      0       Core 1  15:16:45        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
KJ      0       Core 1  15:16:47        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0
EN      0       Core 1  15:16:47        2010.01.04 00:00:02   BarsCalculated -1, CopyBuffer -1, ArrayValue 0

 и так до бесконечности, пока не нажмешь отмена

кидаем эксперт на график 

PJ      0       Experts 15:27:14        expert Отладка (EURUSD,M20) removed
MR      0       Trades  15:27:18        '677265' : instant buy 0.10 EURUSD at 1.29697
EH      0       Trades  15:27:19        '677265' : accepted instant buy 0.10 EURUSD at 1.29697
GL      0       Trades  15:27:21        '677265' : order #1350474 buy 0.10 EURUSD at 1.29697 done
LH      0       Trades  15:27:21        '677265' : deal #1426626 buy 0.10 EURUSD at 1.29697 done (based on order #1350474)
LI      0       Experts 15:27:56        expert Отладка (EURUSD,M20) loaded successfully
IR      0       Trades  15:28:07        '677265' : instant sell 0.10 EURUSD at 1.29690 sl: 1.30136 tp: 1.29502
IM      0       Trades  15:28:08        '677265' : accepted instant sell 0.10 EURUSD at 1.29690 sl: 1.30136 tp: 1.29502
RK      0       Trades  15:28:10        '677265' : order #1350477 sell 0.10 EURUSD at 1.29690 done
RO      0       Trades  15:28:10        '677265' : deal #1426629 sell 0.10 EURUSD at 1.29690 done (based on order #1350477)

в журнале никаких ошибок

во вкладке эксперты смотрим картинку, также никаких ошибок

 

можно сосчитать точки параболика, все четко совпадает, на двенадцатой выходим из цикла...

 

Я еще давно понял что в MQL5 в "тот момент" или в этот... данные там или тут могут не расчитываться... Но это же не правильно, нужно исправлять, а не в код костыли писать

 

и кстати это со всеми остальными индикаторами так, не только с параболиком

 
maryan.dirtyn:
я не знаю что такое фК.. мне просто нужно знать КАК БУДЕТ на чемпионате

ФК - Форекс Клуб и скажем его терминал Rumus2.

Тестовый счет для чемпионата есть? Попробуйте и все будет ясно...

 
Dmitriy2:

Я еще давно понял что в MQL5 в "тот момент" или в этот... данные там или тут могут не расчитываться... Но это же не правильно, нужно исправлять, а не в код костыли писать

 

и кстати это со всеми остальными индикаторами так, не только с параболиком

Давайте не будем плодить обсуждения.

Эта тема обсуждалась не раз. Не так давно к ней уже возвращались снова (https://www.mql5.com/ru/forum/1951)

Тестер стратегий. Помогите разобраться с ошибкой.
Тестер стратегий. Помогите разобраться с ошибкой.
  • www.mql5.com
mq5) handle индикатора объявляется как глобальная переменная, индикатор инициализируется в OnInit() и передается в функцию.
 

Сижу.. Смотрю..

Ни в жисть не поверю, что MQL5 и MQL4 писала одна команда..(((

MQ4 - полёт..

MQ5 - децкий лепет.. Никого не хотел обидеть - но..(((

 
alexvd:

Давайте не будем плодить обсуждения.

Эта тема обсуждалась не раз. Не так давно к ней уже возвращались снова (https://www.mql5.com/ru/forum/1951)

 

Я не видел эту тему... да то же самое...

Дело в том что я не собираюсь тупо делать проверки на каждой строчке на все случаи жизни запутывая и нагромождая код.  Если это не обсуждается то... костыли добавлены, достаточно большой проект наконец-то полностью переделан и заработал...

А вобще я просто поражаюсь такому подходу... Оказывается не в первый раз такой вопрос поднимается(уверен и не раз в дальнейшем будет возникать у других людей), и каждый раз "как в первый раз" тратить кучу своего и чужого рабочего времени что бы объяснить что нужно сделать что-бы этот баг обойти...

А нужно всего то добавить в ТЕСТЕР этот рекомендуемый в той ветке всего ОДИН Sleep(1000) при запуске эксперта.

Не должно быть так что бы оболочка подразумевала глюки, причем совершенно точно определенные, и эти глюки нужно было обходить в коде. Причем ТЕРМИНАЛ работает корректно и правильно, ОШИБОК НЕТ(в данной ситуации). А вот работа тестера ОТЛИЧАЕТСЯ от работы терминала.

 

ps EQU привет:) 

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