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





Сообщение: 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 [только новые]







Сообщение: 286
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 18.05.15 11:23. Заголовок: Как прогнать индикат..


Как прогнать индикатор в тестере на истории? Теоретически нужно запустить советник в режиме визуализации не выставляющий ордера и к графику прикрепить тестируемый индикатор. Есть ли еще варианты? Просто не все индикаторы ставятся таким образом на график.

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





Сообщение: 1550
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 18.05.15 14:42. Заголовок: Sergey пишет: Есть ..


Sergey пишет:

 цитата:
Как прогнать индикатор в тестере на истории? Теоретически нужно запустить советник в режиме визуализации не выставляющий ордера и к графику прикрепить тестируемый индикатор. Есть ли еще варианты? Просто не все индикаторы ставятся таким образом на график.


В МТ5 давно существует возможность полноценного тестирования индикаторов. А вот в МТ4 только-только появилось подобное. 810-й билд. Но пока это только бета-версия. Думаю, через пару-тройку недель состоится релиз и можно будет использовать новшество полноценно.


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





Сообщение: 316
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 30.08.15 09:15. Заголовок: Для экономии ресурсо..


Для экономии ресурсов компьютера расчеты некоторых индикаторов делаю на открытии бара.

if (LastBar == Time[0]) return(0);

int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if (limit>ShowBars)
limit=ShowBars;
if (LastBarDay!=iTime(NULL,PERIOD_D1,0))
{
ObDeleteObjectsByPrefix(PREFIX);
limit=ShowBars;
}
int i;
for (i = limit-1; i >= 0; i--)

Однако столкнулся с такой проблемой: После включения компа на следующий день, индикатор отрисовывается не верно. Как запрограммировать, чтобы при включении компа индикатор пересчитывал всю глубину истории, как при первом запуске.
Прием типа
if (LastBarDay!=iTime(NULL,PERIOD_D1,0))
{
ObDeleteObjectsByPrefix(PREFIX);
limit=ShowBars;
}
Не помогает...



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




Сообщение: 1934
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 30.08.15 10:17. Заголовок: Sergey пишет: Однак..


Sergey пишет:

 цитата:
Однако столкнулся с такой проблемой: После включения компа на следующий день, индикатор
отрисовывается не верно. Как запрограммировать, чтобы при включении компа индикатор пересчитывал
всю глубину истории, как при первом запуске.



В этой ветке народ обсуждал вопросы подкачки истории при перезагрузке терминала: http://forum.mql4.com/ru/40689 и
ее влияние на работу индикаторов.

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





Сообщение: 317
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 30.08.15 10:42. Заголовок: Genry пишет: В этой..


Genry пишет:

 цитата:
В этой ветке народ обсуждал вопросы подкачки истории при перезагрузке терминала


Просмотрел. Дело не в подкачке истории, а в новой инициации индикатора при перезагрузке терминала.

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




Сообщение: 1936
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 30.08.15 19:38. Заголовок: Sergey пишет: Дело ..


Sergey пишет:

 цитата:
Дело не в подкачке истории, а в новой инициации индикатора при перезагрузке терминала.


Обсуждение такой проблемы видел для мт5 здесь: https://www.mql5.com/ru/forum/694
Позже попалось еще здесь по мт4: https://www.mql5.com/ru/forum/34432

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





Сообщение: 318
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 31.08.15 10:01. Заголовок: Genry пишет: Обсужд..


Genry пишет:

 цитата:
Обсуждение такой проблемы видел для мт5 здесь: https://www.mql5.com/ru/forum/694
Позже попалось еще здесь по мт4: https://www.mql5.com/ru/forum/34432



Спасибо Генри, все оказалось гораздо проще...

int Start()
{
if (LastBar != Time[0])
{
Тело индикатора
LastBar = Time[0];
}
return(0);
}

Но я в замешательстве, так как не могу понять, чем это отличается от

int Start()
{
if (LastBar == Time[0]) return(0);

Тело индикатора
LastBar = Time[0];
return(0);
}

при перезапуске терминала.

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




Сообщение: 1940
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 31.08.15 11:00. Заголовок: Sergey пишет: LastB..


Sergey пишет:

 цитата:
LastBar == Time[0];



Просто у тебя уже усталость от редактирования и "глаз замылился".

надо присвоить LastBar = Time[0] , а здесь вместо присвоения - сравнение.

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





Сообщение: 319
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 31.08.15 11:09. Заголовок: Genry пишет: надо п..


Genry пишет:

 цитата:
надо присвоить LastBar = Time[0] , а здесь вместо присвоения - сравнение.



Это я просто копировал верхнюю строку и ошибся. Сейчас исправил.. Вопрос остался..

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




Сообщение: 1941
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 31.08.15 11:28. Заголовок: Sergey пишет: .. Во..


Sergey пишет:

 цитата:
.. Вопрос остался..


Тогда причина может быть в части "Тело индикатора"

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





Сообщение: 1740
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 31.08.15 13:01. Заголовок: Sergey пишет: Для э..


Sergey пишет:

 цитата:
Для экономии ресурсов компьютера расчеты некоторых индикаторов делаю на открытии бара.


В индикаторах нет такой необходимости - делать проверку на открытие нового бара. Для этого у него есть IndicatorCounted() или prev_total и rates_total в новой версии MQL4. На основании этих данных необходимо определить, с какого бара следует обновить значения индикатора.
В моих индикаторах обычно присутствует специальная функция:

 цитата:
int GetRecalcIndex(int &total, const int ratesTotal, const int prevCalculated)
{
total = ratesTotal - /*здесь период индикатора или то, что его заменяет*/ - 2;

if (i_indBarsCount > 0 && i_indBarsCount < total)
total = MathMin(i_indBarsCount, total);

if (prevCalculated < ratesTotal - 1)
{
BuffersInitializeAll();
return total;
}

return (MathMin(ratesTotal - prevCalculated, total));
}



А после расчета индекса бара просто производится новый расчет значений индикатора на измененных барах:

 цитата:
for (int i = limit; i >= 0; i--)
{
// Расчет
}




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





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


Scriptong пишет:

 цитата:
В индикаторах нет такой необходимости - делать проверку на открытие нового бара.


Но мне нужно, чтобы расчет на нулевом баре был произведен только на его открытии. А в случае
return (MathMin(ratesTotal - prevCalculated, total));
как я понял, делается постоянный (по тиковый) расчет значений нулевого бара, но сам код возьму на вооружение. Спасибо.

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





Сообщение: 1752
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 03.09.15 18:41. Заголовок: Sergey пишет: Но мн..


Sergey пишет:

 цитата:
Но мне нужно, чтобы расчет на нулевом баре был произведен только на его открытии. А в случае
return (MathMin(ratesTotal - prevCalculated, total));
как я понял, делается постоянный (по тиковый) расчет значений нулевого бара, но сам код возьму на вооружение. Спасибо.


Нет проблем:

 цитата:

for (int i = limit; i > 0; i--)
buffer[i - 1] = расчет



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





Сообщение: 322
Зарегистрирован: 05.03.13
Репутация: 1
ссылка на сообщение  Отправлено: 01.09.15 18:46. Заголовок: Кажется наконец наше..


Кажется наконец нашел в чем проблема. Индикатор установлен на 12 валютных парах. Имя объекта string name = PREFIX + IntegerToString(leftTime);
Однако бывает совпадение по времени разных графиков. Предполагаю, что при загрузке терминала обновление данных различных пар идет не синхронно по барам. В результате объекты с одинаковыми именами перерисовываются.
Решение - ввел PREFIX, как настраиваемый параметр. Но это не совсем удобно. Можно привязать к символу, но трейдер может открыть несколько одинаковых графиков.
Есть ли варианты?

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




Сообщение: 1946
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 01.09.15 23:00. Заголовок: Sergey пишет: Можно..


Sergey пишет:

 цитата:
Можно привязать к символу, но трейдер может открыть несколько одинаковых графиков. Есть ли варианты?


У каждого графика, даже если они одинаковые, есть его уникальный идентификатор, его возвращает функция ChartID.
//--- get handle of the current chart
long handle=ChartID();


С уважением! Спасибо: 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 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет