Я использую такую функцию
//+------------------------------------------------------------------+
//| Уменьшение даты на один день |
//| Параметры: |
//| dt - дата торгового дня |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if (td==0) {
tm--;
if (tm==0) {
ty--;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
Чем не устраивает "ВремДата = ВыбДата - КвоДней*24*60*60;" ?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Сейчас я делаю это так (очень неудобно) :
datetime ОтнятьОтДаты(datetime ВыбДата,int КвоДней)
{
datetime ВремДата,Дата;
int i,j,x;
int НачБар,КонБар;
datetime ИскДата;
x = КвоДней;
НачБар = iBarShift( NULL , 0, ВыбДата);
//Comment("Для Даты =",ВыбДата, " Смещение равно = ",НачБар);
for(j=НачБар;j<Bars;j++)
{
ВремДата = StrToTime(TimeToStr(Time[j],TIME_DATE));
if (ВремДата!=ВыбДата)
{
x = x - 1;
ВыбДата = ВремДата;
}
if (x == 0) break;
}
return(ВремДата);
}