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

Общие вопросы по разработке в Альфа-Директ 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
Администратор
Сообщения: 1641
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 294 раза
Контактная информация:

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

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

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

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

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

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

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

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

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

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

star
Сообщения: 3
Зарегистрирован: 01 май 2020, 10:56

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

Непрочитанное сообщение star » 28 авг 2020, 17:26

evge писал(а):Пока не реализован в АД4 доступ к более чем одному входным рядам, приходится "извращаться" в получении данных вышестоящих таймфреймов.


А на сегодня 28.08.2020 реализовали?

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

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

Непрочитанное сообщение evge » 28 авг 2020, 17:32

Скорее нет, чем да. Не было такой информации об обновлениях.
никогда такого не было и вот опять

star
Сообщения: 3
Зарегистрирован: 01 май 2020, 10:56

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

Непрочитанное сообщение star » 28 авг 2020, 18:08

evge писал(а):Скорее нет, чем да. Не было такой информации об обновлениях.


1. При переключении с таймфрейма на таймфрейм, можно ли узнать какой именно текущий тайм фрейм?
2. Глобальные переменные сохраняют ли свое значение после переключений с таймфрейма на таймфрейм?

Идея такая: пощелкать по таймфреймам (Mon, W, D); один раз сохранить в глобальных переменных значения OCHL, потом чертить по ним уровни на всех таймфреймах

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

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

Непрочитанное сообщение evge » 28 авг 2020, 19:22

между перерисовками они инициализируются заново, в стратегиях (роботах) хранятся всю их жизнь.

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

function Initialize()
{
IndicatorName = "ReDraw";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Red);
AddGlobalVariable("x", Types.Boolean, false);
}

function Evaluate()
{
if (!x) { ShowMessage("ReDraw, Initialize, Timeframe = " + Input.Timeframe); x = true; }
}


т.е. хранятся глоб. переменные в индикаторах только в рамках одной полной прорисовки по истории, т.е. на всех барах от первого до последнего можно получить значение этой переменной, но как только инициируется перерисовка (перемотка графика, живой бар (тики), смена ТФ) индикатор заново инициализируется, рисуется от начала координат, переменные сбрасываются (инициализируются).

про таймфрейм здесь

Поведение только странное у Input.TimeFrame. По умолчанию 1 минута = 1, даже если на графике другой ТФ, например часовой H1.
Но если сменить таймфрейм, то Input.TimeFrame меняет значение на правильное и при смене обратно тоже сменит на верное, например на H1, уже показывать будет = 60
никогда такого не было и вот опять


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

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

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