Я думал, что уже ответил вам, но, похоже, это сообщение исчезло в интернет-эфире.
Приведенный вами фрагмент кода - это практически то, на что я жаловался в первую очередь. Почему так сложно? Я просто подумал, что должен быть более простой способ. Я придумал этот, который, кажется, работает. Пожалуйста, поправьте меня, если я ошибаюсь. (Я также пытался использовать BarsCalculated, но он всегда был равен Bars, поэтому тест всегда выдавал false).
static int LastBarCount = 0; if (Bars(_Symbol, _Period) > LastBarCount) LastBarCount = Bars(_Symbol, _Period); else return;
;-) Ian
Я полностью согласен с тем, что нам нужно что-то как можно более простое.
К сожалению, этот код, похоже, не работает в MQL5.
honest_knave Bars в любом случае будет плохим способом обнаружения нового бара. Единственный надежный способ проверки нового бара - это использование времени. Не объем, не цены, не бары.
Bars ненадежен (обновление/подключение может изменить количество баров на графике,) volume ненадежен (пропуск тиков,) Price ненадежен (дублирование цен и операнд ==. - Форум MQL4.) Всегда используйте время. Новая свеча - Форум MQL4
Это было давно, и я не использую/тестирую эту функцию уже много лет, так что, возможно, это не совсем так. Но если вы хотите использовать ее для обнаружения нового бара, то, вероятно, лучше это проверить ;-)
Это было давно, и я не использую/тестирую эту функцию уже много лет, так что, возможно, это не совсем так. Но если вы хотите использовать ее для обнаружения нового бара, то, вероятно, лучше это проверить ;-)
Это очень загадочно Алена! Какой тип ошибок?
В таком случае, для поясов'n'braces либо проверьте SeriesInfoInteger >0 и/или ResetLastError до вызова, затем проверьте _LastError после вызова.
Или получите источник времени в другом месте, например, time[], если в OnCalculate, или CopyTime и т.д. и т.п.
В таком случае, для поясных скобок либо проверьте SeriesInfoInteger >0 и/или ResetLastError до вызова, затем проверьте _LastError после вызова.
Или получите источник времени в другом месте, например, time[], если в OnCalculate, или CopyTime и т.д. и т.п.
Я просто говорю, что когда я использовал его много лет назад, SeriesInfoInteger() не был действительно надежным. Вам решать, что вы будете делать с этой информацией :-D
Alain Verleyen: Я просто говорю, что когда я использовал его много лет назад, SeriesInfoInteger() был не совсем надежным. Вам решать, что вы будете делать с этой информацией :-D
Не очень много TBH - мне не нужно обнаруживать новый бар в MT5 Но спасибо, что поделились - я буду иметь это в виду на будущее.
Я просто пытался упростить то, что люди, похоже, делают чрезмерно сложным.
Тем не менее, принцип остается: используйте время. Предостережение: выбирайте свой метод получения времени на свой страх и риск, учитывая неполные исторические заметки Алена (кстати, как вам XP Service Pack 1?).
Не очень много TBH - мне не нужно обнаруживать новый бар в MT5 Но спасибо, что поделились - я буду иметь это в виду на будущее.
Я просто пытался упростить то, что люди, похоже, делают чрезмерно сложным.
Тем не менее, принцип остается: используйте время. Предостережение: выбирайте свой метод получения времени на свой страх и риск, учитывая неполные исторические заметки Алена (кстати, как вам XP Service Pack 1?).
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Привет, oneillj,
Я думал, что уже ответил вам, но, похоже, это сообщение исчезло в интернет-эфире.
Приведенный вами фрагмент кода - это практически то, на что я жаловался в первую очередь. Почему так сложно? Я просто подумал, что должен быть более простой способ. Я придумал этот, который, кажется, работает. Пожалуйста, поправьте меня, если я ошибаюсь. (Я также пытался использовать BarsCalculated, но он всегда был равен Bars, поэтому тест всегда выдавал false).
static int LastBarCount = 0;
;-) Ianif (Bars(_Symbol, _Period) > LastBarCount)
LastBarCount = Bars(_Symbol, _Period);
else
return;
Я полностью согласен с тем, что нам нужно что-то как можно более простое.
К сожалению, этот код, похоже, не работает в MQL5.
К сожалению, это не работает в MQL5.
Бары в любом случае были бы плохим способом обнаружения нового бара.
Единственный надежный способ проверить наличие нового бара - это использование времени. Не объем, не цены, не бары.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
Бары в любом случае были бы плохим способом обнаружения нового бара.
Единственный надежный способ проверить наличие нового бара - это использование времени. Не объем, не цены, не бары.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
Бары в любом случае были бы плохим способом обнаружения нового бара.
Единственный надежный способ проверить наличие нового бара - это использование времени. Не объем, не цены, не бары.
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
{
printf("New bar: %s",TimeToString(ThisBar));
LastBar = ThisBar;
}
Просто для информации, у меня есть следующее примечание в моих ссылках :
//-- Иногда SeriesInfoInteger с SERIES_LASTBAR_DATE возвращает ошибку,
Это было давно, и я не использую/тестирую эту функцию уже много лет, так что, возможно, это не совсем так. Но если вы хотите использовать ее для обнаружения нового бара, то, вероятно, лучше это проверить ;-)
Просто для информации, у меня есть следующее примечание в моих рекомендациях :
//-- Иногда SeriesInfoInteger с SERIES_LASTBAR_DATE возвращает ошибку,
Это было давно, и я не использую/тестирую эту функцию уже много лет, так что, возможно, это не совсем так. Но если вы хотите использовать ее для обнаружения нового бара, то, вероятно, лучше это проверить ;-)
Это очень загадочно Алена! Какой тип ошибок?
В таком случае, для поясов'n'braces либо проверьте SeriesInfoInteger >0 и/или ResetLastError до вызова, затем проверьте _LastError после вызова.
Или получите источник времени в другом месте, например, time[], если в OnCalculate, или CopyTime и т.д. и т.п.
Почему бы просто не использовать что-то вроде этого:
datetime lastTime[1];
if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
{
prevTime=lastTime[0];
// ...
}
Это очень загадочно Алена! Какой тип ошибок?
В таком случае, для поясных скобок либо проверьте SeriesInfoInteger >0 и/или ResetLastError до вызова, затем проверьте _LastError после вызова.
Или получите источник времени в другом месте, например, time[], если в OnCalculate, или CopyTime и т.д. и т.п.
Я просто говорю, что когда я использовал его много лет назад, SeriesInfoInteger() был не совсем надежным. Вам решать, что вы будете делать с этой информацией :-D
Не очень много TBH - мне не нужно обнаруживать новый бар в MT5
Но спасибо, что поделились - я буду иметь это в виду на будущее.
Я просто пытался упростить то, что люди, похоже, делают чрезмерно сложным.
Тем не менее, принцип остается: используйте время. Предостережение: выбирайте свой метод получения времени на свой страх и риск, учитывая неполные исторические заметки Алена (кстати, как вам XP Service Pack 1?).
Не очень много TBH - мне не нужно обнаруживать новый бар в MT5 Но спасибо, что поделились - я буду иметь это в виду на будущее.
Я просто пытался упростить то, что люди, похоже, делают чрезмерно сложным.
Тем не менее, принцип остается: используйте время. Предостережение: выбирайте свой метод получения времени на свой страх и риск, учитывая неполные исторические заметки Алена (кстати, как вам XP Service Pack 1?).