1. Не сохраняется фильтр по времени на графиках при закрытии программы. 2. Для своих индикаторах квик стал привязывать количество знаков которые показывает на графике, к количеству знаков после запятой инструмента, на который наложен индикатор. Какая логика? Если индикатор рассчитывает например какой-то коэффициент, который менше нуля, а у фишки, для которой он рассчитывается, значения целые, то индикатор показывает в значениях только нули. 3. Если нажать на стакане кнопку "снять все активные заявки из окна котировок", то даже при снятой галочке в настройках "запрашивать подтверждение для групповых операций" всё равно запрашивает.
Попробовал по совету техподдержки воспользоваться таким простым и удобным способом настройки фильтрации таблиц с обезличенными сделками. Упс! Ничего не вышло. Квик 8,7,1,3. Горят красненький якорь и красненькая цепочка. А реакции (связи) никакой. Может кто подскажет?
Вот такой простенький код даёт 1 МБ прироста памяти в час. Некритично, но непонятно почему. Так и должно быть или я что-то делаю не так?
Код
local stopped = false
function OnStop(flag)
stopped = true
end
function f11()
local fpath = getScriptPath() .. "\\tos11.log"
local f = io.open(fpath, "w+")
f:close()
f = nil
end
function main()
while not stopped do
f11()
sleep(100)
end
end
написал простейший индикатор берущий данные из другой области диаграммы
Код
function RF()
return function(index)
if C(index) then
ind, n, l = getCandlesByIndex (Settings.tag, 0, index - 1, 1)
return ind[0].close
end
return nil
end
end
Вроде работает. Но. При загрузке квика выдает нули. Чтобы появились данные нужно нажать "применить" или "ОК". И что еще хуже, просто на глаз видно, что индикатор запаздывает причем до нескольких секунд. Что-то у меня не так или так и задумано?
Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
У меня портфель делает некий расчет и выводит в таблицу, используя функцию:
Код
' Функция заполнить таблицу
' -----------------------------
FUNC FILL_TBL()
val1 = bar_time
val2 = signal_pos
val3 = current_pos
val4 = buy_quantity
val5 = sell_quantity
val6 = trans_id
val7 = pos_bal
val8 = status
map1=create_map()[IMG]c:\Users\ВГ\Pictures\portf.JPG[/IMG]
map1=SET_VALUE(map1,"val1",val1)
map1=SET_VALUE(map1,"val2",val2)
map1=SET_VALUE(map1,"val3",val3)
map1=SET_VALUE(map1,"val4",val4)
map1=SET_VALUE(map1,"val5",val5)
map1=SET_VALUE(map1,"val6",val6)
map1=SET_VALUE(map1,"val7",val7)
map1=SET_VALUE(map1,"val8",val8)
DELETE_ALL_ITEMS()
add_item(1,map1)
BGC = "DEFAULT_COLOR"
FC = "DEFAULT_COLOR"
if error <> 0 or check_deal >= 10 or check_frun <> 0
BGC = "RGB(250,200,150)"
end if
if status = "STOP"
BGC = "RGB(250,150,150)"
end if
if trade_on_of = "0"
FC = "RGB(50,200,50)"
end if
SET_ROW_COLOR_EX(1, BGC, "DEFAULT_COLOR", FC, "DEFAULT_COLOR")
tt = t_time(0)
WRITELN(logfile_path, signal_pos & "," & current_pos & "," & pos_bal & "," & buy_quantity & "," & sell_quantity & "," & last_price & "," & last_time & "," & best_bid & "," & best_offer & "," & status)
WRITELN(logfile_path, "END" & "," & tt)
END FUNC
То есть при каждом расчете удаляет строки и пишет ровно 1 строку. Все работало много лет. Но месяц другой назад он вдруг не с того, не с сего начинает добавлять строки не удаляя. Причем как-то хаотично, не в такт с периодом расчета, с пропусками и по две строки. Причем нумерация строк плывет. Образец в приложении.
Сначала это происходило иногда и где-то под конец вечерки. Но сегодня уже под конец основной. Хотелось бы понять, что делать.
Квик 6.14.0.12 Финам. И что любопытно точно такой же портфель нормально работает в БКС 6.16.1.15 и 7.2.1.5.
Посылаю заявку в скрипте луа sendTransaction, квик выдает сообщение "Заявка 25109199245 успешно зарегистрирована." Но я не прошу мне сообщать. И в купайле sendTransaction все делает тихо. В чем фишка?
Замечательная казалось бы функция, позволяющая вставлять точки гуртом, а не по одиночке. SetRangeValue(1, index-range, index-1, nil) Но она принимает только скаляр, то есть нарисовать можно только горизонтальную линию или все стереть. И кстати почему с помощью SetRangeValue и SetValue нельзя поставить значение на последней свечке? В чем смысл такого ограничения?
Такое впечатление, что если повесить много даже простых индикаторов, квик начинает подтормаживать. Как часто рассчитываются индикаторы? На каждом тике? Как можно ограничить частоту расчета? Куда бы можно было вставить слип? Не очень понятно.
Использую dofile для постоянной подгрузки данных в виде таблицы из текстового файла типа: qq={113.00,113.00,-0.99,-1.03,-0.79,-0.93,-0.66,-0.84,} Подлиннее конечно. Но раз в минут 15-20, луа сообщает об ошибке: " '}' expected near '<eof>' ". Похоже он обращается к еще не закрытому и недописанному файлу. Некритично, так как продолжает работать, но неприятно. Может что посоветуете?
С Амиброкером не вышло, а вот с Матлабом похоже выходит:
Код
--require "w32" -- говорят что нужна, на практике не увидел
require "luacom"
local isrun = true
function OnStop(flag)
isrun = false
end
function main()
--w32.CoInitialize(nil)
ML = luacom.CreateObject("matlab.application.single")
assert(ML)
ML.Visible = 1 -- не обязательно там все равно ничего в принципе не видно, но проще убить процесс если что
t = tos(0)
message("tos = " .. tostring(#t)) -- меньше 150 тк фильтр по "SPBFUT"
ML:PutWorkspaceData("C1", "base", t); -- отправляем в МЛ под именем С1
message("Put")
wd = ML:GetWorkspaceData('C1', 'base') -- а вот так получаем обратно
message("C1(1,1) = " .. tostring(wd[1][1]))
ML:Execute("r = TST;") -- в МЛ у меня эта функция пишет данные в файл и возвращает "1", если все гладко
r = ML:GetWorkspaceData('r', 'base') -- на прямую результат возвращает криво, так наверно удобнее
message("Execute TST = " .. tostring(r))
ML:Quit()
ML = nil
--w32.CoUninitialize(nil)
message("end COM ML")
end
function tos(n) -- читает ТОС в матрицу начиная с "n"
local outcell = {}
local cnt = 0
nn = getNumberOf("all_trades")
for i = n, 150 do -- для примера хватит 150 строчек, но максимум 1500 * 5
-- приходится ограничить - у LuaVM случается грыжа при передаче в МЛ более чем 2000*5
trade = getItem("all_trades", i)
cc = trade["class_code"]
if cc == "SPBFUT" then
cnt = cnt + 1
dt = trade["datetime"]
dt = dt.hour*10000 + dt.min*100 + dt.sec
outcell[cnt] = {trade.trade_num, trade.sec_code, trade.qty, trade.price, dt}
end
end
return outcell
end
Таблица Позиции по счетам Вар. маржа обнулена. В таблице параметров все нормально, а при обращении из купайла Пред. оценка, шаг цены и его стоимость обнулены.