Пятница, 29.03.2024, 10:57
Игрушки от Vinin
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Разное » Общие вопросы » Помогите исправить индикатор
Помогите исправить индикатор
OlegVДата: Четверг, 13.11.2008, 18:18 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
Добрый день!
Я - непрофессиональный программист, только учусь. Попробовал на индикатор эквити портфеля добавить полосы Боллинджера. И вот что получилось. Если набросить индюк, то вроде все полосы смотрятся сглажено. Если через некоторое время просто инициализировать его, то он принимает немного другой вид. Меня интересует, можно ли переделать код так, чтобы вид у линий оставался таким же сглаженным без повторного вызова индикатора.
1 рисунок - это вид индикатора по истечении некоторого времени после того, как его набросили на график. 2 рисунок - вид если просто вызвать свойства индикатора.
Прикрепления: 3384523.jpg (63.5 Kb) · 5522647.jpg (55.4 Kb) · i-Equity_Bands.mq4 (6.5 Kb)


Сообщение отредактировал OlegV - Четверг, 13.11.2008, 18:20
 
vininДата: Четверг, 13.11.2008, 18:51 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Давай рассмотрим проблемы возникающие при разработке мультивалютного индикатора. Я не юуду ссылаться не на один код. И приводить не буду.

В любом индикаторе должен быть двойной контроль истории.

Контроль по ошибке "ERR_HISTORY_WILL_UPDATED 4066 Запрошенные исторические данные в состоянии обновления", говорящей о том что идет подгрузка истории (пока она не закончится о корректной работе индикатора говорить не приходится.

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

И есть еще одна особенность, но касается она младших таймфреймов (минутки, пятиминутки и даже 15-минутки). Есть периоды времени когда не поступают тики, а значит нет сформированных баров. И для корректной работы индикатора необходимо делать синхронизацию по времени. Обычно я ищу бар на другом инструменте по времени обрабатываемого бара на текущем инструменте, проверяю на корректность.

Но из-за недостающих баров один и тот же индикатор на разных инструментах будет работать по разному. И поэтому надо подбирать инструменты с более полной историей.

И еще одно замечание. Количество баров на истории не совпадает. И поэтому надо для первой корректной отрисовки искать самый старый бар, но по времени он должен быть самым молодым из этих баров.

Для последующей отработки можно цикл считать стандартными методами.

Но контроль истории должен быть всегда. От него нельзя отказываться.

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

Конечно, если по всем нужным иснтрументам открыты графики с нужным таймфреймом, то такая ошибка не возникает.

 
GrayMan77Дата: Четверг, 13.11.2008, 19:00 | Сообщение # 3
Рядовой
Группа: Группа 1
Сообщений: 16
Репутация: 1
Статус: Offline
И еще: в строке

v=MarketInfo(osy[j], MODE_TICKVALUE);

запрашивается цена пункта по парам. MarketInfo() очень интересно ее выдает: всегда выдает ПОСЛЕДНЮЮ, т.е. текущую цену пункта. С 0-го бара. Поэтому эквити на истории рассчитывается с ошибкой. Причем еще и изменяется (перерисовывается), поскольку текущая цена пункта меняется. Цену пункта, если она нужна, на истории надо рассчитывать искусственно. А вообще можно обойтись и без нее: посмотрите, как это сделано в моем индикаторе, который я подправлял по Вашей просьбе (i-Equity_GM_v61e.mq4, где-то в ветке по Т101 выложен).

Сообщение отредактировал GrayMan77 - Четверг, 13.11.2008, 19:05
 
OlegVДата: Четверг, 13.11.2008, 19:11 | Сообщение # 4
Лейтенант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
Vinin по ходу тут дело скорее всего не в корректности данных, так как меняются именно последние значения индикатора. Я ставил индикатор - он рисовал красивые сглаженные линии. Потом уже на приходящих тиках добавлялись новые значения, если дать поработать индикатору несколько баров, а потом его инициализировать или открыть его в другом окне, то именно последние несколько значений и будут различаться. Истории ему хватает, так как все пары, которые нужны для его построения открыты. Пробовал на разных тайм-фреймах, от минуток - до часовиков. Контроль этой ошибки я добавлю, я про нее помню smile . Думаю ошибка в другом.

Добавлено (13.11.2008, 19:11)
---------------------------------------------
GrayMan77 спасибо большое, я это уже заметил. Хочу вместо суммы в долларах попробовать использовать количество пипсов или v присваивать значение в начале дня и менять его раз в сутки. Конечно, появятся погрешность, но индюк по крайней мере не будет перерисовываться.

 
vininДата: Четверг, 13.11.2008, 19:11 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Quote (OlegV)
Vinin по ходу тут дело скорее всего не в корректности данных, так как меняются именно последние значения индикатора. Я ставил индикатор - он рисовал красивые сглаженные линии. Потом уже на приходящих тиках добавлялись новые значения, если дать поработать индикатору несколько баров, а потом его инициализировать или открыть его в другом окне, то именно последние несколько значений и будут различаться. Истории ему хватает, так как все пары, которые нужны для его построения открыты. Пробовал на разных тайм-фреймах, от минуток - до часовиков. Контроль этой ошибки я добавлю, я про нее помню . Думаю ошибка в другом.

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

К скриптам это не относится. ВЫявлена одна прискорбная ошибка. Не совсем корректно МТ выделяет память для работы. И если нет открытых инструментов на нужных таймфреймах, то мы получим ошибку инициализации массива, хотя скрипт и формирует массивы, а просто обращается к старым данным из истории. Разработчикам об этой ошибке еще не сообщалось. Нашел ошибку Математ
У меня она подтвердилась.

 
OlegVДата: Четверг, 13.11.2008, 19:14 | Сообщение # 6
Лейтенант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
Все инструменты открыты постоянно, на тех таймфреймах, на которых используется индикатор.
 
GrayMan77Дата: Четверг, 13.11.2008, 19:16 | Сообщение # 7
Рядовой
Группа: Группа 1
Сообщений: 16
Репутация: 1
Статус: Offline
Quote (OlegV)
Хочу вместо суммы в долларах попробовать использовать количество пипсов или v присваивать значение в начале дня и менять его раз в сутки.

Да возьмите просто готовую функцию из моего индюка. Там все правильно считается. И синхронизация баров по времени (о чем писал Vinin) есть.

 
OlegVДата: Четверг, 13.11.2008, 19:18 | Сообщение # 8
Лейтенант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
Тоже мысль. Но сначала хотелось бы найти ошибку именно в перерисовке последних значений.

P.S. Я предполагаю использовать его для определения флета на старших тайм-фреймах. Вот например сегодня хорошо видно, что и USD и JPY сегодня стоят на месте, а значит можно по-маленькой пипсовать портфелем.

Прикрепления: 3400964.jpg (114.5 Kb)


Сообщение отредактировал OlegV - Четверг, 13.11.2008, 19:26
 
GrayMan77Дата: Четверг, 13.11.2008, 19:50 | Сообщение # 9
Рядовой
Группа: Группа 1
Сообщений: 16
Репутация: 1
Статус: Offline
Вот. Посмотрите. Сделал то же самое на основе своего индикатора.
Вроде бы, не перерисовывается при переинициализации. Но долго не наблюдал...
Прикрепления: v61e_bands.zip (2.4 Kb)
 
OlegVДата: Четверг, 13.11.2008, 20:07 | Сообщение # 10
Лейтенант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
Спасибо, завтра проверю у меня уже 10 вечера. По коду вроде тоже самое. Неужели вся перерисовка именно из-за того, что неправильно считалось само эквити.

P.S. Все работает отлично.

Сообщение отредактировал OlegV - Пятница, 14.11.2008, 06:05
 
Форум » Разное » Общие вопросы » Помогите исправить индикатор
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024Бесплатный конструктор сайтов - uCoz