Расскажите пожалуйста как формируется тиковый график QuikJunior для срочного рынка, точнее используются ли для его формирования реальные торговые данные каких-то дней или он эмулируется вашим сервером самостоятельно?
Дело в том, что наблюдаю для инструмента SiU1 абсолютно разное поведение тикового графика для QuikJunior и рабочего терминала Quik брокера ВТБ. Настроенные параметры торговли по тиковому графику для SiU1 для QuikJunior не подходят для терминала Quik брокера ВТБ из-за разного поведения инструмента на тиках там и там. Для QuikJunior характерно хаотичное перепрыгивание отдельных сделок на тиковом графике для линий Болинджера от нижней линии к верхней и наоборот. Для реального тикового графика характерно движение змейкой в любую сторону, т.е. если пошло движение цены в одну сторону, то продолжается или разворачивается или замирает, но нет отдельных перепрыгиваний. Эти перепрыгивания дают также эффект после остановки торгов для клиринга, когда H или L первой свечи улетает в "даль". Все это не позволяет оптимизировать торговлю на QuikJunior, чтобы перенести ее в дальнейшем на рабочий quik.
В связи с этим еще вопрос, планируется ли адаптация QuikJunior под реальные торги (пусть дни будут совсем другие или сдвинуты графики на какую-то задержку от реальных торгов) или можно зарегистрировать такое пожелание?
Еще сейчас при перезагрузке quik, тиковый график стал загружаться заново, т.е. не с момента разрыва, с начала дня. Какие настройки надо включить в quik, чтобы он сохранялся с момента разрыва, а не загружался заново?
Добрый день! Подскажите пожалуйста. Написал робота, который генерирует заявки и ждет появления ее в таблице заявок, включая счетчик времени. На Juniore все работало, задержка составляла порядка 200-500 мс. Сегодня запустил на реальном счете. Открыт один тиковый график, по нему торговля. Через пару часов заметил, что робот задумывается и увидел, что задержка появления заявки в таблице заявки составляет 1,5 минуты. При этом тиковый график движется и время сервера не отстало от реального. Выключил робота и вручную отправил заявку, заявка появилась секунд через 40. Теперь не понимаю куда вообще копать и с чем разбираться..
Всем добрый день! В QUIK Junior замерли фьючерсы SiU1 и SiZ1 на времени 9:14, стакан не двигается, в таблице указано, что сессия открыта и торгуется. По акциям Сбербанка торги идут, стакан двигается. Это у меня что-то или у всех так?
s_mike@rambler.ru написал: И ещё нужно учитывать, что на тиковых интервалах все свечи имеют разное время. Непонятно, что вы хотите увидеть, вычитая значение Газпрома в один момент времени из значения Лукойла в другой момент.
не, я графически строил дельту АМА для текущего и предыдущего значения одного графика. для наглядности)
Nikolay написал: Необходимо еще учитывать то, что при старте терминала индикаторы не могут инициализироваться одновременно. Текущий запустился первый, а два других, с которых данные считываются - еще нет. Или в другой последовательности.
Добрый день! Пытаюсь разобраться с индикаторами. Появился вопрос. Есть индикатор, который вычисляет разность между двумя свечками другого индикатора. Добавляю его на тиковый график в quikjunior, он работает и показывает разность двух свечей-тиков. Перезапускаю quikjunior, оставив индикатор на графике, он перестает работать и вычислять разность, так как свеча s0 все время равна нулю. Подскажите ошибку и что делаю не так.
Settings = { Name = "**Raznost_SiU1_MyRobot", tag_graf="SMA_SiU1", line = { { Name = "AMA", Type = TYPE_LINE, Color = RGB(221, 44, 44) } }, }
function Init() return 1 end
function OnCalculate(Index) local Candle_Count = getNumCandles(Settings.tag_graf) local candel_prav=Candle_Count-Index PrintDbgStr("Candle_Count"..type2str(Candle_Count)) PrintDbgStr("candel_prav"..type2str(candel_prav))
local s1=GetGraphValueByCandle(Settings.tag_graf, candel_prav+1, 0) local s0=GetGraphValueByCandle(Settings.tag_graf, candel_prav, 0) or s1 PrintDbgStr("s0"..type2str(s0)) PrintDbgStr("s1"..type2str(s1)) s0=math_round(s0.close,7) s1=math_round(s1.close,7)
local razn=s0-s1 PrintDbgStr("razn"..type2str(razn)) return razn end
--Функция преобразования переменной любого типа и таблицы в строку function table2string(table)--запись таблицы в строку local k,v,str=0,0,"" for k,v in pairs(table) do if type(v)=="string" or type(v)=="number" then str=str..k.."="..v..';' elseif type(v)=="table"then str=str..k.."={"..table2string(v).."};" elseif type(v)=="function" or type(v)=='boolean' then str=str..k..'='..tostring(v)..';' end end return str end
--Функия добавления типа переменной и значения при использовании PrintDbgStr() function type2str(value) local t,str=type(value),"" if t=="string" or t=="number" then str=":|"..t.."|"..value elseif t=="table"then str=table2string(value) str=":|"..t.."|"..str elseif t=="function" or t=='boolean' then str=":|"..t.."|"..tostring(value) end return str end
------------------------------------------------------ --Функция возвращает свечу (таблицу) графика ------------------------------------------------------ function GetGraphValueByCandle(tag, candle_num, line) --[[ tag - тэг графика\индикатора, candle_num - номер запрашиваемой свечи(СПРАВА): 0 - текущая, 1 - предыдущая и тд, line - номер линии графика\индикатора]] --PrintDbgStr("Пуск GetGraphValueByCandle,tag="..type2str(tag)) local CandleCount = getNumCandles(tag)--получает количество свечей по идентификатору tag --PrintDbgStr("GetGraphValueByCandle,CandleCount="..type2str(CandleCount)) local LinesCount = getLinesCount(tag)--получения количества линий в графике local c_num = candle_num if ( candle_num == nil or candle_num==0 ) then c_num = CandleCount-1 end if (candle_num>0)then c_num = CandleCount-1-candle_num end if ( line == nil ) then line = 0 end if (CandleCount == nil or LinesCount == nil) then message("qlib.GetGraphValueByCandle(): error occured, cannot aqquire candle or line data"..tag,3) return 0 end if (tag == nil) then message("qlib.GetGraphValueByCandle(): error occured, tag is nil"..tag,3) return 0 end t, num, legend = getCandlesByIndex(tag, line, c_num, 1)--получения информации о свечках по идентификатору, график должен быть открыт --[[Формат вызова getCandlesByIndex(): TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count) Параметры: • tag – строковый идентификатор графика или индикатора, • line – номер линии графика или индикатора. Первая линия имеет номер 0, • first_candle – индекс первой свечки. Первая (самая левая) свечка имеет индекс 0, • count – количество запрашиваемых свечек. Возвращаемые значения: • t – таблица, содержащая запрашиваемые свечки, • n – количество свечек в таблице t, • l – легенда (подпись) графика.]] --PrintDbgStr("t"..type2str(t)) --PrintDbgStr("num"..type2str(num)) --PrintDbgStr("legend"..type2str(legend)) if ( num == 0 ) then message("qlib.GetGraphValueByCandle(): error occured, no candles aqquired"..tag,3) return 0 end --PrintDbgStr("return GetGraphValueByCandle,t[0]"..type2str(t[0])) return t[0] end
function math_round( roundIn , roundDig ) -- первый аргумент - число которое надо округлить, второй аргумент - количество символов после запятой. local mul = math.pow( 10, roundDig ) return ( math.floor( ( roundIn * mul ) + 0.5 )/mul ) end
1. Результат Вашего метода для демо quik ничем не будет отличаться от того, что брокер предоставляет quik с несколькими субсчетами? Просто не хотелось бы в дальнейшем натыкаться на какие то нюансы..
2. В таком случае можно как-то это реализовать, чтобы в дальнейшем через месяц после сброса пароля не надо было заново создавать несколько демо доступов и писать вам, чтобы вы слили все в один и так каждый месяц?
3. А вообще данное пожелание можно все-таки зарегистрировать для удобства пользователей? Например на Вашей странице демо-доступа добавить кроме галочек выбора рынков, галочку два субсчета, этого было бы достаточно.
Здравствуйте! Зарегистрируйте пожалуйста в вашей системе заявку по реализации субсчетов в демо версии quik, чтобы можно было тестировать стратегию торговли скрипта lua одновременно по нескольким субсчетам в демо версии quik, а вылавливать свои ошибки на боевом терминале.