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

 
Ошибка при компиляции:
union X1 { //(1) нормально
        char x11[INT_MAX/2+1];
};
union X2 { //(2) Error: 'X2' - struct is too large
        char x21[INT_MAX/2+1];
        char x22[INT_MAX/2+1];
};
А какая принципиальная разница между (1) и (2) ?
 
union с единственным полем - странная штука.
 
Alexey Viktorov:

А зачем такая проверка

Проще будет без условия написать return 0; и все дела…

На каждом новом баре условие будет выполнено и независимо от синхронизации будет пересчёт всех баров. Вы написали необдуманный код и выдаёте это за баг терминала…

подумайте ещё раз.

 
fxsaber:
union с единственным полем - странная штука.

Это тоже самое, что и struct - только нагляднее видно ошибку. Об этом даже в документации написано: "В остальном union ведёт себя как структура"

Связка union\char\char тоже странная, и тоже для наглядности, но можно и так переписать:

union X3 { //(3) Error: 'X2' - struct is too large
        char x31[INT_MAX/2+1];
        int  x32[INT_MAX/8+1];
};
чтобы тоже кому то странным не показалось
 
Andrey Dik:

подумайте ещё раз.

Думать надо вам Андрей. Это в вашем коде тараканы.

Ну, я сегодня так настроен… попробую подтолкнуть в нужном направлении:

Открылся новый бар… iBars() увеличилось на единицу…… Но количество посчитанных баров не изменилось. И не изменится пока не пересчитает этот новый бар…

Дальше что¿¿¿

 
Igor Makanu:

это не должно корректно работать в индикаторах:

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

да и BarsCalculated() рекомендуют использовать один раз после связывания хэндла


UPD: скрипт для подкачки истории и объяснение, почему это не работает в индикаторах: https://www.mql5.com/ru/docs/series/timeseries_access

вы уверены, что поняли смысл кода?

 
Alexey Viktorov:

Думать надо вам Андрей. Это в вашем коде тараканы.

Ну, я сегодня так настроен… попробую подтолкнуть в нужном направлении:

Открылся новый бар… iBars() увеличилось на единицу…… Но количество посчитанных баров не изменилось. И не изменится пока не пересчитает этот новый бар…

Дальше что¿¿¿

уважаемый. не пишите пожалуйста мне, вы не в теме.

или докажите кодом.

 
Andrey Dik:

вы уверены, что поняли смысл кода?

с большой вероятностью - уверен и понял

Вы хотите из индикатора синхронизировать "старший ТФ" перед вызовом другого индикатора

мой же индикатор работает? - можно в него добавить и BarsCalculated() - но как в примерах индикаторов из поставки, например MACD.mql5


ЗЫ: в КБ много мультитаймфремовых индикаторов, если мне нужно вспомнить, что и как делать, то обычно ищу поиском индикаторы от Mladen Rakic и смотрю у него, стиль написания кода своеобразный (вернее форматирование), но точно работоспособные на все 100

https://www.mql5.com/ru/users/mladen

 
Andrey Dik:

уважаемый. не пишите пожалуйста мне, вы не в теме.

или докажите кодом.

Тады, тьфу на вас…

Разработчики на такие глупости не реагируют, Игорю тоже скоро надоест… И оставайтесь разговаривать сам с собою…

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

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Andrey Dik, 2021.05.28 05:16

я делаю проверку синхронизированости данных на запрашиваемом старшем ТФ (М5) и готовность индикатора на нём, если не готово, то выход.

в итоге индикатор работает только 1 раз на открытии бара М1, а не на каждом тике:


//проверка готовности данных и индикатора на другом TF
if (SeriesInfoInteger (Symbol (), tf, SERIES_SYNCHRONIZED))
{
  if (iBars (Symbol (), tf) != BarsCalculated (handleFr)) return 0;
}
else return 0;

//проверка на наличие нового бара
if (rates_total == prev_calculated) return rates_total;

неужели использовать свой кастомный прев кальк придётся? надеюсь, разработчики внемлют моим мольбам.

Не совсем понял ваш код. Что должно происходить после "return 0;" на следующем вызове OnCalculate?