Скачать MetaTrader 5

Советник. Как рисовать раз в день? - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ruslan
61
Ruslan  

Спасибо за помощь.

tara, я не понял о чем вы (: 

Artyom Trishkin
Модератор
87422
Artyom Trishkin  
solarplexus:

Спасибо за помощь.

tara, я не понял о чем вы (: 

... о костылях ;)
Ruslan
61
Ruslan  
artmedia70:
... о костылях ;)

Аа... Жестоко вы :)

Так где же тут правда? Порекомендуйте, в какую сторону глянуть.

Из прошлых ответов прозвучало два варианта:

1. Использовать iBarShift() в функциях iClose, iHigh и iLow

2. Принудительно обновлять данные таймфрейма через iTime

Я уверен, найдется еще способов 5-10, как решить проблему. Давайте попробуем разобраться в механизме работы МТ4. Я не совсем понимаю, откуда брать инфу по этому поводу, т.к. хелпа явно недостаточно. Не реверсингом же заниматься.

Alexey Viktorov
16689
Alexey Viktorov  
А тебе не кажется что для твоего случая не важно какой день недели, а важно появление нового бара PERIOD_D1
Ihor Herasko
14351
Ihor Herasko  
tara:
Мне было бы несколько неудобно давать такой комментарий, если бы речь шла о чем-нибудь, разработанным мною. 
История не терпит сослагательного наклонения.
Ruslan
61
Ruslan  
AlexeyVik:
А тебе не кажется что для твоего случая не важно какой день недели, а важно появление нового бара PERIOD_D1

Неужто, бар PERIOD_D1 не зависит от времени, неужели бар PERIOD_D1 строится по своему таймеру? До вашего комента у меня в голове PERIOD_D1 и время завязаны между собой.

Подскажите, пожалуйста, как проверить появление нового бара.

Alexey Viktorov
16689
Alexey Viktorov  

Безусловно от времени зависит, но не зависит от дня недели. И даже проверка на день недели может привести к неожиданному результату.

Вариантов определения нового бара несколько. Но все они основаны на запоминании времени открытия текущего бара с последующей проверкой соответствия этого времени.

Вот моя версия функции.

bool NewBar(int tf, datetime &lastbar)
{
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}/*******************************************************************/


Вызывается в любом месте кода

bool = NewBar(PERIOD_D1, LastDay);

Переменная LastDay объявлена на уровне глобальных переменных или static datetime

Таким образом

if(NewDay) // Значит открылся новый бар
Алексей Тарабанов
7329
Алексей Тарабанов  
AlexeyVik:

Безусловно от времени зависит, но не зависит от дня недели. И даже проверка на день недели может привести к неожиданному результату.

Вариантов определения нового бара несколько. Но все они основаны на запоминании времени открытия текущего бара с последующей проверкой соответствия этого времени.

Вот моя версия функции.


Вызывается в любом месте кода

Переменная LastDay объявлена на уровне глобальных переменных или static datetime

Таким образом



Только не статик. Классического статика в MQL нет, есть совершенно иной режим управления памятью, аналогов которого я не знаю, а смысла - не понимаю. 
Алексей Тарабанов
7329
Алексей Тарабанов  
solarplexus:

Здравствуйте.

Стоит задача раз в день в 00:00 часов по времени терминала ставить стрелочку pivot, которая рассчитывается так: (high+low+close)/3, где high, low и cloce - цены прошлого дня.

На тестере все прекрасно строится.

Проблема возникает в реалтайме. Когда закидываешь эксперт в текущий день, то пивот правильно строит в начале этого дня, и рассчитывается по прошлому дню. Но! Во второй день он ставит такой же пивот, как и в первый день. В третий день рассчитывает по данным 1-го дня, в четвертый день - по данным 2-го дня, и т.д. Т.е. иными словами, идет сдвиг. Чего не должно быть.

Предположения. Я думаю, что дело в механике терминала перехода на новый день. Но где именно касяк - не могу найти.

Как решить данную проблему? Может, пытаться строить пивот не сразу, а, скажем, спустя 5 минут? Это может решить проблему?

Код:

 

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

ЗЫ Как на реале, так и в тестере, имхенько.  

Alexey Viktorov
16689
Alexey Viktorov  
tara:
Только не статик. Классического статика в MQL нет, есть совершенно иной режим управления памятью, аналогов которого я не знаю, а смысла - не понимаю. 

Ну не знаю о каком классическом статике ты говоришь. И не знаю что можно не понять из описания.

Чётко и ясно написано о времени жизни и доступности static переменных.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий