АвторСообщение





Сообщение: 122
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 14.04.14 09:56. Заголовок: Я в шоке! Подскажите.


Всем привет!
Я в шоке! Выпал из рынка на 3,5 месяца, а тут такие перемены. Игорь подскажи, где можно ознакомиться с изменениями в MQL4?
Хотел перенести все данные на новый комп, но некоторые индикаторы после компиляции перестают работать. Вот один из них.
http://gfile.ru/a8cCP
Хотя не перекомпилированные файлы работают.
Компиляция ошибок в коде не выявляет. Но при отладке выдается ошибка формирования массива стр.67. Но в чем ошибка не пойму.
Буду благодарен, если найдешь время исправить.



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 203 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All [только новые]







Сообщение: 431
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 22.01.16 12:27. Заголовок: Scriptong пишет: В ..


Scriptong пишет:

 цитата:
В OnInit еще рано делать выводы о том, закачана история по нужному ТФ или нет. Проверить достаточность баров правильнее так:



На сколько я понял, пытаться подкачивать историю в OnInit не правильно. Тогда ошибка понятна. Исправил все с учетом рекомендаций, вроде работает.
Огромное спасибо!

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2023
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 24.01.16 16:43. Заголовок: Sergey пишет: пыта..


Sergey пишет:

 цитата:
пытаться подкачивать историю в OnInit не правильно


Как раз правильно. В OnInit всегда стоит начать подкачку данных, просто обратившись в первому бару нужного таймфрейма. Но вот проверять результат там еще рано.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 433
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 25.01.16 08:49. Заголовок: Scriptong пишет: Ка..


Scriptong пишет:

 цитата:
Как раз правильно. В OnInit всегда стоит начать подкачку данных, просто обратившись к первому бару нужного таймфрейма.



Игорь, а обращение к первому бару нужного таймфрейма запускает подкачку историии и в советниках тоже?


С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2027
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 26.01.16 22:48. Заголовок: Sergey пишет: Игорь..


Sergey пишет:

 цитата:
Игорь, а обращение к первому бару нужного таймфрейма запускает подкачку историии и в советниках тоже?


В MQL4 -да. При обращении к любому бару таймфрейма терминал, по идее, проверяет полноту истории по указанному символу/таймфрейму. Если какого-то бара нет, то запускается процесс подкачки истории, а вызванная функция генерирует ошибку, возвращая 0.
Поэтому и используется подобный механизм проверки полноты истории. Но, сразу скажу, он не является идеальным, т. к. изначально не задумывался разработчиками именно таким образом. Поэтому "на все 100" надеяться на него не приходится.
В MQL5 для решения этой проблемы есть специально разработанный способ получения данных с сервера.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 437
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 05.02.16 10:02. Заголовок: Игорь, подскажи, как..


Игорь, подскажи, как определить координату "y" в "окне" у осциллятора ( к примеру Sto), "окна" массштабируются, а координаты нет.
Мне нудно отобразить значения показаний индикатора (объектами Wingdings) на всех ТФ в "окне" осциллятора.



С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2038
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 06.02.16 18:39. Заголовок: Sergey пишет: Игорь..


Sergey пишет:

 цитата:
Игорь, подскажи, как определить координату "y" в "окне" у осциллятора ( к примеру Sto), "окна" массштабируются, а координаты нет.
Мне нудно отобразить значения показаний индикатора (объектами Wingdings) на всех ТФ в "окне" осциллятора.


Нужно больше информации. Что подразумевается под координатой Y? По моему пониманию, Y в подокнах - это значение индикатора. Также может быть значение в пикселях от одного из четырех углов подокна. И, кстати, уточните, какие исходные данные Вы хотите использовать для определения координат точки?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 440
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 07.02.16 06:40. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
По моему пониманию, Y в подокнах - это значение индикатора.


Именно так. Текущее значение индикатора на всех ТФ в виде точки нужно отобразить под соответствующими надписями (М1.....MN) справа от индикатора текущего ТФ. Картинку я дал по Sto, но буду делать WPR . Осциллятор WPR ограничен значениями (-100-0).
Я не знаю, как можно перевести значение индикатора в пиксели с учетом масштабирования индикатора.
Единственная идея, которая мне пришла - это перевести координату Х надписи соответствующего ТФ в смещение показаний значения индикатора от нулевого бара. (Перевести координиту Х во время и рассчитать смещение в барах). Но я этого ни разу не делал, а возможно есть и другие способы. Нужна Ваша консультация - как грамотнее сделать.

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2040
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 08.02.16 09:46. Заголовок: Sergey пишет: Именн..


Sergey пишет:

 цитата:
Именно так. Текущее значение индикатора на всех ТФ в виде точки нужно отобразить под соответствующими надписями (М1.....MN) справа от индикатора текущего ТФ. Картинку я дал по Sto, но буду делать WPR . Осциллятор WPR ограничен значениями (-100-0).
Я не знаю, как можно перевести значение индикатора в пиксели с учетом масштабирования индикатора.
Единственная идея, которая мне пришла - это перевести координату Х надписи соответствующего ТФ в смещение показаний значения индикатора от нулевого бара. (Перевести координиту Х во время и рассчитать смещение в барах). Но я этого ни разу не делал, а возможно есть и другие способы. Нужна Ваша консультация - как грамотнее сделать.


Тут получается, что Х-координата должна быть в пикселях, а Y - в значениях индикатора. Таким образом, проблема решается преобразованием не Х-координаты, а Y-координаты. Х-координата должна быть известна всегда - это смещение столбца "таблицы" относительно правого верхнего угла подокна. Далее нужно преобразовать значение индикатора в пиксели для подокна. Для этого существует функция ChartTimePriceToXY. Только с ее помощью преобразуйте именно "цену" (так будет представляться значение индикатора) в Y. Время и, соответственно, Х в данном случае преобразовывать не нужно.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 441
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 08.02.16 17:29. Заголовок: Scriptong пишет: Дл..


Scriptong пишет:

 цитата:
Для этого существует функция ChartTimePriceToXY.


Я уже пробовал делать через нее.
ChartTimePriceToXY(0, WindowFind(short_name),TimeCurrent(), SlowWPR, X_SlowWPR, Y_SlowWPR);
Но координата У, как выяснилось, отсчитывается от верхней границы графика, а не подокна. Т.е если поднять окно до верхней граници графика, то все отображается, правда все равно со смещением по у. В нормальном же виде, данные даже не попадают в зону видимости подокна.

Чтобы использовать данный способ, надо как то определить координату У подокна в системе координат окна основного графика. Я не знаю, как это сделать.

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2042
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 10.02.16 22:07. Заголовок: Sergey пишет: Чтобы..


Sergey пишет:

 цитата:
Чтобы использовать данный способ, надо как то определить координату У подокна в системе координат окна основного графика. Я не знаю, как это сделать.


Эта задача точно такая же:

 цитата:

datetime GetAddBarToTime(datetime srcTime, int addBars)
{
int srcBar = iBarShift(NULL, 0, srcTime);
if (srcBar >= addBars)
return iTime(NULL, 0, srcBar - addBars);

return iTime(NULL, 0, 0) + (addBars - srcBar) * PeriodSeconds();
}

...
int subWnd = WindowFind("<имя индикатора>");
if (subWnd < 0)
return;

int x0, y0;
int firstBar = WindowFirstVisibleBar();
int totalBars = WindowBarsPerChart();
datetime lastBarTime = GetAddBarToTime(iTime(NULL, 0, firstBar), totalBars);

if (!ChartTimePriceToXY(0, subWnd, lastBarTime, indicator_maximum, x0, y0))
Print("ChartTimePriceToXY error: ", GetLastError());
else
Print("x0 = ", x0, ", y0 = ", y0);


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

Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 442
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 11.02.16 07:35. Заголовок: Scriptong пишет: Та..


Scriptong пишет:

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


Игорь, огромное спасибо! Идея понятна, реализация удалась.

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 448
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 03.03.16 20:05. Заголовок: Игорь, есть вопрос, ..


Игорь, есть вопрос, но даже не знаю как его сформулировать, чтобы было понятно. Я сделал индикатор и советник на его основе. Обращение к данным индикатора сделал через iCustom. Теперь хочу встроить индикатор в советник. Проблема в том, что индикатор рассчитывается при помощи нескольких циклов, то есть нельзя взять и рассчитать нужные бары без циклов.
В индикаторе, чтобы повторно не рассчитывать циклы используем limit = GetRecalcIndex(total, rates_total, prev_calculated);
Как это можно реализовать в советнике?

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2086
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 07.03.16 17:22. Заголовок: Sergey пишет: Тепер..


Sergey пишет:

 цитата:
Теперь хочу встроить индикатор в советник. Проблема в том, что индикатор рассчитывается при помощи нескольких циклов, то есть нельзя взять и рассчитать нужные бары без циклов.


Сегодня уже отвечал на подобный вопрос в другом месте (Недискретные рэндж-бары). Суть в том, что для каждого конкретного индикатора пишется свой собственный алгоритм расчета данных в советнике. В большинстве случаев такой алгоритм будет проще, если все сделать правильно.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 449
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 07.03.16 19:41. Заголовок: Scriptong пишет: В ..


Scriptong пишет:

 цитата:
В большинстве случаев такой алгоритм будет проще, если все сделать правильно.


А как правильно? В смысле, какие есть варианты? К примеру, я сейчас просто сокращаю количество проходов по циклам до достаточного и вместо динамического массива использую статический, плюс ограничиваю расчет только открытием нового бара. Была идея перекопирования массива со смещением на одну позицию, тогда в расчет попадает только последний бар. Но запнулся на проверке. Ведь возможны пробелы в следствии, к примеру, разрыва связи с терминалом.

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 2090
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 10.03.16 17:36. Заголовок: Sergey пишет: А как..


Sergey пишет:

 цитата:
А как правильно? В смысле, какие есть варианты?


Вариантов настолько много, что все их не перебрать. Проблема в том, что даже если я покажу пример встраивания индикатора в советник, то этот пример подойдет только для одного конкретного индикатора. Сделать по образу и подобию для другого индикатора не получится.

Общий смысл встраивания индикаторов, показания которых основаны на своих же предыдущих показаниях, заключается в повторении этой цепочки расчетов в советнике. Для этого не нужно создавать массив, длинной во всю историю котировок. Во многих случаях достаточно всего двух значений: предыдущего и текущего. Эти значения проходят по всей истории, передавая эстафету друг другу.

Подобным образом работают индикатор Divergence_Viewer и советник Divergence. Чтобы не мучаться каждый раз со встраиванием индикатора во советник, я разработал единый класс CDivergence, который подключается к любой программе.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 203 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет