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

 
Karputov Vladimir:

Так нужно такую хотелку сразу оговаривать :) .

Ситуация такая - если на графике есть бар, то ему соответствует ячейка в индикаторном буфере. Пока Вы в эту ячейку чего-нибудь не запишите, в этой ячейке будет храниться мусор. 

А почему в МТ4 не мусор, а просто не выводит индикатор под этим баром ?
 
Aleksey Lebedev:

При делении целых чисел(int,long,datetime и т.п.) результат целое число, т.е. остаток отбрасывается. 00:00 сегодня и 23:59:59 вчера, разность будет равна 1дню.

Во-первых это не так - доказано экспериментально в индикаторе.

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

 
Alexey Kozitsyn:
Точно так же, как и обнуление простых типов. Присваиванием им значения 0. Как только нужным полям присвоили значения 0 - используете обратную операцию StructToTime().

Обнулил:

MqlDateTime str1;
datetime  Open_timePos=iTime(_Symbol,0,pos);
TimeToStruct(Open_timePos,str1);
   str1.hour=0;
   str1.min=0;
   str1.sec=0;
datetime  start_time=StructToTime(str1);
Print("день=",TimeToStr(start_time));

Всё получилось - спасибо!
 

Aleksey Lebedev:
При делении целых чисел(int,long,datetime и т.п.) результат целое число, т.е. остаток отбрасывается. 00:00 сегодня и 23:59:59 вчера, разность будет равна 1дню.

-Aleks-:

Во-первых это не так - доказано экспериментально в индикаторе.

Не надо оспаривать основы)

-Aleks-:

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

datetime today=D'2016.03.09 00:00:00';
datetime yesterday=D'2016.03.08 23:59:59';
Print("today=",86400*(today/86400)," value=",int(today));
Print("yesterday=",86400*(yesterday/86400)," value=",int(yesterday));
Print("разница в днях = ",int(today/86400-yesterday/86400));

Используйте преобразование через структуру, если оно проще понимаецо.

 
Aleksey Lebedev:

Не надо оспаривать основы)

Используйте преобразование через структуру, если оно проще понимаецо.

Понимается то с чем разобрался. Я Ваш код не пробовал запустить, но думаю Вы это сделали сами, поэтому объясните мне не разумному, как так получается:

86401/86400-86400/86400 равняется 1, если по правилам математики 1,000012-1=0,000012 , а int должен же округлить до целого числа, т.е. 0. 

 
-Aleks-:

Понимается то с чем разобрался. Я Ваш код не пробовал запустить, но думаю Вы это сделали сами, поэтому объясните мне не разумному, как так получается:

86401/86400-86400/86400 равняется 1, если по правилам математики 1,000012-1=0,000012 , а int должен же округлить до целого числа, т.е. 0. 

а таки запустите)

Начало дня 00:00:00 делится на 86400 без остатка, предыдущий хотяб на 1 секунду меньше. Округляется - отбрасывается остаток при делении, а не всё выражение.

86400/86400=1

86399/86400=0

 
Aleksey Lebedev:

а таки запустите)

Начало дня 00:00:00 делится на 86400 без остатка, предыдущий хотяб на 1 секунду меньше. Округляется - отбрасывается остаток при делении, а не всё выражение.

86400/86400=1

86399/86400=0

так меня удивляет, что своеобразное округление происходит внутри выражения - я полагал, что именно при присвоении переменной значения происходит отбрасывание значения после запятой.
 
Парни! А можно программно вывести на график индикатор? Или только руками?
 
Vladimir Tkach:
Парни! А можно программно вывести на график индикатор? Или только руками?
Можно https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
это в mql5, a в mql4?