Оптимизация советника заканчивается нулевым результатом MT5 - страница 2

 
Aleksandr Dziuba:

По логике  думаю существует. Иначе как бы Вы тестировали свои алгоритмы пошагово если уже все пересчитано.  

Теперь понимаю к чему Вы. Ищете отчёт о проделанном тесте самой программы МТ? Так это Вам к разработчикам МТ

 
VVT:

Теперь понимаю к чему Вы. Ищете отчёт о проделанном тесте самой программы МТ? Так это Вам к разработчикам МТ

Нет я не об этом.

Я программирую код.  Ищу фрагмент кода который укажет на номер текущего рассчитываемого бара при вызове обработчика OnTick

 
Aleksandr Dziuba:

Нет я не об этом.

Я программирую код.  Ищу фрагмент кода который укажет на номер текущего рассчитываемого бара при вызове обработчика OnTick

Так это нулевой бар. Или я опять неправильно понял?

 
VVT:

Так это нулевой бар. Или я опять неправильно понял?

нулевой бар всегда будет на реале текущим. Но на тестере нет.  Или Вы не тестировали свои алгоритмы никогда?

Почему у меня выдается нулевой результат. Потому что я всегда считаю что нулевой бар последний. Но в тестере это не так. Он может быт или 450 или 220 или еще каким ни будь. Так как тестер идет уже по вычисленной истории.  Как дорожка фильма. 

А когда тестер все пересчитал заранее и идет шаг за шагом уже по пересчитанной истории то вычисления нужно проводить по текущему считаемому бару а это уже и будет не нулевой бар. 

Что бы унифицировать пересчет и он был одинаковым на тестере и на реале уже кто то писал  функция время>Бар и бар время. 

Скорее всего будет формула время сервера>бар. 

И от него уже нужно искать индекс в массиве индикаторов для копирования данных. 

 
Aleksandr Dziuba:

нулевой бар всегда будет на реале текущим. Но на тестере нет.  Или Вы не тестировали свои алгоритмы никогда?

Почему у меня выдается нулевой результат. Потому что я всегда считаю что нулевой бар последний. Но в тестере это не так. Он может быт или 450 или 220 или еще каким ни будь. Так как тестер идет уже по вычисленной истории.  Как дорожка фильма. 

А когда тестер все пересчитал заранее и идет шаг за шагом уже по пересчитанной истории то вычисления нужно проводить по текущему считаемому бару а это уже и будет не нулевой бар. 

Что бы унифицировать пересчет и он был одинаковым на тестере и на реале уже кто то писал  функция время>Бар и бар время. 

Скорее всего будет формула время сервера>бар. 

И от него уже нужно искать индекс в массиве индикаторов для копирования данных. 

Уважаемый, в тестере или на реале, на момент обработки нового тика текущий считается нулевой бар, и исчисление происходит в глубь истории по возрастающей на момент обрабатываемого тика, а не как Вы пишете в хаотичном порядке. 0 результат следствие других ошибок, попробуйте получить ошибку  https://www.mql5.com/ru/forum/35071/page128 

datetime LastBarTime

Не усложняйте. Зачем придумывать велосипед?

 
VVT:

Уважаемый, в тестере или на реале, на момент обработки нового тика текущий считается нулевой бар, и исчисление происходит в глубь истории по возрастающей на момент обрабатываемого тика, а не как Вы пишете в хаотичном порядке. 0 результат следствие других ошибок, попробуйте получить ошибку  https://www.mql5.com/ru/forum/35071/page128 

Не усложняйте. Зачем придумывать велосипед?

Очень здорово. Спасибо за подсказку. 

Вернусь за терминал. Напишу тестик и проверим.

Но у меня в логах тестера функция barsTrix = BarsCalculated(TriX_handle) во время каждого тика пишет пересчитано 414 баров.  Значит вся история пересчитана.

Соответственно в буфере 414 элементов. 

Вопрос с какого индекса мне нужно начинать копировать данные методом CopyBuffer? 

  int copied=CopyBuffer(TriX_handle,0,1,2,TriX_buffer);
      if(copied<=0)
        {
         Print("Ошибка копирования буфера TriX_buffer");
         return;
        }
 
 
VVT:

Уважаемый, в тестере или на реале, на момент обработки нового тика текущий считается нулевой бар, и исчисление происходит в глубь истории по возрастающей на момент обрабатываемого тика, а не как Вы пишете в хаотичном порядке. 0 результат следствие других ошибок, попробуйте получить ошибку  https://www.mql5.com/ru/forum/35071/page128 

Не усложняйте. Зачем придумывать велосипед?

Вообще не понятно. 

Теперь в логах пересчитывается третий индикатор а остальные не пересчитываются.

EH 0 15:27:08.866 Tester program file added: \Indicators\Slope_Direction_Line.ex5. 32934 bytes loaded

QR 0 15:27:09.025 TrixVmaSDL (RTSSiZ0,M1) 2020.06.20 00:00:00   414 414 414

KP 0 15:27:09.025 TrixVmaSDL (RTSSiZ0,M1) 2020.06.22 07:00:00   414 414 414 4149.603976307441002e-069.490788399914234e-06

GG 0 15:27:09.025 TrixVmaSDL (RTSSiZ0,M1) 2020.06.22 07:00:07   414 414 415 4149.603976307441002e-069.490788399914234e-06

LG 0 15:27:09.025 TrixVmaSDL (RTSSiZ0,M1) 2020.06.22 07:00:15   414 414 415 4149.603976307441002e-069.490788399914234e-06

Логика есть какая то?

  RefreshRates();
   barssdl  = BarsCalculated(sdl_handle);
   barsTrix = BarsCalculated(TriX_handle);
   barsvma  = BarsCalculated(vma_handle);
   int copied=CopyBuffer(TriX_handle,0,1,2,TriX_buffer);
      if(copied<=0)
        {
         Print("Ошибка копирования буфера TriX_buffer");
         return;
        }

   Print(previousbars," ",barssdl," ",barsTrix," ",barsvma," ",TriX_buffer[0],TriX_buffer[1]);

 
Aleksandr Dziuba:

Вопрос с какого индекса мне нужно начинать копировать данные методом CopyBuffer? 

Там же написано, bufer_num, start_pos, ... Почему start_pos начинаете с 1?

 
VVT:

Там же написано, bufer_num, start_pos, ... Почему start_pos начинаете с 1?

Потому что мне нужна сформированная свеча а не формируемая. 0 это формируемая свеча. 

А логика есть. Нужно сначала получить copybuffer а потом получить количество пересчитанных баров.

В общем поменять местами.  Двойное вычисление но что же. 

 
Aleksandr Dziuba:

Потому что мне нужна сформированная свеча а не формируемая. 0 это формируемая свеча. 

Это определяется следующим параметром count -> закрытый бар=1

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