Автор |
Сообщение |
aztec
Зарегистрирован: 08.07.2010
Сообщения: 24
|
Есть ресурсоемкие индикаторы (маркетпрофиль и др) которые грузят систему и при этом нет необходимости считать их на каждом тике поступающих данных. Есть мысль не считать их постоянно.
Какой код можно поставить для их расчета 1 раз на баре, неважно тайм бар или volumeBar мы отображаем. Т.е. на текущем строящемся баре индикатора нет, построен последний раз на предпоследнем, уже сформированном баре, при закрытии текущего - считается/строится в момент смены и т.д.
С этими BarIndex() и barcount что то запутался, особенно при реалтайме |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Это не просто.
Заставить код выполняться так редко невозможно. Можно сделать так, чтобы он выполнялся не весь. Т.е. один раз весь, а потом только часть.
Типа так
Код: |
setbarsrequired( 500000, 500000 );
// Заставляем считать все бары на истории. Это важно при использовании barcount
|
Ну и дальше типа так
Код: |
if (StrToNum( ClipboardGet() ) == barcount)
{
.... // код функции
ClipboardSet(NumToStr(barcount, format = 1.0))
} |
Только смотри внимательно. Я не проверял... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
aztec
Зарегистрирован: 08.07.2010
Сообщения: 24
|
000 писал(а): |
Это не просто....
|
Спасибо, действительно замороченно выходит.
По коду есть вопрос - а откуда в буфере возьмется нужное нам значение для входа внутрь if при первой проверке ...
Думал уже и минуты сравнивать (пусть бы считал 1раз\мин) - но до меня дошло )) - что непонятно как строить сам индикатор в то время пока код обходится, тогда ведь Plot надо выносить за if - а откуда брать данные для построения... в Си нешарю, понять бы как это в Ninja реализованно, там почти в каждом индикаторе опция "считать по тикам или по close бара" . |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот. Ошибся я. Надо не
if (StrToNum( ClipboardGet() ) == barcount)
а наоборот не равно. Тогда при появлении нового бара содержимое клипборда не будет равно номеру последнего бара и функция сработает. При этом в клипборд будет занесен последний номер бара и до появления нового бара работать не будет.
Код: |
if (StrToNum( ClipboardGet() ) != barcount)
|
А Plot надо попробовать тоже внутрь запихать. Только вот не знаю будет при этом картинка пропадать или нет.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
aztec
Зарегистрирован: 08.07.2010
Сообщения: 24
|
000 писал(а): |
А Plot надо попробовать тоже внутрь запихать. Только вот не знаю будет при этом картинка пропадать или нет.... |
Пропадает, откуда ей взяться то.
При этом если вынести за if - ошибка - не определена переменная что логично... .
вообщем буду думать. Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно сохранить массив в статическую переменную (если версия Ами 5.30 или выше) и если if (StrToNum( ClipboardGet() ) != barcount), то считаем, выводим массив (Plot) и сохраняем его в StaticVarSet, в противном случае выводим сразу уже рассчитанный в прошлый раз массив StaticVarGet. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|