Интересная опция появилась - показывать на графике не все свечи, а только последние 100 (200,300) штук. Но не могу сообразить, что эта опция экономит, позволяет ли она оптимизировать работу процессора, квика, трафик интернета? Что она экономит? У меня робот прочёсывает около 150 графиков, все они открыты на полную катушку, думаю мне эта опция пригодится, но прошу разъяснить, что же всё таки она даёт в плане производительности?
Спасибо за ответы! Но они разные. Что скажут разработчики? Сохранятся ли изменившиеся переменные в памяти при уходе в гибернацию? П.С. Для меня это ООООчень важно. Заранее спасибо.
Вопросы в продолжение этой темы. Вечером комп выключается. Утром включается. Роботы самозапустились (зелёные треугольники). Вопрос 1 С какого места начинает работать робот? С Функции Main или он читает и исполняет код с самого начала (до функции main)?
Вопрос 2. Помнит ли робот переменные, которые поменялись в ходе его работы? Ну например переменная flag имеет первоначальное значение 0, но стала иметь значение 1 в ходе работы скрипта. Какое у неё будет значение в моём случае - 0 или 1?
Здравствуйте. Подскажите пожалуйста как экспортировать данные графика в эксель. Речь идёт не о банальном "Сохранить данные в файл", а о настройке непрерываного он-лайн экспорта. Спасибо за ответ.
function FreeMoney ()
dofile("C:\\variables.lua")
i=0
for sec in string.gmatch(ticker_list,"%a+") do
sleep (1)
ostatok=math.mod(i/5)
if ostatok=0 then
table_mask={}
table_mask.seccode=sec
killAllOrders(table_mask)
i=i+1
end
end
end
Помогите пожалуйста переделать эту функцию, чтобы она снимала не все активные заявки, а каждую пятую активную заявку. Спасибо
Это нужно чтобы когда засигналит соседний робот, эта функция сняла не все, а часть этих заявок, чтобы освободить немного денег.
Код
function killAllOrders(table_mask)
-- данная функция отправит транзакции на отмену АКТИВНЫХ заявок соответствующим фильтру указанному как входящий параметр table_mask
-- список всех возможных параметров : ACCOUNT,CLASSCODE,SECCODE,OPERATION,CLIENT_CODE,COMMENT
-- если вызвать функцию с параметром nil - снимутся ВСЕ активные заявки
local i,key,val,result_num=0,0,0,0
local tokill=true
local row={}
local result_str=""
for i=0,getNumberOf("orders")-1,1 do
row=getItem("orders",i)
tokill=false
--toLog(log,"Row "..i.." onum="..row.order_num)
if orderflags2table(row.flags).active then
tokill=true
--toLog(log,"acitve")
if table_mask~=nil then
for key,val in pairs(table_mask) do
--toLog(log,"check key="..key.." val="..val)
--toLog(log,"strlowe="..string.lower(key).." row="..row[string.lower(key)].." tbl="..val)
if string_lower(key)=='comment' then
if string_find(string_lower(row.brokerref),string_lower(val))==nil then tokill=false break end
else
if row[string_lower(key)]~=val then tokill=false break end
end
end
end
end
if tokill then
--toLog(log,"kill onum"..row.order_num)
res,ms=killOrder(tostring(row.order_num),row[securityfiledname],row.class_code)
result_num=result_num+1
--toLog(log,ms)
if res then
result_str=result_str..row.order_num..","
else
result_str=result_str.."!"..row.order_num..","
end
end
end
return true,"QL.killAllOrders(): Sended "..result_num.." transactions. order_nums:"..result_str
end
Чтобы дать точную информацию, я дождусь следующего появления проблемы и опишу при каких условиях она возникла. По определённым причинам я не могу просто так брать и перезапускать КВИК когда захочу ради тестов.
Здравствуйте. Всё время слетают настройки приёма данных. Работаю-работаю. Потом перезапустил квик, и снова все птички стоят, все ненужные данные принимаются. Как с этим бороться?
Посоветуйте как повысить надёжность сбережения этих настроек. Может быть они лежат в каком то особом дат файле, его можно сохранить и если слетели настройки приёма данных, то подцепить сохранённый файл.
внезапно стало отображаться время сервера в формате 5:07:22 PM Раньше было 17:07:22 Это сбило всю работу робота так как он брал время сервера. Это настраивается в КВИКе или у брокера?
Николай Камынин написал: а почему Вы решили, что меньше сигналов - это неправильно? возможно у вас коридор для болинджера большой задан для текущего рынка.
всегда был такой коридор. Я имел в виду, что в новом брокере чересчур много случаев, когда визуально график опустился ниже нижней линии боллинджера (или поднялся выше верхней), а заявка не отправилась. Вот свеженький пример: http://i.imgur.com/TIiajov.jpg должна была выставиться заявка на продажу, а её не было. И в таблице Транзакций никаких попыток зашортить Сбер не было. Я не понимаю почему.
Николай Камынин написал: Вы используете сделку и заявку Вы именно так хотите?
Раньше - торгуя в БКС - было так: если бид из ТТП опускается ниже нижней линии Боллинджера, робот выставляет заявку на покупку (лучшим бидом). Когда я понял, что на новом брокере - Неттрейдер - у меня раза в три меньше срабатываний, чем в БКС, то начал экспериментировать. Сейчас робот отсылает заявку если ИЛИ цена сделки из ТВС опускается ниже нижней линии Боллинджера, ИЛИ бид из стакана опускается ниже нижней линии Боллинджера. И то, и то меня устраивает с точки зрения точки входа: купить, если цена поцеловалась с нижней линией Боллинджера.
Николай Камынин написал: вернее сказать ошибка в алгоритме функции пересечения
Код
function OnAllTrade (alltrade)
if string.find(ticker_list,alltrade.sec_code)~=nil then
last_price[alltrade.sec_code]=alltrade.price
end
end
Код
function OnParam (class, sec)
if string.find(ticker_list,sec)~=nil then
tablebid=getParamEx(class, sec, "bid")
tableoffer=getParamEx(class, sec, "offer")
if bid_best[sec]~=tablebid.param_value then
bid_best[sec]=tonumber(toPrice(sec, tablebid.param_value))
end
if offer_best[sec]~=tableoffer.param_value then
offer_best[sec]=tonumber(toPrice(sec, tableoffer.param_value))
end
end
end
Внутри main идёт перебор 50 акций из тикер листа for sec in string.gmatch(ticker_list,"%a+") do
Код
if bid_best[sec]~=0 and offer_best[sec]~=0 and last_price[sec]~=0 then
if last_price[sec]<line_3 or bid_best[sec]<line_3 then
status="Fire_LONG"
elseif offer_best[sec]>line_2 or last_price[sec]>line_2 then
status="Fire_SHORT"
else
status="SPACE"
end
end
line_3 и line_2 - это нижняя и верхняя линии Боллинджера.
Я тоже думал о том, чтобы присвоить графику идентификатор, и сравнивать значение свечки CLOSE с Боллинджером, но потом решил что с коллбеком будет быстрее и реализовал через колбек.
Вот и я думаю, что заявки должны отсылаться, пусть даже с опозданием. Но на практике очень часто не бывает срабатываний. Снижение цены под Боллинджера есть, а заявка не выставляется. http://i.imgur.com/fHRuwtY.jpg вот пример.
(при этом много случаев, когда робот молодец и всё сработало как надо)
Николай, спасибо что помогаете. Тогда такой вопрос. Ответ для меня очень важен. Станет понятно почему у моего робота после перехода на нового брокера стало мало срабатываний. Это и стало причиной, почему я встревожился и задал вопрос на этом форуме.
Итак, вопрос: Если у брокера тормозной сервер, а у меня тормозной интернет, то при наступлении точки входа, отправит ли робот заявку, пусть даже с опозданием? Или возможен вариант, что точка входа была, робот завтыкал, за эти миллисекунды точка входа прошла, и заявка отправлена не будет? Заранее спасибо. Ответ на этот вопрос даст мне очень многое.
П.С. Моё личное мнение: робот должен выставить заявку, даже с опозданием, ведь в Таблице обезличенных сделок появится запись, которую он обработает.
Николай Камынин написал: Похоже что в киеве. С первого взгляда выгоды от виртуалки почти нет. Я такие параметры получаю на своем компе(но не у всякого брокера). Есть брокеры у которых сервера тормозятся сильно. А где будет комп?
Николай, то есть нынешний вариант - виртуалка у брокера - даже имеет реальные недостатки по сравнению с ноутбуком? (при условии что интернет везде одинаково хорош)
Переезд на вот такой ноутбук будет ли равнозначным?
У вас робот с типа высокочастотной торговлей или открываете позицию - и на неделю? если первое - то, как было сказано, основное - это каналы связи, а не железо.
Господа, прошу давать конструктивные ответы в рамках заданного вопроса. Без советов "потестировать" и "нужен быстрый интернет" я вполне обойдусь. Спасибо.
Добрый день. Торгую роботом на минутках. Скорость срабатывания очень важна. Точка входа может длиться доли секунды, за которые робот должен успеть выставить заявку. В связи с этим вопрос. Какое должно быть железо у компьютера, чтобы роботу комфортно торговалось? Сейчас я пользуюсь виртуальным сервером брокера, но планирую переехать на обычный ноутбук и торговать с него. Других программ на ноутбуке не будет. Только КВИК. Робот на Lua. Работает с таблицей всех сделок и таблицей текущих торгов.
Вот параметры ноутбука. Достаточно ли их? Celeron ® Dual Core CPU T 3100 1,9 GHz ОЗУ 2 ГБ
В этом виде функция работает в версии 6.14. Когда обновил до 6.17, она перестала работать. В версии 7 - тоже не работает. Ошибка: attempt to index local row (a nil value) Стоит откатить КВИК до версии 6.14, всё работает безукоризненно. Функция на входе принимает цену и объём котировки из стакана
Код
function is_it_my_quote(price_from_glass, volume_from_glass, sec)
local row
for i=getNumberOf("orders"),getNumberOf("orders")-orders_threshold,-1 do
row=getItem("orders",i)
if row.seccode==sec and row.price==price_from_glass and orderflags2table(row.flags).active then
if row.balance==volume_from_glass then
return true,true
else
return true,false
end
end
end
return false,false
end
Николай Камынин,не понял Вас мне брокер выключил все лишние классы. Теперь вот так: http://i.imgur.com/rEXpV7h.jpg ТВС мне нужна, так как я отслеживаю цену последней сделки. ТТП не подходит, так как мой брокер обновляет её раз в 50 миллисекунд.
И ещё. Если в ТВС фильтром Редактировать таблицу оставить только 1 бумагу - ОГК-2 например. А все остальные акции останутся включенными в Связь - Заказ всех сделок. То.... коллбэк будет по прежнему находить сделки по всем акциям?
Здравствуйте. Я торгую роботом на акциях ММВБ, фортс мне не нужен. Работаю с таблицей всех сделок - коллбек OnAllTrades Как эффективнее разгрузить КВИК от ненужных данных рынка фортс?
1. Попросить брокера на своей стороне выключить мне рынок ФОРТС? 2. Убрать птички в Связь - Списки и Связь - Заказ всех сделок?
Во второму случае - как мне кажется - квик должен делать дополнительную работу - проверять сделку принадлежит она к ММВБ или ФОРТС и в зависимости от этого транслировать её или отфутболивать. Лишняя вычислительная нагрузка. Значит первый вариант лучше?