Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, 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?).