Автор |
Сообщение |
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Только сейчас обратил внимание, что в последней версии в статусной строке отображается порядковый номер текущего бара от начала базы (не взирая на включённый QuickAFL). В предыдущих версиях этого, вроде бы, не было. А из кода получить этот номер как-нибудь можно, не отключая QuickAFL? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Как то игрался с номерами баров. Обнаружил такую штуку: в графическом окне бару №1 соответствует первый отображаемый бар слева. А те, которые обсчитывает QuickAFL они соответсвуют "минусовым" элементам массива, к которым обратится нельзя из кода.
При бектесте не уверен, но подозреваю что первым элементом является первый бар на дату бектеста.
Ко всем номерам обращался из цикла. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Честно говоря, мало что понял. Первый отображаемый бар в окне имеет индекс 30, если на графике нет периодических индикаторов. Т.е. всё, что видит АФЛ - это бары на экране плюс 30 баров слева. В тестере QuickAFL не рабоает, там видна вся база, но я сейчас не про тестер говорю. В статусной строке абсолютный номер бара в базе в любом случае отображается, т.е. Ами знает, в каком месте базы мы сейчас находимся. Вопрос в том, как то же самое узнать из АФЛ, не отключая QuikAFL. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Хм, можно попытаться запрос в техподдержку отправить, самому интересно
ADD. Пардон за введение в заблуждение. Действительно сейчас проверил - первый видимый бар имеет индекс, равный числу бару, заглядываемому назад КвикАфлом. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
spitfire писал(а): |
Хм, можно попытаться запрос в техподдержку отправить, самому интересно |
Отправь, раз интересно. Если нельзя из АФЛ, может быть, как-то можно из АДК получить...
Цитата: |
ADD. Пардон за введение в заблуждение. Действительно сейчас проверил - первый видимый бар имеет индекс, равный числу бару, заглядываемому назад КвикАфлом. |
Меня в заблуждение ввести трудно. )) |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем нужен этот номер? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
000 писал(а): |
А зачем нужен этот номер? |
Да была у меня где-то с полгода назад мысль оптимизировать расчёт тяжёлого кода по аналогии с Метатрейдером - он при размещении индикатора на графике один раз рассчитывает его на всей истории, а потом на каждом тике пересчитывает только последний бар. Вот я и хотел создать в плагине массив размером с базу, при первом запуске индикатора отключить QuickAFL, рассчитать значения кода на всей истории, сохранить в созданном массиве, затем вновь включить QuickAFL и в дальнейшем рассчитывать код только на новых барах, которые приходят в реалтайме, а значения на уже посчитанных барах брать из сохранённого в памяти массива. Это здорово уменьшило бы тормоза при прокрутке графика, вернее, убрало бы их полностью, как и нагрузку на процессор. Но когда я попытался это сделать, оказалось, что в Ами такое невозможно из-за QuickAFL. В принципе невозможно. Поскольку невозможно привязать номера ячеек этого массива к текущим номерам баров в АФЛ - они же постоянно меняются при перемотке истории и при поступлении новых баров. А вот если бы был доступ к абсолютным номерам баров в базе, проблема привязки была бы решена. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Тогда, кроме того, чтобы знать длину массива надо еще иметь возможность полностью передать этот массив в плагин (например массивы цен).... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
000 писал(а): |
Хм. Тогда, кроме того, чтобы знать длину массива надо еще иметь возможность полностью передать этот массив в плагин (например массивы цен).... |
Длина создаваемого в плагине массива - максимальный размер базы, который в DataBase Settings установлен. А для того, чтобы один раз заполнить массив, при первом запуске отключается QuickAFL. Вот так схематично:
Код: |
// первый прогон - инициализация
if(IsNull(StaticVarGet("BarsCounted")))
{
SetBarsRequired(sbrAll, sbrAll); // отключили QuickAFL
x = ... ; // тут считаем код по всей базе, сохраняем в массиве
StaticVarSet("BarsCounted", BarCount-1); // запомнили номер последнего посчитанного бара
SetBarsRequired(-1, -1); // включили QuickAFL
}
// далее считаем только на непосчитанных барах
for(i = 0; i < BarCount; i++)
{
if(абсолютный номер бара в базе < StaticVarGet("BarsCounted"))
x[i] = значение ячейки массива с номером, равным абсолютному номеру бара;
else
{
x[i] = ...; //считаем
StaticVarSet("BarsCounted", абсолютный номер текущего бара);
}
} |
|
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
000 писал(а): |
А зачем нужен этот номер? |
А мне нужен был номер для рассчета хитрого алгоритма ММ, который забросил тоже из-за проблем с получением реального номера бара в базе.. Может после ответа саппорта что-то прояснится. Напишу им в понедельник с утреца, сейчас они все равно не работают. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Mechanic писал(а): |
000 писал(а): |
Хм. Тогда, кроме того, чтобы знать длину массива надо еще иметь возможность полностью передать этот массив в плагин (например массивы цен).... |
Длина создаваемого в плагине массива - максимальный размер базы, который в DataBase Settings установлен. А для того, чтобы один раз заполнить массив, при первом запуске отключается QuickAFL. Вот так схематично:
Код: |
// первый прогон - инициализация
if(IsNull(StaticVarGet("BarsCounted")))
{
SetBarsRequired(sbrAll, sbrAll); // отключили QuickAFL
x = ... ; // тут считаем код по всей базе, сохраняем в массиве
StaticVarSet("BarsCounted", BarCount-1); // запомнили номер последнего посчитанного бара
SetBarsRequired(-1, -1); // включили QuickAFL
}
// далее считаем только на непосчитанных барах
for(i = 0; i < BarCount; i++)
{
if(абсолютный номер бара в базе < StaticVarGet("BarsCounted"))
x[i] = значение ячейки массива с номером, равным абсолютному номеру бара;
else
{
x[i] = ...; //считаем
StaticVarSet("BarsCounted", абсолютный номер текущего бара);
}
} |
|
Так. И зачем в этой схеме изначально нужна длинна базы?
Отключили квикАФЛ, узнали длинну базы, посчитали, включили квикАФЛ... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Ну, отключив КвикАФЛ, мы получим не максимальную длину базы, а количество баров в ней в данный момент, т.е. BarCount. Массив-то, очевидно, длиннее должен быть, чтобы при поступлении в базу каждого нового бара не создавать новый. Хотя, можно, конечно при создании массива просто прибавить к BarCount какое-то значение, чтобы на пару-тройку дней беспрерывной работы хватило. Олег, да потребная длина массива - это не проблема совсем. Проблема в его синхронизации с индексами баров в АФЛ.
Кстати, чтобы узнать общее количество баров в базе, КвикАФЛ отключать не обязательно. Status("quickafllastdatabar"). |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. С синхронизацией трудности... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
spitfire писал(а): |
Напишу им в понедельник с утреца, сейчас они все равно не работают. |
Не писал ещё? Нет вестей? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Написал с утра, пока молчат как партизаны.. Тоже наверное думают, а зачем мне это?? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|