Общие вопросы по разработке > Проверка даты на соответствие сегодняшнему дню

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
realuse
Сообщения: 6
Зарегистрирован: 18 авг 2021, 00:40
Благодарил (а): 5 раз

Проверка даты на соответствие сегодняшнему дню

Непрочитанное сообщение realuse » 20 янв 2022, 16:22

Доброго дня!
Задача проверять дату, сегодняшняя она или нет. Пробовал так:

Код: Выделить всё

AddGlobalVariable("Local_time", Types.DateTime, DateTime.Today);

Local_time = BarDate().Add(BarTime() - AsTime(0, 3, 0));

if ( Local_time > DateTime.Today) { ... }


Помогите плз верно описать условие.

Аватара пользователя
evge
Администратор
Сообщения: 1808
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 365 раз
Контактная информация:

Re: Проверка даты на соответствие сегодняшнему дню

Непрочитанное сообщение evge » 20 янв 2022, 18:23

Код: Выделить всё

if (BarDate() == DateTime.Today)
{
//бар сегодня
}


Now-UtcNow-01.jpg
Now-UtcNow-01.jpg (75.45 КБ) 7615 просмотров


Код: Выделить всё

function Initialize()
{
IndicatorName = "now";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("A", DrawAs.Histogram, Color.Green);
}

function Evaluate()
{
if (BarDate() == DateTime.Now.Date) A = DateTime.Now.Hour;
}


Код: Выделить всё

function Initialize()
{
IndicatorName = "nowUTC";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("A", DrawAs.Histogram, Color.Green);
}

function Evaluate()
{
if (BarDate() == DateTime.UtcNow.Date) A = DateTime.UtcNow.Hour;
}
никогда такого не было и вот опять

realuse
Сообщения: 6
Зарегистрирован: 18 авг 2021, 00:40
Благодарил (а): 5 раз

Re: Проверка даты на соответствие сегодняшнему дню

Непрочитанное сообщение realuse » 20 янв 2022, 22:01

Спасибо :!:

А как сделать, если мне нужно проверить именно значение глобальной переменной на соответствие сегодняшнему дню? Когда текущий бар уже позже нее по времени.

BugsDigger
Сообщения: 534
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Проверка даты на соответствие сегодняшнему дню

Непрочитанное сообщение BugsDigger » 21 янв 2022, 07:35

Структура DateTime
https://docs.microsoft.com/ru-ru/dotnet ... ew=net-6.0

Код: Выделить всё

function Initialize()
{
 ...
 AddGlobalVariable("DT", Types.DateTime, new DateTime(2022, 1, 21)); // фиксированная дата
//  AddGlobalVariable("DT", Types.DateTime, DateTime.Now.Date); // текущее реальное время
}

function Evaluate()
{
 ShowMessage(DT.Date.ToShortDateString());
 // с чем хотим сравнивать?
 if(DT.Date==DateTime.Now.Date) { ShowMessage("DT==Сегодня"); } // реальное время
 if(DT.Date==BarDate(0)) { ShowMessage("DT==Bar"); } // текущий бар расчета индикатора
}


Вариант с заданием даты в качестве параметра индикатора
viewtopic.php?f=4&t=1028&start=10#p5947
Неудобство в том, что дату нужно вводить в виде строки полностью (согласно заданному формату Windows), а поле ввода очень узкое и для этого не предназначено.

Аватара пользователя
evge
Администратор
Сообщения: 1808
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 365 раз
Контактная информация:

Re: Проверка даты на соответствие сегодняшнему дню

Непрочитанное сообщение evge » 21 янв 2022, 08:01

realuse писал(а):А как сделать, если мне нужно проверить именно значение глобальной переменной на соответствие сегодняшнему дню? Когда текущий бар уже позже нее по времени.


Используйте .TimeOfDay для определения времени из DateTime и BarTime() для определении времени бара графика т.к. они TimeSpan и можно будет их между собой сравнить

Код: Выделить всё

function Initialize()
{
IndicatorName = "DTheck";
PriceStudy = false;
AddInput("Input", Inputs.Candle);
AddSeries("A", DrawAs.Histogram, Color.Green, AxisType.ZeroBased);

// https://docs.microsoft.com/ru-ru/dotnet/api/system.datetime.-ctor?view=netframework-4.8#System_DateTime__ctor_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_System_Int32_

AddGlobalVariable("DT", Types.DateTime, new DateTime(2022, 1, 20, 15, 0, 0)); //20.01.2022 15:00:00
}

function Evaluate()
{

//дата бара больше даты гл.перем ИЛИ дата бара равна дате гл.перем, но время бара больше
if (BarDate() > DT.Date || (BarDate() == DT.Date && BarTime() > DT.TimeOfDay))
{
   // Условие выполняется
   A = BarTime().Hours;
}

}


DTChek-01.jpg
DTChek-01.jpg (73.09 КБ) 7450 просмотров

DTChek-02.jpg
DTChek-02.jpg (84.01 КБ) 7448 просмотров

если же задача не бар на графике проверять с гл.перем, а именно проверить текущий день и время с датой и временем из гл.перем,

то заменяем BarDate() в скрипте на DateTime.Now.Date и BarTtime() на DateTime.Now.TimeOfDay

но визуализация результата будет, либо на всех барах условие выполняется либо нет. Т.е. либо задает A либо нет, везде!
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и 7 гостей