Страница 2 из 4

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

Добавлено: 16 янв 2017, 10:22
Gemin
Добрый день, Evge!
СПАСИБО!!!
Все работает!

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

Добавлено: 27 мар 2017, 22:04
Владимир
Добрый день! Евгений у меня вопрос по индикатору, как можно получить данные предыдущих дней?

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

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]);

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

Добавлено: 28 мар 2017, 08:00
evge
Владимир писал(а):Добрый день! Евгений у меня вопрос по индикатору, как можно получить данные предыдущих дней?

данные по сегодняшнему дню получить удаётся, а вот данные по вчерашнему не получается менял


Прежде чем использовать данные, необходимо убедится что там значения заполнены. Об этом я уточнял здесь.
Поэтому прежде чем писать в лог (в данном случае) необходимо проверять наличие данных в списке 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

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

Добавлено: 28 мар 2017, 19:22
Владимир
Евгений! Ещё один вопрос по получаемым данным
получил лог
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г) индикатор исправил проверку данных провожу как Вы написали?

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

Добавлено: 28 мар 2017, 21:32
evge
Владимир писал(а):не совпадает


не соглашусь, совпадает.

temp1.png
temp1.png (18.95 КБ) 51467 просмотров


записано в лог при M5 на графике! На скиршоте ТФ уже изменен, чтобы показать, что всё в порядке с значениями записанными в лог.

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

Т.к. для сдвига в истории данные индикатор пишет до последней видимой на графике свечки. т.е. это уже может быть не 28 и 27 число или 27 и 26 например, или иные варинты. Это нормально для индикатора, т.к. он будет получать актуальные значения вышестоящего ТФ относительно требуемой точки истории. Проверяйте на последнем баре на графике, без смещения в историю.

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

Добавлено: 29 мар 2017, 09:52
Владимир
Добрый день! Индикатор проверял под виртуальной машине видно винда косо встала или альфа директ! Дома проверил да данные совпадают!

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

Добавлено: 29 мар 2017, 20:27
Владимир
Выкладываю лог на которое ссылался, лог при M5 на графике наверное проблема в ПО

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

Добавлено: 24 май 2018, 17:48
Victor
Отличный форум! Значит у них есть глобальные переменные, которые могут использоваться между разными ботами? Ок. Еще бы найти возможно ли запускать бота по шедуйлеру или из стороннего софта как-либо?
Размещу этот вопрос в отдельную тему

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

Добавлено: 24 май 2018, 19:00
oxi
глобальная переменная - сохраняет значение внутри одного робота между пересчетами

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

Добавлено: 01 июн 2018, 21:10
Victor
Ребята глупый вопрос, вернее вопросы:
1) функция эвалуейт сама вызывается на какой-то эвент? или ее нужно вызвать?
2) что значит "заполнить данные"? то-есть нужно чтобы бот все это время работал, и заполнял эти данные сам?

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