Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 532

Что означает этот комментарий к ордеру в журнале      skipped as it changes nothing

Aleksey Lebedev:

дык

и есть округление до начала дня. 86400=24*60*60
По Вашей формуле мы получим количество дней между текущем баром и отдаленным, но эти дни условны т.е. это может быть 9 часов текущего дня и 1 час позапрошлого дня , тогда разница в секундах составит 122400 , что равняется 1,42 дня - при округлении будет 1 день, а нужно что б было 2.
Alexey Kozitsyn:

Есть время. У времени есть такие параметры как: год, месяц, день, часы, минуты, секунды и т.д. Вызвав функцию TimeToStruct() Вы раскладываете время на эти составляющие. Далее, например, можно обнулить часы, минуты и секунды - получите начало дня.

MqlDateTime - это тип данных, такой же, как int, bool и т.д. Просто это составной тип, т.е. чтобы получить доступ к его полям (часам, минутам, секундам...) нужно использовать точку. Например: dt_struct.hour - значение часов. Про структуры подробнее https://www.mql5.com/ru/docs/basis/types/classes.

А как, я извиняюсь, произвести это обнуление?
-Aleks-:
По Вашей формуле мы получим количество дней между текущем баром и отдаленным, но эти дни условны т.е. это может быть 9 часов текущего дня и 1 час позапрошлого дня , тогда разница в секундах составит 122400 , что равняется 1,42 дня - при округлении будет 1 день, а нужно что б было 2.

день потеряли, 23ч+24ч+9ч=2 дня 8ч... Эта формула нафих не надо, если требуецо:

Мне необходимо произвести расчет на каждом графике текущего ТФ. Для расчета требуется знать дату верхнего ТФ (дни). Выше я приложил код - смысл в том, что б знать на каждом баре максимальную цену верхнего ТФ на момент открытия бара на текущем ТФ.

Повторюсь:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



А ви таки говорите - структуры.. :)

Aleksey Lebedev:

день потеряли, 23ч+24ч+9ч=2 дня 8ч... Эта формула нафих не надо, если требуецо:

Повторюсь:



А ви таки говорите - структуры.. :)

Почему у Вас 23 часа - я ж написал 1 час , впрочем суть не меняется

24(позавчера - в час вчера)+24(вчера - в час сегодня)+8 ( после часа сегодня - минус час)=56/24=2,33 т.е. получилось два дня согласны?

-Aleks-:

Почему у Вас 23 часа - я ж написал 1 час , впрочем суть не меняется

24(позавчера - в час вчера)+24(вчера - в час сегодня)+8 ( после часа сегодня - минус час)=56/24=2,33 т.е. получилось два дня согласны?

23ч до начала вчерашнего дня+

24ч вчерашний+

9ч сегодня=

2дня 8ч=2,(33)дня

Правильно всё-таки как-то так:

int DayN=time[0]/86400-time[163]/86400;

Неважно, это не нужно)
Aleksey Lebedev:

23ч до начала вчерашнего дня+

24ч вчерашний+

9ч сегодня=

2дня 8ч=2,(33)дня

Правильно всё-таки как-то так:

Неважно, это не нужно)

А теперь представим, что не 9 часов сего дня, а 19

 24(позавчера - в час вчера)+24(вчера - в час сегодня)+18 ( после часа сегодня - минус час)=66/24=2,75 т.е. получилось три дня согласны?

Как бы диапазон не изменился дневной, а расчет в течении дня даёт то 2, то 3 дня - в этом беда.

Вариант

 int DayN=time[0]/86400-time[163]/86400;

так же не годится, если мы представим что текущий бар 1 час, а расчетный - 23 часа, в этом случае будет результатом вычисления ноль, а должен быть 1.
-Aleks-:
Вариант так же не годится, если мы представим что текущий бар 1 час, а расчетный - 23 часа, в этом случае будет результатом вычисления ноль, а должен быть 1.

Будет 1, оба времени сначала округляются до целого дня, после вычитаются.

      // AO
      if(ao) {
         CopyTime(symbol_name[st],ao_time_frame,1,1,time_buf);
         if(symbol_ao_timebar[st]!=time_buf[0]) {
            symbol_ao_timebar[st]=time_buf[0];
            double ao_buf[];
            CopyBuffer(symbol_ao_handle[st],0,enter_bar,2,ao_buf);
            if(ao_buf[1]>ao_buf[0]&&ao_buf[0]<0) symbol_ao_signal[st]=0;
            if(ao_buf[1]<ao_buf[0]&&ao_buf[0]>0) symbol_ao_signal[st]=1;
            }
         }else symbol_ao_signal[st]=2;
      
      // AC
      if(ac) {
         CopyTime(symbol_name[st],ac_time_frame,1,1,time_buf);
         if(symbol_ac_timebar[st]!=time_buf[0]) {
            symbol_ac_timebar[st]=time_buf[0];
            double ac_buf[];
            CopyBuffer(symbol_ac_handle[st],0,enter_bar,2,ac_buf);
            if(ac_buf[1]>ac_buf[0]&&ac_buf[0]<0) symbol_ac_signal[st]=0;
            if(ac_buf[1]<ac_buf[0]&&ac_buf[0]>0) symbol_ac_signal[st]=1;
            }      
         }else symbol_ac_signal[st]=2;
Всем привет. Вот вопрос. Есть кусок кода. Который говорит. Точнее должен говорить, что нужно покупать или продавать но только тогда когда индикатор AO и AC в одной плоскости. Покупка ниже нуля а продажа выше нуля.
Так ли это? Гуру помогите плиз.
Вопрос то в принципе в чем. Это нормальный код или херня на постном масле?
      
MASTERXAYS:
Всем привет. Вот вопрос. Есть кусок кода. Который говорит. Точнее должен говорить, что нужно покупать или продавать но только тогда когда индикатор AO и AC в одной плоскости. Покупка ниже нуля а продажа выше нуля.
Так ли это? Гуру помогите плиз.
Вопрос то в принципе в чем. Это нормальный код или херня на постном масле?
      

Я бы назвал сам подход "херня на постном масле"

Вы видели когда нибудь, чтоб цена шла именно за индикатором? Так-же стоит учесть, что это индикаторы Б.Вильямса, а он как известно - на форексе не торговал, да и сама суть уже давно устарела.