Общие вопросы по разработке > Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
И еще один... как тут свой метод то написать?
Он оборачивается коментами с фразой
//----------- Код, оказавшийся вне методов -----------//
Он оборачивается коментами с фразой
//----------- Код, оказавшийся вне методов -----------//
-
- Сообщения: 170
- Зарегистрирован: 18 дек 2017, 08:18
- Благодарил (а): 12 раз
- Поблагодарили: 8 раз
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Victor писал(а):И еще один... как тут свой метод то написать?
Он оборачивается коментами с фразой
//----------- Код, оказавшийся вне методов -----------//
Примерно так.
► Показать
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
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 реализуют получение данных от других ТФ и желательно с возможностью чтения других инструментов из одной стратегии.
Но пока этого нет
никогда такого не было и вот опять
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Да.. спасибо AP_Bor, evge, oxi. Все менее круто чем я ожидал Не знаете как отправить им фича реквест? Нужно как-то запилить возможность свой хелпер(хотябы статический) писать.
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
никогда такого не было и вот опять
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Написал Нужно еще идею про интелисенс закинуть. Чувствую себя инвалидом.
В документе описано что делает Evaluate(), примеры есть, все ок. Но не написано почему Evaluate() заворачивается в коментарий при попытке сохранить стратегию... Или эта штука только для "индикаторов" и они редактируются где-то в другом меню? - Сам себе ответил А где это меню, кстати?
Народ, как вы дебажите это? Пишите в файл?
В документе описано что делает Evaluate(), примеры есть, все ок. Но не написано почему Evaluate() заворачивается в коментарий при попытке сохранить стратегию... Или эта штука только для "индикаторов" и они редактируются где-то в другом меню? - Сам себе ответил А где это меню, кстати?
Народ, как вы дебажите это? Пишите в файл?
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
evge писал(а):Пока не реализован в АД4 доступ к более чем одному входным рядам, приходится "извращаться" в получении данных вышестоящих таймфреймов.
А на сегодня 28.08.2020 реализовали?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Скорее нет, чем да. Не было такой информации об обновлениях.
никогда такого не было и вот опять
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
evge писал(а):Скорее нет, чем да. Не было такой информации об обновлениях.
1. При переключении с таймфрейма на таймфрейм, можно ли узнать какой именно текущий тайм фрейм?
2. Глобальные переменные сохраняют ли свое значение после переключений с таймфрейма на таймфрейм?
Идея такая: пощелкать по таймфреймам (Mon, W, D); один раз сохранить в глобальных переменных значения OCHL, потом чертить по ним уровни на всех таймфреймах
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
между перерисовками они инициализируются заново, в стратегиях (роботах) хранятся всю их жизнь.
т.е. хранятся глоб. переменные в индикаторах только в рамках одной полной прорисовки по истории, т.е. на всех барах от первого до последнего можно получить значение этой переменной, но как только инициируется перерисовка (перемотка графика, живой бар (тики), смена ТФ) индикатор заново инициализируется, рисуется от начала координат, переменные сбрасываются (инициализируются).
про таймфрейм здесь
Поведение только странное у Input.TimeFrame. По умолчанию 1 минута = 1, даже если на графике другой ТФ, например часовой H1.
Но если сменить таймфрейм, то Input.TimeFrame меняет значение на правильное и при смене обратно тоже сменит на верное, например на H1, уже показывать будет = 60
Код: Выделить всё
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
никогда такого не было и вот опять
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей