Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Реалтайм - расчет индикатора не по каждому тику данных Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
aztec



Зарегистрирован: 08.07.2010
Сообщения: 24

СообщениеДобавлено: Вс Сен 19, 2010 9:53 pm Ответить с цитатой Вернуться к началу

Есть ресурсоемкие индикаторы (маркетпрофиль и др) которые грузят систему и при этом нет необходимости считать их на каждом тике поступающих данных. Есть мысль не считать их постоянно.
Какой код можно поставить для их расчета 1 раз на баре, неважно тайм бар или volumeBar мы отображаем. Т.е. на текущем строящемся баре индикатора нет, построен последний раз на предпоследнем, уже сформированном баре, при закрытии текущего - считается/строится в момент смены и т.д.
С этими BarIndex() и barcount что то запутался, особенно при реалтайме Confused
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Сен 20, 2010 10:17 pm Ответить с цитатой Вернуться к началу

Это не просто.
Заставить код выполняться так редко невозможно. Можно сделать так, чтобы он выполнялся не весь. Т.е. один раз весь, а потом только часть.
Типа так
Код:

setbarsrequired( 500000, 500000 );
// Заставляем считать все бары на истории. Это важно при использовании barcount

Ну и дальше типа так
Код:

if (StrToNum( ClipboardGet() )  == barcount)
{
.... // код функции
ClipboardSet(NumToStr(barcount, format = 1.0))
}

Только смотри внимательно. Я не проверял...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
aztec



Зарегистрирован: 08.07.2010
Сообщения: 24

СообщениеДобавлено: Вт Сен 21, 2010 12:37 am Ответить с цитатой Вернуться к началу

000 писал(а):
Это не просто....


Спасибо, действительно замороченно выходит.
По коду есть вопрос - а откуда в буфере возьмется нужное нам значение для входа внутрь if при первой проверке ...
Думал уже и минуты сравнивать (пусть бы считал 1раз\мин) - но до меня дошло )) - что непонятно как строить сам индикатор в то время пока код обходится, тогда ведь Plot надо выносить за if - а откуда брать данные для построения... в Си нешарю, понять бы как это в Ninja реализованно, там почти в каждом индикаторе опция "считать по тикам или по close бара" .
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Сен 21, 2010 7:51 am Ответить с цитатой Вернуться к началу

Ну вот. Ошибся я. Надо не
if (StrToNum( ClipboardGet() ) == barcount)
а наоборот не равно. Тогда при появлении нового бара содержимое клипборда не будет равно номеру последнего бара и функция сработает. При этом в клипборд будет занесен последний номер бара и до появления нового бара работать не будет.
Код:

if (StrToNum( ClipboardGet() )  != barcount)

А Plot надо попробовать тоже внутрь запихать. Только вот не знаю будет при этом картинка пропадать или нет....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
aztec



Зарегистрирован: 08.07.2010
Сообщения: 24

СообщениеДобавлено: Вт Сен 21, 2010 8:47 pm Ответить с цитатой Вернуться к началу

000 писал(а):

А Plot надо попробовать тоже внутрь запихать. Только вот не знаю будет при этом картинка пропадать или нет....

Пропадает, откуда ей взяться то.
При этом если вынести за if - ошибка - не определена переменная что логично... .
вообщем буду думать. Спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Сен 21, 2010 9:13 pm Ответить с цитатой Вернуться к началу

Можно сохранить массив в статическую переменную (если версия Ами 5.30 или выше) и если if (StrToNum( ClipboardGet() ) != barcount), то считаем, выводим массив (Plot) и сохраняем его в StaticVarSet, в противном случае выводим сразу уже рассчитанный в прошлый раз массив StaticVarGet.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen