Общие вопросы по разработке > Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Добрый день, Evge!
СПАСИБО!!!
Все работает!
СПАСИБО!!!
Все работает!
-
- Сообщения: 84
- Зарегистрирован: 14 ноя 2016, 02:17
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Добрый день! Евгений у меня вопрос по индикатору, как можно получить данные предыдущих дней?
данные по сегодняшнему дню получить удаётся, а вот данные по вчерашнему не получается менял
Код: Выделить всё
function Initialize()
{
IndicatorName = "temp1"; // Задайте название индикатора и сохраните с данным именем
PriceStudy = true; // Рисовать в области цены (true – да, false – нет)
AddInput("Input", Inputs.Candle); // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
AddSeries("A", DrawAs.Line, Color.Red); // Задаем вид линии индикатора A
AddParameter("Period", 326, 1); // Сканируемый период
// для сохранения списков значений OHLC дневных баров
AddGlobalVariable("O", Types.DoubleList);
AddGlobalVariable("H", Types.DoubleList);
AddGlobalVariable("L", Types.DoubleList);
AddGlobalVariable("C", Types.DoubleList);
// для хранения минимальной и максимальной цены текущего дня
AddGlobalVariable("Min", Types.Double, 999999999);
AddGlobalVariable("Max", Types.Double, 0.0);
// для хранения цены открытия текущего дня
AddGlobalVariable("Open", Types.Double, 0.0);
}
function Evaluate()
{
// закончился дневной бар и начался новый
// сохраняем дневные данные в списках
if (BarDate(0).Day != BarDate(1).Day)
{
// новый бар
O.Insert(0, Input.Open[0]);
H.Insert(0, Input.High[0]);
L.Insert(0, Input.Low[0]);
C.Insert(0, Input.Close[0]);
// лишнее удаляем
var CN = O.Count;
if (CN > Period)
{
O.RemoveAt(CN - 1);
H.RemoveAt(CN - 1);
L.RemoveAt(CN - 1);
C.RemoveAt(CN - 1);
}
}
if (O.Count > 0)
{
if (Input.Low[0] < L[0]) L[0] = Input.Low[0];
if (Input.High[0] > H[0]) H[0] = Input.High[0];
C[0] = Input.Close[0];
}
LogData ("[0] //O - " + Convert.ToString(O[0]) + "// H - " + Convert.ToString(H[0]) + "// L - " + Convert.ToString(L[0]) + "// C - " + Convert.ToString(C[0]) , IndicatorName);
LogData ("////////" , IndicatorName);
LogData ("[1] //O - " + Convert.ToString(O[1]) + "// H - " + Convert.ToString(H[1]) + "// L - " + Convert.ToString(L[1]) + "// C - " + Convert.ToString(C[1]) , IndicatorName);
}
данные по сегодняшнему дню получить удаётся, а вот данные по вчерашнему не получается менял
Код: Выделить всё
// новый бар
O.Insert(0, Input.Open[1]);
H.Insert(0, Input.High[1]);
L.Insert(0, Input.Low[1]);
C.Insert(0, Input.Close[1]);
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Владимир писал(а):Добрый день! Евгений у меня вопрос по индикатору, как можно получить данные предыдущих дней?
данные по сегодняшнему дню получить удаётся, а вот данные по вчерашнему не получается менял
Прежде чем использовать данные, необходимо убедится что там значения заполнены. Об этом я уточнял здесь.
Поэтому прежде чем писать в лог (в данном случае) необходимо проверять наличие данных в списке O, через O.Count
Код: Выделить всё
if (O.Count > 0)
{
LogData ("[0] //O - " + Convert.ToString(O[0]) + "// H - " + Convert.ToString(H[0]) + "// L - " + Convert.ToString(L[0]) + "// C - " + Convert.ToString(C[0]) , IndicatorName);
}
LogData ("////////" , IndicatorName);
if (O.Count > 1)
{
LogData ("[1] //O - " + Convert.ToString(O[1]) + "// H - " + Convert.ToString(H[1]) + "// L - " + Convert.ToString(L[1]) + "// C - " + Convert.ToString(C[1]) , IndicatorName);
}
В итоге на выходе в log:
Код: Выделить всё
2017.03.28 08:51:22.379 [0] //O - 51,01// H - 51,01// L - 50,04// C - 50,79
2017.03.28 08:51:22.379 ////////
2017.03.28 08:51:22.379 [1] //O - 50,58// H - 51,06// L - 50,4// C - 51,03
2017.03.28 08:51:22.379 [0] //O - 51,01// H - 51,01// L - 50,04// C - 50,79
2017.03.28 08:51:22.379 ////////
2017.03.28 08:51:22.379 [1] //O - 50,58// H - 51,06// L - 50,4// C - 51,03
никогда такого не было и вот опять
-
- Сообщения: 84
- Зарегистрирован: 14 ноя 2016, 02:17
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Евгений! Ещё один вопрос по получаемым данным
получил лог
но при проверке данных получил
[1] //O - 2072,25- совпадает
// H - 2072,25- совпадает
//L - 2048,1 - 2027,8 (не совпадает)
// C - 2050,4 - 2050,95 (не совпадает)
по последней свечке тоже не совпадают данные
[0] //O - 2052,25 - совпадает
// H - 2057,25 - изменяется свеча растёт пренебрегаем полученым значением (лонг)
//L - 2051,35 - 2042,5 (не совпадает)
// C - 2053,1 - изменяется свеча растёт пренебрегаем полученым значением (лонг)
Из за чего может возникать такая ошибка по данным (MXI-6.17, таймфрем 5М, свеча 27/28.03.2017г) индикатор исправил проверку данных провожу как Вы написали?
получил лог
2017.03.28 18:54:36.335 ////////
2017.03.28 18:54:36.335 [1] //O - 2072,25// H - 2072,25// L - 2048,1// C - 2050,4
2017.03.28 18:54:36.335 [0] //O - 2052,25// H - 2057,25// L - 2051,35// C - 2053,1
2017.03.28 18:54:36.335 ////////
но при проверке данных получил
[1] //O - 2072,25- совпадает
// H - 2072,25- совпадает
//L - 2048,1 - 2027,8 (не совпадает)
// C - 2050,4 - 2050,95 (не совпадает)
по последней свечке тоже не совпадают данные
[0] //O - 2052,25 - совпадает
// H - 2057,25 - изменяется свеча растёт пренебрегаем полученым значением (лонг)
//L - 2051,35 - 2042,5 (не совпадает)
// C - 2053,1 - изменяется свеча растёт пренебрегаем полученым значением (лонг)
Из за чего может возникать такая ошибка по данным (MXI-6.17, таймфрем 5М, свеча 27/28.03.2017г) индикатор исправил проверку данных провожу как Вы написали?
- evge
- Администратор
- Сообщения: 1811
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 366 раз
- Контактная информация:
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Владимир писал(а):не совпадает
не соглашусь, совпадает.
записано в лог при M5 на графике! На скиршоте ТФ уже изменен, чтобы показать, что всё в порядке с значениями записанными в лог.
Несовпадать будет если вы скролировали график в истории.
Смотреть в то, что пишется в лог при позиции на последней свечке.
Т.к. для сдвига в истории данные индикатор пишет до последней видимой на графике свечки. т.е. это уже может быть не 28 и 27 число или 27 и 26 например, или иные варинты. Это нормально для индикатора, т.к. он будет получать актуальные значения вышестоящего ТФ относительно требуемой точки истории. Проверяйте на последнем баре на графике, без смещения в историю.
никогда такого не было и вот опять
-
- Сообщения: 84
- Зарегистрирован: 14 ноя 2016, 02:17
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Добрый день! Индикатор проверял под виртуальной машине видно винда косо встала или альфа директ! Дома проверил да данные совпадают!
-
- Сообщения: 84
- Зарегистрирован: 14 ноя 2016, 02:17
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Выкладываю лог на которое ссылался, лог при M5 на графике наверное проблема в ПО
- Вложения
-
- temp1.rar
- (51.02 КБ) 13223 скачивания
-
- temp1.part1.log
- (442.47 КБ) 13754 скачивания
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Отличный форум! Значит у них есть глобальные переменные, которые могут использоваться между разными ботами? Ок. Еще бы найти возможно ли запускать бота по шедуйлеру или из стороннего софта как-либо?
Размещу этот вопрос в отдельную тему
Размещу этот вопрос в отдельную тему
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
глобальная переменная - сохраняет значение внутри одного робота между пересчетами
Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Ребята глупый вопрос, вернее вопросы:
1) функция эвалуейт сама вызывается на какой-то эвент? или ее нужно вызвать?
2) что значит "заполнить данные"? то-есть нужно чтобы бот все это время работал, и заполнял эти данные сам?
Мне нужно при запуске бота (в, допустим, минутном таймфрейме) как-то получить несколько последних дневных баров. Сразу при запуске. Как это сделать?
1) функция эвалуейт сама вызывается на какой-то эвент? или ее нужно вызвать?
2) что значит "заполнить данные"? то-есть нужно чтобы бот все это время работал, и заполнял эти данные сам?
Мне нужно при запуске бота (в, допустим, минутном таймфрейме) как-то получить несколько последних дневных баров. Сразу при запуске. Как это сделать?
Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей