Общие вопросы по разработке > Как задать интервал времени?
-
- Сообщения: 23
- Зарегистрирован: 20 ноя 2016, 07:43
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Как задать интервал времени?
Вот часть кода:
if ((BW_AO < BW_AO[-1]) && (BW_AO[-2] < BW_AO[-1]))?&& "а здесь не могу задать условие времени звучания..."
{ PlaySound(InnerSystemSounds.Asterisk); }
Не пойму, как задать интервал времени звучания? Есть -ли в АД4 что-то типа оператора TimeSpan?
if ((BW_AO < BW_AO[-1]) && (BW_AO[-2] < BW_AO[-1]))?&& "а здесь не могу задать условие времени звучания..."
{ PlaySound(InnerSystemSounds.Asterisk); }
Не пойму, как задать интервал времени звучания? Есть -ли в АД4 что-то типа оператора TimeSpan?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как задать интервал времени?
Есть.
Из документации (документ "Терминал 4.0. Скрипты пользовательских индикаторов и стратегий.doc" на оф. сайте АД4 в разделе "Обучение \ Учебные материалы \ Стратегии и роботы")
ФУНКЦИИ РАБОТЫ СО ВРЕМЕНЕМ
BarTime() – время начала бара в момент вызова функции Evaluate().
AsTime(int HH, int MM, int SS) – создание значения времени.
Параметры:
• HH – часы (число);
• MM – минуты (число);
• SS – секунды (число).
Пример. Определение цены открытия дня (для рынков с открытием в 10:00).
Пример. Определение, что время бара больше предыдущего .
BarDate() – дата начала бара в момент вызова функции Evaluate().
AsDate(int Year, int Month, int Date) – создание значения даты.
Пример. Определение цены открытия дня (работает на ТФ день и меньше).
Пример. Определение, что дата бара совпадает с сегодняшним днем.
Пример. Определение начала недели.
так же дополнительно может помочь:
Структура TimeSpan
Структура DateTime
Из документации (документ "Терминал 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
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как задать интервал времени?
Но решая задачу задания интервала звучания, я бы в момент наступления сигнала включал триггер (глоб. переменную Boolean) и звучание производил до момента его отключения. Отключением бы являлось превышение заданного интервала, например заданное параметром.
никогда такого не было и вот опять
-
- Сообщения: 23
- Зарегистрирован: 20 ноя 2016, 07:43
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Как задать интервал времени?
evge писал(а):Но решая задачу задания интервала звучания, я бы в момент наступления сигнала включал триггер (глоб. переменную Boolean) и звучание производил до момента его отключения. Отключением бы являлось превышение заданного интервала, например заданное параметром.
Я и спрашиваю, как задать этот интервал времени.?
И ещё: оператор AsTime(....) - задаёт текущее время или этим оператором можно задавать интервал времени.
Например, как мне задать время " N секунд после начала бара BarTime(...)"?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как задать интервал времени?
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;
}
}
никогда такого не было и вот опять
-
- Сообщения: 23
- Зарегистрирован: 20 ноя 2016, 07:43
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
Re: Как задать интервал времени?
Большое спасибо. Поколдую.
Просто у меня голова повёрнута на EasyLanguage и PowerLanguage. Там несколько другая логика.
Просто у меня голова повёрнута на EasyLanguage и PowerLanguage. Там несколько другая логика.
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей