Общие вопросы по разработке > Как задать интервал времени?

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
abelok
Сообщения: 23
Зарегистрирован: 20 ноя 2016, 07:43
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Как задать интервал времени?

Непрочитанное сообщение abelok » 20 ноя 2016, 14:17

Вот часть кода:

if ((BW_AO < BW_AO[-1]) && (BW_AO[-2] < BW_AO[-1]))?&& "а здесь не могу задать условие времени звучания..."
{ PlaySound(InnerSystemSounds.Asterisk); }

Не пойму, как задать интервал времени звучания? Есть -ли в АД4 что-то типа оператора TimeSpan?

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

Re: Как задать интервал времени?

Непрочитанное сообщение evge » 20 ноя 2016, 16:19

Есть.

Из документации (документ "Терминал 4.0. Скрипты пользовательских индикаторов и стратегий.doc" на оф. сайте АД4 в разделе "Обучение \ Учебные материалы \ Стратегии и роботы")

ФУНКЦИИ РАБОТЫ СО ВРЕМЕНЕМ

BarTime() – время начала бара в момент вызова функции Evaluate().
AsTime(int HH, int MM, int SS) – создание значения времени.

Параметры:
• HH – часы (число);
• MM – минуты (число);
• SS – секунды (число).

Пример. Определение цены открытия дня (для рынков с открытием в 10:00).

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

if (BarTime() == AsTime(10, 00, 00))             
    A = Input.Open[0];


Пример. Определение, что время бара больше предыдущего .

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

if (BarTime() < BarTime(-1))             
    A = Input.Close[0];


BarDate() – дата начала бара в момент вызова функции Evaluate().
AsDate(int Year, int Month, int Date) – создание значения даты.

Пример. Определение цены открытия дня (работает на ТФ день и меньше).

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

if (BarDate() > BarDate(-1))             
    A = Input.Open[0];


Пример. Определение, что дата бара совпадает с сегодняшним днем.

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

if (BarDate() == DateTime.Today)             
    A = Input.Open[0];


Пример. Определение начала недели.

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

if (BarDate().DayOfWeek < BarDate(-1).DayOfWeek)             
    A = Input.Open[0];


так же дополнительно может помочь:

Структура TimeSpan

Структура DateTime
никогда такого не было и вот опять

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

Re: Как задать интервал времени?

Непрочитанное сообщение evge » 20 ноя 2016, 16:30

Но решая задачу задания интервала звучания, я бы в момент наступления сигнала включал триггер (глоб. переменную Boolean) и звучание производил до момента его отключения. Отключением бы являлось превышение заданного интервала, например заданное параметром.
никогда такого не было и вот опять

abelok
Сообщения: 23
Зарегистрирован: 20 ноя 2016, 07:43
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Как задать интервал времени?

Непрочитанное сообщение abelok » 20 ноя 2016, 18:46

evge писал(а):Но решая задачу задания интервала звучания, я бы в момент наступления сигнала включал триггер (глоб. переменную Boolean) и звучание производил до момента его отключения. Отключением бы являлось превышение заданного интервала, например заданное параметром.


Я и спрашиваю, как задать этот интервал времени.?
И ещё: оператор AsTime(....) - задаёт текущее время или этим оператором можно задавать интервал времени.

Например, как мне задать время " N секунд после начала бара BarTime(...)"?

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

Re: Как задать интервал времени?

Непрочитанное сообщение evge » 20 ноя 2016, 20:15

abelok писал(а):И ещё: оператор AsTime(....) - задаёт текущее время или этим оператором можно задавать интервал времени.


Это не текущее время.
AsTime(int HH, int MM, int SS) – создание значения времени.

"Текущее" время бара это BarTime() (время открытия бара)

Интервал задаётся простым сравнением, например

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

BarTime() > AsTime(10,0,0) && BarTime() <= AsTime(11,0,0)


В данном случае условие выполнится если время бара находится в интервале от 10 до 11 часов.

Но Вашу задачу это не решает, так что путь другой.

abelok писал(а):Например, как мне задать время " N секунд после начала бара BarTime(...)"?


1. Как я и описал выше, необходимо включить триггер при выполнения условия (без каких либо сравнений времени бара с конкретным временем)
2. По этому триггеру (включен) выдаем звук (на каждом баре при выполнении OnUpdate()) и проверяем не пора ли его выключать, например, через заданное N - количество баров от момента старта.

простой пример, чтоб не лить воду :)

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

function Initialize()
{
   StrategyName = "MyMTS";
   
   // Параметр N - количество баров проигрывания звука после сигнала
   AddParameter("N", 5, "", 1);

   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;

   // Триггер проигрывания звука
   AddGlobalVariable("Play", Types.Boolean, false);
   // Индекс сигнального бара
   AddGlobalVariable("StartIndex", Types.Int, 0);
}

function OnUpdate()
{

   // Проигрываем звук N раз
   if (Play)
   {
      PlaySound(InnerSystemSounds.Asterisk);
      if (CurrentIndex - StartIndex >= N) Play = false;
   }

   // Сигнал о начале проигрывания звука
   if ( Input1.Close > SMA(Input1.Close, 20) && Input1.Close[1] < SMA(Input1.Close, 20)[1] )
   {
      Play = true;
      StartIndex = CurrentIndex;
   }
}
никогда такого не было и вот опять

abelok
Сообщения: 23
Зарегистрирован: 20 ноя 2016, 07:43
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Как задать интервал времени?

Непрочитанное сообщение abelok » 21 ноя 2016, 06:21

Большое спасибо. Поколдую.
Просто у меня голова повёрнута на EasyLanguage и PowerLanguage. Там несколько другая логика.


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

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

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