Стратегии и роботы > Вопрос по DateTime

Обсуждение, описание стратегий и роботов, идеи для стратегий
Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Вопрос по DateTime

Непрочитанное сообщение Arteshka » 11 фев 2018, 23:15

Всем привет!!!
Хочу создать временную переменную и сохранять в нее время. Делаю это так:

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

function Initialize()
{
   StrategyName = "Проверка";   
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");   
   AddGlobalVariable("VariableTime", Types.DateTime) ;   
}

function OnUpdate()
{
   VariableTime=BarTime() +AsTime(0, 0, 5) ;   
}

Компилятор ругается. Что не так?

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

Re: Вопрос по DateTime

Непрочитанное сообщение evge » 12 фев 2018, 09:07

Вы пытаетесь записать TimeSpan в DateTime.

из MSDN

DateTime И TimeSpan типы значений отличаются в том, что DateTime представляет момент времени, а TimeSpan представляет интервал времени. Это означает, например, что можно вычесть один экземпляр DateTime из другого для получения TimeSpan , представляющий интервал времени между ними. Или можно добавить положительное TimeSpan с текущим DateTime для получения DateTime значение, которое представляет дату в будущем.

Можно добавить или вычесть временной интервал из DateTime объекта. Интервалы времени может быть положительным или отрицательным, могут быть выражены в единицах, таких как такты или секунды или могут быть выражен как TimeSpan объект.


Ещё один момент, это инициализация. Чтобы заработало надо что-то записать в глоб. переменную при инициализации, иначе в OnUpdate() её не будет. Поэтому делаем так:

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

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


В АД действительно нельзя задать TimeSpan в глоб. переменных, т.к. доступен ограниченный набор типов.

AddGlobalVariable(Name, Types)
AddGlobalVariable(Name, Types, Value) – функция создания статической переменной, которая сохраняет значение при следующем обращении к функции Evaluate(). В скрипте может быть определено несколько глобальных переменных.
Параметры:
• Name – строка - имя параметра.
• Types – тип переменной
o Int
o Long
o Double
o Boolean
o String
o DateTime
o IntList
o DoubleList
• Value – значение по умолчанию

TimeSpan частично и есть DateTime

Поэтому, как пример, добавим к дате бара или к дате наше время бара и 5 сек и запишем в глоб. переменную.

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

function Initialize()
{
   StrategyName = "Проверка";   
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");   

   AddGlobalVariable("VariableTime", Types.DateTime, DateTime.Today);   
}

function OnUpdate()
{

   // запишем в DateTime глоб. переменную "Дата бара + время бара + 5 сек"
   VariableTime = BarDate().Add(BarTime() + AsTime(0, 0, 5));   
      
      // Или
      
      // Запишем в DateTime глоб. переменную "Дата 2018.01.01 + время бара + 5 сек"
   VariableTime = AsDate(2018, 1, 1).Add(BarTime() + AsTime(0, 0, 5));   
}
никогда такого не было и вот опять

Arteshka
Сообщения: 71
Зарегистрирован: 10 ноя 2017, 12:43
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Вопрос по DateTime

Непрочитанное сообщение Arteshka » 12 фев 2018, 12:49

Спасибо, Evge!
Все по полочкам, четко, как по учебнику.


Вернуться в «Стратегии и роботы»

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

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