Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 506

 
Вадим Мотеюнас:
https://www.mql5.com/ru/docs/basis/operators
 
ArturR:

1. Да, в коде случай для нулевого бара, сейчас нет возможности проверить какой случай тестировал, сегодня вечером проверю.

2. Проверял, выводом комента в график со значениями величин, macd, High и Low имеют значения, а min(max)price не получают соответствующие значения.

Нужно бы посмотреть, как объявлены эти переменные. Есть подозрение, что это локальные переменные, которые обнуляются с каждым входом в функцию. В итоге те моменты, когда они со значениями, Вы попросту не успеваете увидеть. Чтобы увидеть значения, просмотрите содержимое журнала. Ведь в коде есть Print.

 

Здравствуйте. Есть задача, из 1000 строк файла csv, нужно выбирать совпадения по параметру из поля N и возвращать любой тип значения из других полей найденной записи. Подскажите может есть эксперт, который работает через файл и принимает торговые решения? Благодарю.

 
mwwm:

Здравствуйте. Есть задача, из 1000 строк файла csv, нужно выбирать совпадения по параметру из поля N и возвращать любой тип значения из других полей найденной записи. Подскажите может есть эксперт, который работает через файл и принимает торговые решения? Благодарю.

Наверное, нужно искать те, что работают с новостями в код базе.

 
Ihor Herasko:

Вы попросту не успеваете увидеть. Чтобы увидеть значения, просмотрите содержимое журнала. Ведь в коде есть Print.

Так и есть, спасибо ) В журнале среди прочей шелухи не замечал эту запись. Еще раз спасибо всем откликнувшимся, буду дальше наводить порядок )

 
Какой нужно сделать расчет индекса бара чтобы значение соответствовало следующей логике: если текущий период графика М15, и таймфрейм вызываемого индикатора с функцией(MTF) =Н1, то индекс бара 5, то есть по факту закрытия бара Н1, если текущий период графика М30, и таймфрейм вызываемого индикатора с функцией(MTF) =Н1, то индекс бара 3, если текущий период графика М5, и таймфрейм вызываемого индикатора с функцией(MTF) =М15, то индекс бара 4.
 
lil_lil:
Какой нужно сделать расчет индекса бара чтобы значение соответствовало следующей логике: если текущий период графика М15, и таймфрейм вызываемого индикатора с функцией(MTF) =Н1, то индекс бара 5, то есть по факту закрытия бара Н1, если текущий период графика М30, и таймфрейм вызываемого индикатора с функцией(MTF) =Н1, то индекс бара 3, если текущий период графика М5, и таймфрейм вызываемого индикатора с функцией(MTF) =М15, то индекс бара 4.

Здесь ошибка в самой логике. Текущий ТФ может быть М15, а последний бар М15, который соответствует сформировавшемуся бару Н1, будет 1. А может быть и 2, и 3, и 4, но не больше. К примеру, сейчас время 10:06. Индексы текущих баров М15 и Н1 - 0, предыдущих баров на обоих ТФ - 1, последний бар М15, соответствующий закрытому Н1 - тоже 1. В 10:15 ситуация изменится: последний бар М15 сформировавшегося Н1 будет иметь индекс 2, в 10:30 - 3, в 10:45 - 4.

Математические расчеты тут особо не помогут. Нужно искать на графике соответствующие бары. Алгоритм будет таким:

  1. Определить время открытия нулевого бара Н1. (iTime)
  2. Определить индекс первого бара текущего ТФ, который соответствует времени открытия нулевого бара Н1. (iBarShift)
  3. Добавить 1 к найденному индексу бара.

 
Ihor Herasko:

Здесь ошибка в самой логике. Текущий ТФ может быть М15, а последний бар М15, который соответствует сформировавшемуся бару Н1, будет 1. А может быть и 2, и 3, и 4, но не больше. К примеру, сейчас время 10:06. Индексы текущих баров М15 и Н1 - 0, предыдущих баров на обоих ТФ - 1, последний бар М15, соответствующий закрытому Н1 - тоже 1. В 10:15 ситуация изменится: последний бар М15 сформировавшегося Н1 будет иметь индекс 2, в 10:30 - 3, в 10:45 - 4.

Математические расчеты тут особо не помогут. Нужно искать на графике соответствующие бары. Алгоритм будет таким:

  1. Определить время открытия нулевого бара Н1. (iTime)
  2. Определить индекс первого бара текущего ТФ, который соответствует времени открытия нулевого бара Н1. (iBarShift)
  3. Добавить 1 к найденному индексу бара.

Вероятно не всё сказал. Индикатор рисует на нулевом баре старшего таймфрейма, условно Н1, соответственно на протяжении всех 4-х баров текущего таймфрейма, М15. Поэтому мне и нужен конкретно индекс 5 на ТФ М15, чтобы узнать на закрытии Н1, остался сигнал или нет. Наверняка есть возможность посчитать этот индекс чтобы не писать кучу условий для каждого варианта сочетаний старших и текущего периодов.

input ENUM_TIMEFRAMES   TimeFrame=PERIOD_H1;
//  
 if(TimeFrame == PERIOD_H1&&Period()==M15) timef = 5;//timef = 4;

   if(TimeFrame == PERIOD_H1&&Period()==M30) timef = 3;//timef = 2;


Ajk=NormalizeDouble(iCustom(NULL,0,"Ajk",TimeFrame,4,i+timef),Digits);
 
lil_lil:

Вероятно не всё сказал. Индикатор рисует на нулевом баре старшего таймфрейма, условно Н1, соответственно на протяжении всех 4-х баров текущего таймфрейма, М15.

Я ведь о том и говорю, что баров текущего ТФ может быть меньше - 1, 2 или 3. То есть показания далеко не всегда будут отображаться на 4-х барах. Отображение на 4-х барах будет в одном случае - это последний бар текущего ТФ, который соответствует нулевому бару Н1. Для такой постановки задачи нужно всего лишь найти первый бар текущего ТФ, соответствующий нулевому бару Н1:

int nCurTFBarIndex = iBarShift(NULL, 0, iTime(NULL, PEPRIOD_H1, 0));

Тогда отображение показаний будет происходить от нулевого бара текущего ТФ до nCurTFBarIndex включительно.

Поэтому мне и нужен конкретно индекс 5 на ТФ М15, чтобы узнать на закрытии Н1, остался сигнал или нет. Наверняка есть возможность посчитать этот индекс чтобы не писать кучу условий для каждого варианта сочетаний старших и текущего периодов.

От какого ТФ берется сигнал: от текущего, от Н1 или смешанный вариант? Если только с Н1, то вообще не нужно ничего искать, т. к. последний сформировавшийся бар всегда будет иметь индекс 1.

 
Ihor Herasko:

От какого ТФ берется сигнал: от текущего, от Н1 или смешанный вариант? Если только с Н1, то вообще не нужно ничего искать, т. к. последний сформировавшийся бар всегда будет иметь индекс 1.

Индикатор MTF, во внешних настройках ставлю Н1, прикрепляю к графику М15. Сигнал мигает в течении 4 бара. Когда закрывается бар Н1, сигнал не мигает.На М15 сигнал получается на баре 4 перестаёт мигать. Если поставить на М1, соответственно перестаёт мигать на баре 60. вот и нужно посчитать индекс i+N  чтобы N изменялась в зависимости от выбранного периода в настройках и от того на график какого периода прикреплён индикатор.

input ENUM_TIMEFRAMES   TimeFrame=PERIOD_H1;
//  
 if(TimeFrame == PERIOD_H1&&Period()==M15) N = 5;// ВОЗМОЖНО НУЖНО N = 4;

   if(TimeFrame == PERIOD_H1&&Period()==M1) N = 61;//А ЗДЕСЬ ВОЗМОЖНО N = 60;