Как определить, например, время начала следующего дня? Или, допустим время 23.00 (в ФТ)? Ну, типа для того чтобы сделать что-то вроде: "если время = 12.30, то ..."
Подскажите плиз!

Если в стратегии то установить таймфрейм 1 минута и получить Time(0) это и будет время последнего минутного бара.-=LP=- писал(а):Вопрос к знающим:
Как определить, например, время начала следующего дня? Или, допустим время 23.00 (в ФТ)? Ну, типа для того чтобы сделать что-то вроде: "если время = 12.30, то ..."
Подскажите плиз!
А разве каждый новый день начинается с 0 бара? И что значит "получить Time(0)"?Terranin писал(а):Если в стратегии то установить таймфрейм 1 минута и получить Time(0) это и будет время последнего минутного бара.-=LP=- писал(а):Вопрос к знающим:
Как определить, например, время начала следующего дня? Или, допустим время 23.00 (в ФТ)? Ну, типа для того чтобы сделать что-то вроде: "если время = 12.30, то ..."
Подскажите плиз!
0й бар как и в метатрейдере это последний из доступных баров, 1й - предпоследний и т.д. Mассив Time() - это массив времени баров, Time(0) это время последнего бара. Также как Open(0) - это время открытия последнего бара. Эти значения зависят от текущего таймфрейма, если стоит таймфрейм 1 день то Time(0) покажет время начала последнего дня, если стоит таймфрейм 1 минута то Time(0) покажет время последнего бара с точностью до минуты.-=LP=- писал(а):А разве каждый новый день начинается с 0 бара? И что значит "получить Time(0)"?Terranin писал(а):Если в стратегии то установить таймфрейм 1 минута и получить Time(0) это и будет время последнего минутного бара.-=LP=- писал(а):Вопрос к знающим:
Как определить, например, время начала следующего дня? Или, допустим время 23.00 (в ФТ)? Ну, типа для того чтобы сделать что-то вроде: "если время = 12.30, то ..."
Подскажите плиз!
Попробовал:Terranin писал(а):0й бар как и в метатрейдере это последний из доступных баров, 1й - предпоследний и т.д. Mассив Time() - это массив времени баров, Time(0) это время последнего бара. Также как Open(0) - это время открытия последнего бара. Эти значения зависят от текущего таймфрейма, если стоит таймфрейм 1 день то Time(0) покажет время начала последнего дня, если стоит таймфрейм 1 минута то Time(0) покажет время последнего бара с точностью до минуты.
Код: Выделить всё
LastTime := Time(0);
Print(format('LAST TIME: %.4f', [LastTime]));
Ну вероятно нужно проверить, является ли время на данной свече целым числом. Если да, то это и есть начало дневной свечи.-=LP=- писал(а):Таймфрейм Д1. Выдает вначале новой свечи, значение 38155,0000, следующая 38156,0000 и т. д.
Так как это использовать, если мне нужно обнулить значение какой-то переменной вначале нового дня?
Время в формате Дельфи, целая часть - число дней от какой-то там даты, дробная - время внутри дня. Для работы используются функции, YearOf, DayOf, MonthOf, HourOf, MinuteOf и т.д. или DecodeDateTime(...). Для определения начала нового дня достаточно установить таймфрейм 1 день и проверять что новое значение Time(0) не равно предыдущему.-=LP=- писал(а):Попробовал:Terranin писал(а):0й бар как и в метатрейдере это последний из доступных баров, 1й - предпоследний и т.д. Mассив Time() - это массив времени баров, Time(0) это время последнего бара. Также как Open(0) - это время открытия последнего бара. Эти значения зависят от текущего таймфрейма, если стоит таймфрейм 1 день то Time(0) покажет время начала последнего дня, если стоит таймфрейм 1 минута то Time(0) покажет время последнего бара с точностью до минуты.Таймфрейм Д1. Выдает вначале новой свечи, значение 38155,0000, следующая 38156,0000 и т. д.Код: Выделить всё
LastTime := Time(0); Print(format('LAST TIME: %.4f', [LastTime]));
Так как это использовать, если мне нужно обнулить значение какой-то переменной вначале нового дня?
Мясник писал(а):Ну вероятно нужно проверить, является ли время на данной свече целым числом. Если да, то это и есть начало дневной свечи.
А промежуточное время (в часах и минутах) задано дробной частью, т.е. какую долю от суток составляет
Ребят, спасибо! Теперь все понятно!Terranin писал(а):Время в формате Дельфи, целая часть - число дней от какой-то там даты, дробная - время внутри дня. Для работы используются функции, YearOf, DayOf, MonthOf, HourOf, MinuteOf и т.д. или DecodeDateTime(...). Для определения начала нового дня достаточно установить таймфрейм 1 день и проверять что новое значение Time(0) не равно предыдущему.
Код: Выделить всё
if HourOf(Time(0)) = 23 then ...
Это потому что надо подключить модуль DateUtils в раздел uses.-=LP=- писал(а):Мясник писал(а):Ну вероятно нужно проверить, является ли время на данной свече целым числом. Если да, то это и есть начало дневной свечи.
А промежуточное время (в часах и минутах) задано дробной частью, т.е. какую долю от суток составляетРебят, спасибо! Теперь все понятно!Terranin писал(а):Время в формате Дельфи, целая часть - число дней от какой-то там даты, дробная - время внутри дня. Для работы используются функции, YearOf, DayOf, MonthOf, HourOf, MinuteOf и т.д. или DecodeDateTime(...). Для определения начала нового дня достаточно установить таймфрейм 1 день и проверять что новое значение Time(0) не равно предыдущему.Но вот с YearOf, DayOf, MonthOf, HourOf, MinuteOf и т.д. или DecodeDateTime(...) не могу разобраться.
Пишу:Жму компилить, мне выдаетКод: Выделить всё
if HourOf(Time(0)) = 23 then ...
[Error] Fractals.dpr(145): Undeclared identifier: 'HourOf'
[Warning] Fractals.dpr(145): Comparing signed and unsigned types - widened both operands.
Если можете, подскажите пожалуйста!
Урааа!!Terranin писал(а):Это потому что надо подключить модуль DateUtils в раздел uses.
Для С надо перевести время в его формат. С использует другой тип даты, я точно не в курсе а то что сейчас использует форекс тестер вот:Тагир писал(а):Подскажите что надо подключить, для работы со временем, если работаю на С++?
Это зависит от таймфрейма, на часовке минуты 0го бара всегда будут равны 0. Для более точного определения нужно взять таймфрейм 1 минуту.Agronom писал(а):Вот такая проблемка...
Прописываю в стратегии:
if (HourOf(Time(0)) = TimeShiftParam)
and (MinuteOf(Time(0)) = 0.00)
then...
А на практике получается, что работает также как и в таком варианте (без минут):
if (HourOf(Time(0)) = TimeShiftParam)
then...
А хотелось бы определить время с точностью до минуты. Как можно это прописать?
Заранее спасибо.
Понадобилось время по минутам и часам выделять - ничего толкового найти не получилось (вообще я не программист, поэтому даже толком не знаю что и где искать) ну и решил сам функцию написать - вот скидываю, м.б. кому пригодитьсяТагир писал(а):Подскажите что надо подключить, для работы со временем, если работаю на С++?
Вообще в Delphi все просто, подключается модуль DateUtils и там куча нужных функций типа:duh писал(а):Понадобилось время по минутам и часам выделять - ничего толкового найти не получилось (вообще я не программист, поэтому даже толком не знаю что и где искать) ну и решил сам функцию написать - вот скидываю, м.б. кому пригодитьсяТагир писал(а):Подскажите что надо подключить, для работы со временем, если работаю на С++?
#include <math.h>
// По времени в формате x.y вернет время в формате h:m
// tid - время в формате x.y
// hint, mint - время в формате h:m
void GetMyTime(double tid, int& hint, int& mint);
void GetMyTime(double tid, int& hint, int& mint)
{
double ti = 0.0, td = 0.0, ci = 0.0, cd = 0.0, ccd = 0.00625, ccm = 9.0, prec = 0.0000001, mm = 0.0, mplus = 0.0;
ti = floor(tid + prec);
td = tid - ti;
if(td < prec) td = 0.0;
ci = floor((td + prec) / ccd);
cd = (td / ccd) - ci;
if(cd < (prec / ccd)) cd = 0.0;
mplus = floor((cd + (prec / ccd)) * ccm);
mm = (ci * ccm) + mplus;
hint = floor((mm + (prec * ccm / ccd)) / double(60));
mint = floor((mm + (prec * ccm / ccd)) - double(hint * 60));
}
Код: Выделить всё
unsigned int UnixStartDate = 25569;
unsigned int DateTimeToUnix(double ConvDate)
{
return((unsigned int)((ConvDate - UnixStartDate) * 86400.0));
}
double UnixToDateTime(unsigned int USec)
{
return((Usec/86400.0) + UnixStartDate);
}
Как я разобрался:Terranin писал(а):
Вообще в Delphi все просто, подключается модуль DateUtils и там куча нужных функций типа:
MinuteOf(date)
HourOf(date)
DayOf(date)
и т.д.
Для С++ можно перевести дату в формат С и обратно функциями:
а там уже в С должны быть свои процедуры для работы со временем.Код: Выделить всё
unsigned int UnixStartDate = 25569; unsigned int DateTimeToUnix(double ConvDate) { return((unsigned int)((ConvDate - UnixStartDate) * 86400.0)); } double UnixToDateTime(unsigned int USec) { return((Usec/86400.0) + UnixStartDate); }
C++ использует формат Unix насколько я знаю.duh писал(а):Как я разобрался:Terranin писал(а):
Вообще в Delphi все просто, подключается модуль DateUtils и там куча нужных функций типа:
MinuteOf(date)
HourOf(date)
DayOf(date)
и т.д.
Для С++ можно перевести дату в формат С и обратно функциями:
а там уже в С должны быть свои процедуры для работы со временем.Код: Выделить всё
unsigned int UnixStartDate = 25569; unsigned int DateTimeToUnix(double ConvDate) { return((unsigned int)((ConvDate - UnixStartDate) * 86400.0)); } double UnixToDateTime(unsigned int USec) { return((Usec/86400.0) + UnixStartDate); }
- В делфи используется формат времени x.y (DateTime) где x - это день с какой-то даты.
- В unix - время (TimeStamp) это число секунд прошедшее с какой-то даты.
А в С++ в каком виде время представляется? - аналогично unix? - если нет - то зачем переводить из DateTime в unix?
Код: Выделить всё
#include <ctime> // Модуль с функциям времени
unsigned int UnixStartDate = 25569;
// функция преобразует время из формата форекстестера в юникс формат
unsigned int DateTimeToUnix(double ConvDate)
{
return((unsigned int)((ConvDate - UnixStartDate) * 86400.0));
}
// Обратное преобразование при необходимости
double UnixToDateTime(unsigned int USec)
{
return((Usec/86400.0) + UnixStartDate);
}
int main()
{
struct tm *date_time; // это стандартная структура (указатель на нее) в которую запишем данные о времени
time_t timer; // это время - количество секунд которые прошли с какой-то даты - в формате юникс
timer = DateTimeToUnix('сюда время в формате форекстестера'); // Переводим из формата форекстестера в юникс формат
date_time = localtime(&timer); // эта функция заполнит структуру разложив все по полочкам
// Далее все нужные данные извлекаются из структуры
// Например
int m, h, d; // минуты, часы, день месяца
m = date_time->tm_min;
h = date_time->tm_hour;
d = date_time->tm_mday;
}
а как проверить, что оно не равно предыдущему? if time(0) <> time(1)?Terranin писал(а):-=LP=- писал(а):Terranin писал(а):
Время в формате Дельфи, целая часть - число дней от какой-то там даты, дробная - время внутри дня. Для работы используются функции, YearOf, DayOf, MonthOf, HourOf, MinuteOf и т.д. или DecodeDateTime(...). Для определения начала нового дня достаточно установить таймфрейм 1 день и проверять что новое значение Time(0) не равно предыдущему.
Код: Выделить всё
SomeStoredTimeVariable := Time(0);
Код: Выделить всё
Time(0) <> SomeStoredTimeVariable