Максим (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
 
Цитата
Фёдор Сухов написал:
В чём конфликт был?
Скрипт авторговли зависал или вызывал зацикливание, а может быть рекурсия функции была бесконечная?
Похоже на ошибку в работе функции getCandlesByIndex. Чтобы проверить надо:
1. Передать разработчикам код скрипта автоторговли, т.к. без него баг у них не воспроизведётся - у меня нет исходника и нет прав на передачу.
или
2. Попробовать воспроизвести баг написав упрощенный код автоторговли по имеющейся информации и, если будет воспроизводится, передать его им - не знаю пока что с этим делать...  :what:

Имеющаяся информация такая:
Скрытый текст
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
 
Цитата
Egor Zaytsev написал:
Добрый день.

Максим, вчера скрипты отработали весь день, падений замечено не было.
Можете прислать нам в таком случае Ваш архив рабочего места QUIK без ключей доступа и файла chm.

Большое спасибо за помощь - решение найдено!
Как выяснилось это был конфликт двух lua-скриптов. Первый - это индикатор "A", код которого выше, и второй - скрипт автоторговли, который у меня был запущен. Удалил второй и теперь всё работает как надо.

Цитата
Николай Камынин написал:
Вы на каждый тик читаете весь массив свечей с другого графика а это 3000 штук.
в результате большой тормоз.
Вот примерный код, как надо сделать (не отлаживал ошибки исправьте сами)

Спасибо, за отличные идеи!
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
 
Цитата
Николай Камынин написал:
почему бы просто не использовать
Функции O, H, L, C, V, T -
s_mike@rambler.ru выше правильно ответил.
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
 
Цитата
Egor Zaytsev написал:
Добрый день.

Желательно еще второй индикатор выложить.
Еще уточните, случайно dmp файл не формируется при закрытии QUIK?
Здравствуйте, Егор!

Спасибо за ответ. Dmp-файлы не создаются. Quik перестаёт отвечать на запросы пользователя, процесс info.exe не крашится.
Ниже последовательность действий для воспроизведения в Quik 7.0.4.10:

1. Создать график с инструментом USDRUB_TOM и таймфреймом M60
2. Добавить индикатор "Б":
Код
Settings={
Name="Indicator B",
line={{
Name="Indicator B",
Color=0x0000ff,
Type=1,
Width=1
}}}

function Init()
   return #Settings.line
end

function OnCalculate()
   return 68
end
3. Присвоить индикатору "Б" любой идентификатор
4. Создать новый график с инструментом USDRUB_TOM и таймфреймом D
5. Добавить индикатор "А" на новый график:
Код
Settings={
Name="Indicator A",
ID="ID",
line={{
Name="Indicator A",
Color=0xff0000,
Type=1,
Width=1
}}}

function Init()
   return #Settings.line
end

local t={}
local n=0
local l=0
local value=0

function OnCalculate(index)
   if index==1 then return end            --проверяем если первая свечка, расcчёт не ведется
   if getNumCandles(Settings.ID)==0 then         --Settings.ID содержит название идентификатора, которое задаёт пользователь
      return                  --проверяем если индикатор "Б" не содержит свечек, рассчёт не ведется
   else
      t,n,l=getCandlesByIndex(Settings.ID,0,index-1,1)
      if t[0].doesExist==1 then         --проверяем если свечки нет, рассчет не ведется
         if t[0].close~=1e10 then      --проверяем если новое значение свечки не получено, рассчет не ведется
            if t[0].close~=value then value=t[0].close end
            t[0].close=1e10
            return value
         end
      end
   end
end
6. Заменить значение параметра ID в свойствах индикатора "A" на идентификатор из шага 3

В результате на первом графике будет красная линия на уровне 68, на втором - синяя на уровне 68. Через промежуток времени от 20 минут до 4 часов Quik 7.0.4.10 зависнет. Всё это время должна идти торговая сессия (в неторговое время не воспроизводится) и Quik должен быть раскрыт (на переднем плане или под другими окнами). Баг можно обнаружить если Quik перестанет отвечать на любые действия пользователя.
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
 
Здравствуйте, уважаемые разработчики!

Я использую простой самописный индикатор "A" для отрисовки линии на графике. Значения для отрисовки этой линии индикатор берет из другого индикатора "Б" по его идентификатору. Оба индикатора расположены на разных графиках. Эти графики имеют разный таймфрейм и расположены в разных окнах одной вкладки.

Первый индикатор "A" копирует значения второго индикатора. Для отрисовки текущей свечки индикатор "A" берёт значение предыдущей свечки индикатора "Б".

В торговое время после запуска индикатора "A" может пройти от 20 минут до 4 часов и Quik стабильно зависает (в заголовке Quik появляется "программа не отвечает"). Приходится завершать процесс info.exe (не отвечает более 30 минут), размер потребляемой опер. памяти не увеличивается от нормы. Зависание происходит только когда включен индикатор "A". Баг проявляется, если в качестве индикатора "Б" использовать любой индикатор (например, встроенный индикатор простой скользящей средней).

Код индикатора "А" с комментариями:
Код
local t={}
local n=0
local l=0
local value=0

function OnCalculate(index)
   if index==1 then return end            --проверяем если первая свечка, расcчёт не ведется
   if getNumCandles(Settings.ID)==0 then         --Settings.ID содержит название идентификатора, которое задаёт пользователь
      return                  --проверяем если индикатор "Б" не содержит свечек, рассчёт не ведется
   else
      t,n,l=getCandlesByIndex(Settings.ID,0,index-1,1)
      if t[0].doesExist==1 then         --проверяем если свечки нет, рассчет не ведется
         if t[0].close~=1e10 then      --проверяем если новое значение свечки не получено, рассчет не ведется
            if t[0].close~=value then value=t[0].close end
            t[0].close=1e10
            return value
         end
      end
   end
end
Помогите определить почему после запуска индикатор "A" может работать от 20 минут до 4 часов в торговую сессию, а потом Quik зависает. Никаких ошибок в окне сообщений нет. Торгуемый инструмент USDRUB_TOM.

Версия Quik: 7.0.4.10 (англ. интерфейс)
Версия OS: Windows 7 SP1 (англ. интерфейс)
Страницы: 1
Наверх