Общие вопросы по разработке > Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Victor
Сообщения: 8
Зарегистрирован: 24 май 2018, 17:28
Благодарил (а): 3 раза

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение Victor » 01 июн 2018, 21:32

И еще один... как тут свой метод то написать?
Он оборачивается коментами с фразой
//----------- Код, оказавшийся вне методов -----------//

AP_Bor
Сообщения: 167
Зарегистрирован: 18 дек 2017, 08:18
Благодарил (а): 11 раз
Поблагодарили: 7 раз

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение AP_Bor » 01 июн 2018, 22:29

Victor писал(а):И еще один... как тут свой метод то написать?
Он оборачивается коментами с фразой
//----------- Код, оказавшийся вне методов -----------//

Примерно так.
► Показать

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

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение evge » 02 июн 2018, 08:07

Victor писал(а):1) функция эвалуейт сама вызывается на какой-то эвент? или ее нужно вызвать?


Терминал 4.0. Скрипты пользовательских индикаторов и стратегий

Evaluate() – функция расчета служит для вычисления одной точки индикатора, которая исполняется на каждом новом баре и при изменении последней цены .

Victor писал(а):2) что значит "заполнить данные"? то-есть нужно чтобы бот все это время работал, и заполнял эти данные сам?


Находясь в нижестоящем таймфрейме данные в списке O,H,L,C на первых порах отсутсвуют. Т.е. прежде чем использовать нужно проверять есть ли что-то в списке.

Представьте, что это первые бары истории и это начало первого бара суток и ещё нет информации о его High, Low, Close. Open конечно уже мы знаем, но этого мало.

Когда исполнится условие

if (BarDate(0).Day != BarDate(1).Day)

и только в этот момент данные о первом дне попадут в списки O, H, L, C и мы сможем их далее использовать (на втором, третьем дне и т.д.)

поэтому, прежде чем обратится, например, за High предыдущего дня в H[0], надо проверить вообще списки пустые эти или нет? Для этого достаточно одной проверки (все проверять нет смысла)

Например,

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

if (O.Count > 0) { ... }


значит хотя бы 1 запись во всех списках есть и можно анализировать.

Victor писал(а):Мне нужно при запуске бота (в, допустим, минутном таймфрейме) как-то получить несколько последних дневных баров. Сразу при запуске. Как это сделать?


как то так:

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

// когда списки пусты, производим
// первоначальное заполнение 5 предыдущих дней относительно таймфрейма минутного
if (O.Count == 0)
for (int x = 1; x < 4100; x++)
{
if (BarDate(x) != BarDate(x+1))
{
   O.Insert(0, Open); H.Insert(0, Max); L.Insert(0, Min); C.Insert(0, Input.Close[x+1]);
   var CN = O.Count;
   if (CN > Period) { O.RemoveAt(CN - 1); H.RemoveAt(CN - 1); L.RemoveAt(CN - 1); C.RemoveAt(CN - 1); }
   Min = Double.MaxValue; Max = 0.0; Open = Input.Open[x];
}
if (Input.Low[x] < Min) Min = Input.Low[x];
if (Input.High[x] > Max) Max = Input.High[x];
}

// здесь мы продолжаем наполнять новыми данными списки при переходе через новый день
if (BarDate(0) != BarDate(1))
{
   O.Insert(0, Open); H.Insert(0, Max); L.Insert(0, Min); C.Insert(0, Input.Close[1]);
   var CN = O.Count;
   if (CN > Period) { O.RemoveAt(CN - 1); H.RemoveAt(CN - 1); L.RemoveAt(CN - 1); C.RemoveAt(CN - 1); }
   Min = Double.MaxValue; Max = 0.0; Open = Input.Open[0];
}
if (Input.Low[0] < Min) Min = Input.Low[0];
if (Input.High[0] > Max) Max = Input.High[0];



Всё это будет неактуально, когда в АД4 реализуют получение данных от других ТФ и желательно с возможностью чтения других инструментов из одной стратегии.

Но пока этого нет :(
никогда такого не было и вот опять

Victor
Сообщения: 8
Зарегистрирован: 24 май 2018, 17:28
Благодарил (а): 3 раза

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение Victor » 04 июн 2018, 12:09

Да.. спасибо AP_Bor, evge, oxi. Все менее круто чем я ожидал :) Не знаете как отправить им фича реквест? Нужно как-то запилить возможность свой хелпер(хотябы статический) писать.

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

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение evge » 04 июн 2018, 13:09

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

Victor
Сообщения: 8
Зарегистрирован: 24 май 2018, 17:28
Благодарил (а): 3 раза

Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!

Непрочитанное сообщение Victor » 04 июн 2018, 14:28

Написал :) Нужно еще идею про интелисенс закинуть. Чувствую себя инвалидом.

В документе описано что делает Evaluate(), примеры есть, все ок. Но не написано почему Evaluate() заворачивается в коментарий при попытке сохранить стратегию... Или эта штука только для "индикаторов" и они редактируются где-то в другом меню? - Сам себе ответил :) А где это меню, кстати?

Народ, как вы дебажите это? Пишите в файл?


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя