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



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

СообщениеДобавлено: Вс Июл 15, 2012 1:32 pm Ответить с цитатой Вернуться к началу

Уважаемые форумчане, возможно ли в Ами оптимизировать процесс расчета формул? Поясню о чем идет речь.

Допустим мы имеем базу данных размером в 100.000 значений и формулу, в которой считаем МА. Судя по всему, при каждом изменении цены участвующих в расчете бумаг, либо при очередном запуске Scan/Explore происходит пересчет 100.000 значений МА, что разумеется расходует аппаратные ресурсы и требует определенного времени. Конечно, если формула предполагает расчет только одного МА, то эти факторы не критичны, но если в ней будет считаться с десяток стратегий, каждая из которых использует синтетические цены третьего и более порядка да еще и с несколькими индикаторами, то это уже представляет проблему.

Вопрос в следующем, можно ли каким то образом на уровне Ами (без вывода в текстовый файл) использовать полученные в предудущей итерации значения всех индикаторов, и рассчитывать только вновь прибывшие или изменившиеся значения?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Июл 15, 2012 2:32 pm Ответить с цитатой Вернуться к началу

Ами не расчитывает все значения. Он это делает только когда необходимо.
Обычно, например в индикаторе, он расчитывает только видимую на графике часть и немного за пределами. Это называется квик АФЛ.

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



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

СообщениеДобавлено: Пн Июл 16, 2012 12:27 pm Ответить с цитатой Вернуться к началу

Олег, спасибо за ответ! А как Ами поступает, когда приходит новый бар, он просто смещает прошлые данные или все таки рассчитывает их по новой?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 16, 2012 12:44 pm Ответить с цитатой Вернуться к началу

Код AFL каждый проход считает все по новому не зависимо от того, пришел ли новый бар. Но, как правило, он заново расчитает все быстрее, чем если прочитает заранее расчитанные данные из другого источника.
Хотя, в принципе, если есть такая необходимость, можно запоминать расчитанный массив в статическую переменную (StaticVarSet()) и читать данные оттуда не пересчитывая. Это не трудно.

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



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

СообщениеДобавлено: Пн Июл 16, 2012 4:37 pm Ответить с цитатой Вернуться к началу

Спасибо, попробовал реализовать, но видимо допускаю ошибку при обращении к плагину AS_File.

Код:
FirstStart=AS_READ_PARAM("test","Start","FirstStart");
PastBarCount=AS_READ_PARAM("test","Count","PastBarCount");
if(FirstStart==0) for(i=0;i<BarCount;i++) Average[i]=1000;
else
{
for(i=0;i<PastBarCount;i++) Average=StaticVarGet("PastAverage");
for(i=PastBarCount;i<BarCount;i++) Average[i]=2000;
}

StaticVarSet("PastAverage",Average);
AS_WRITE_PARAM("test","Start","FirstStart",1);
AS_WRITE_PARAM("test","Count","PastBarCount",round(i/2));

Plot(Average,"Average",colorBlack,styleLine);


Смысл такой, при первом запуске все Average должны стать равны 1000, после чего в test.ini пишется номер бара с которого в следующем проходе надо будет пересчитывать значения. После повторного прогона первая половина значение должна быть равна 1000, а вторая 2000. У меня же после первого запуска значения сразу разбиваются. Но если залочить строку
Код:
AS_WRITE_PARAM("test","Start","FirstStart",1);
то первый запуск проходит правильно. Подскажите, пожалуйста где я допустил ошибку?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июл 16, 2012 6:49 pm Ответить с цитатой Вернуться к началу

Код:

SetBarsRequired(sbrAll, sbrAll);

FirstStart = AS_READ_PARAM("test","Start","FirstStart");
PastBarCount = AS_READ_PARAM("test","Count","PastBarCount");

if(FirstStart == 0)
{
  for(i = 0; i < BarCount; i++)
    Average[i] = 1000;
  AS_WRITE_PARAM("test", "Count", "PastBarCount", round((BarCount - 1)/2));
}
else
{
  Average = StaticVarGet("PastAverage");
  for(i = PastBarCount; i < BarCount; i++)
    Average[i] = 2000;
}

StaticVarSet("PastAverage", Average);
AS_WRITE_PARAM("test","Start", "FirstStart", 1);

Plot(Average, "Average", colorBlack, styleLine);

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



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

СообщениеДобавлено: Пн Июл 16, 2012 8:33 pm Ответить с цитатой Вернуться к началу

Спасибо большое за помощь! Оказалось, что предыдущий код тоже работает, просто он не срабатывает при нажатии Apply Indicator
Посмотреть профиль Отправить личное сообщение
laplas



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

СообщениеДобавлено: Пт Авг 10, 2012 9:52 pm Ответить с цитатой Вернуться к началу

Олег, подскажите пожалуйста, правильно ли я понимаю, что когда мы задаем в Range n_last_quotations=1 и жмем Explore, то предыдущие значения переменных не пересчитываются (остаются прежними)? И второй вопрос, если по какой-то причине при экспорте котировок вместо одного бара придут несколько, что будет делать Ами при таких настройках, он пересчитает только последний или все таки все пришедшие бары?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

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

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



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

СообщениеДобавлено: Вс Авг 12, 2012 7:44 am Ответить с цитатой Вернуться к началу

Спасибо, это в корне меняет дело.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen