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



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

СообщениеДобавлено: Сб Янв 12, 2013 6:06 pm Ответить с цитатой Вернуться к началу

Только сейчас обратил внимание, что в последней версии в статусной строке отображается порядковый номер текущего бара от начала базы (не взирая на включённый QuickAFL). В предыдущих версиях этого, вроде бы, не было. А из кода получить этот номер как-нибудь можно, не отключая QuickAFL?
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Сб Янв 12, 2013 7:28 pm Ответить с цитатой Вернуться к началу

Как то игрался с номерами баров. Обнаружил такую штуку: в графическом окне бару №1 соответствует первый отображаемый бар слева. А те, которые обсчитывает QuickAFL они соответсвуют "минусовым" элементам массива, к которым обратится нельзя из кода.
При бектесте не уверен, но подозреваю что первым элементом является первый бар на дату бектеста.
Ко всем номерам обращался из цикла.
Посмотреть профиль Отправить личное сообщение ICQ Number
Mechanic



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

СообщениеДобавлено: Сб Янв 12, 2013 7:53 pm Ответить с цитатой Вернуться к началу

Честно говоря, мало что понял. Первый отображаемый бар в окне имеет индекс 30, если на графике нет периодических индикаторов. Т.е. всё, что видит АФЛ - это бары на экране плюс 30 баров слева. В тестере QuickAFL не рабоает, там видна вся база, но я сейчас не про тестер говорю. В статусной строке абсолютный номер бара в базе в любом случае отображается, т.е. Ами знает, в каком месте базы мы сейчас находимся. Вопрос в том, как то же самое узнать из АФЛ, не отключая QuikAFL.
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

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

Хм, можно попытаться запрос в техподдержку отправить, самому интересно Smile

ADD. Пардон за введение в заблуждение. Действительно сейчас проверил - первый видимый бар имеет индекс, равный числу бару, заглядываемому назад КвикАфлом.
Посмотреть профиль Отправить личное сообщение ICQ Number
Mechanic



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

СообщениеДобавлено: Сб Янв 12, 2013 8:39 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Хм, можно попытаться запрос в техподдержку отправить, самому интересно Smile


Отправь, раз интересно. Smile Если нельзя из АФЛ, может быть, как-то можно из АДК получить...

Цитата:
ADD. Пардон за введение в заблуждение. Действительно сейчас проверил - первый видимый бар имеет индекс, равный числу бару, заглядываемому назад КвикАфлом.


Меня в заблуждение ввести трудно. ))
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Сб Янв 12, 2013 9:50 pm Ответить с цитатой Вернуться к началу

А зачем нужен этот номер?

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



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

СообщениеДобавлено: Сб Янв 12, 2013 10:32 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А зачем нужен этот номер?


Да была у меня где-то с полгода назад мысль оптимизировать расчёт тяжёлого кода по аналогии с Метатрейдером - он при размещении индикатора на графике один раз рассчитывает его на всей истории, а потом на каждом тике пересчитывает только последний бар. Вот я и хотел создать в плагине массив размером с базу, при первом запуске индикатора отключить QuickAFL, рассчитать значения кода на всей истории, сохранить в созданном массиве, затем вновь включить QuickAFL и в дальнейшем рассчитывать код только на новых барах, которые приходят в реалтайме, а значения на уже посчитанных барах брать из сохранённого в памяти массива. Это здорово уменьшило бы тормоза при прокрутке графика, вернее, убрало бы их полностью, как и нагрузку на процессор. Но когда я попытался это сделать, оказалось, что в Ами такое невозможно из-за QuickAFL. В принципе невозможно. Поскольку невозможно привязать номера ячеек этого массива к текущим номерам баров в АФЛ - они же постоянно меняются при перемотке истории и при поступлении новых баров. А вот если бы был доступ к абсолютным номерам баров в базе, проблема привязки была бы решена.
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Сб Янв 12, 2013 11:29 pm Ответить с цитатой Вернуться к началу

Хм. Тогда, кроме того, чтобы знать длину массива надо еще иметь возможность полностью передать этот массив в плагин (например массивы цен)....

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



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

СообщениеДобавлено: Сб Янв 12, 2013 11:45 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вс Янв 13, 2013 12:02 am Ответить с цитатой Вернуться к началу

000 писал(а):
А зачем нужен этот номер?

А мне нужен был номер для рассчета хитрого алгоритма ММ, который забросил тоже из-за проблем с получением реального номера бара в базе.. Может после ответа саппорта что-то прояснится. Напишу им в понедельник с утреца, сейчас они все равно не работают.
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Янв 13, 2013 12:50 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вс Янв 13, 2013 8:03 am Ответить с цитатой Вернуться к началу

Ну, отключив КвикАФЛ, мы получим не максимальную длину базы, а количество баров в ней в данный момент, т.е. BarCount. Массив-то, очевидно, длиннее должен быть, чтобы при поступлении в базу каждого нового бара не создавать новый. Хотя, можно, конечно при создании массива просто прибавить к BarCount какое-то значение, чтобы на пару-тройку дней беспрерывной работы хватило. Олег, да потребная длина массива - это не проблема совсем. Проблема в его синхронизации с индексами баров в АФЛ.

Кстати, чтобы узнать общее количество баров в базе, КвикАФЛ отключать не обязательно. Status("quickafllastdatabar").
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Янв 13, 2013 8:43 am Ответить с цитатой Вернуться к началу

Да. С синхронизацией трудности...

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



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

СообщениеДобавлено: Пн Янв 14, 2013 4:24 pm Ответить с цитатой Вернуться к началу

spitfire писал(а):
Напишу им в понедельник с утреца, сейчас они все равно не работают.

Не писал ещё? Нет вестей?
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Пн Янв 14, 2013 4:58 pm Ответить с цитатой Вернуться к началу

Написал с утра, пока молчат как партизаны.. Тоже наверное думают, а зачем мне это?? Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen