дайте ссылку , где на вашем сайте это лежит. Спасибо
Где скачать документацию по qlua
Пользователь
Сообщений: Регистрация: 30.01.2015
15.02.2016 12:09:24
действительно, хотелось бы услышать начальника транспортного цеха. где документация на QLUA версии 7. Спасибо
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
15.02.2016 12:05:07
Я пользуюсь таким алгоритмом для отличия первого колбека от последующих Создаем таблицу событий по которым следим за колбеками (активным событиям) при поступлении колбека по событию изменяем его состояние в таблице событий. Если событие стало неактивным, то удаляем его из таблицы состояний. Проблем с кучей колбеков на одно и тоже событие у меня нет.
Расчет EMA, Формула расчета в Quik?
Пользователь
Сообщений: Регистрация: 30.01.2015
15.02.2016 08:41:37
еще замечу автору вопроса: если обратитесь к литературе, то обнаружите, что EMA это простейший цифровой фильтр с бесконечной импульсной характеристикой. Так как фильтрацию делаем на конечном интервале, то вне 3000 значений мы как бы придумываем Есть различные варианты продления данных за интервал наблюдения. Это тоже есть в книжках. Если интересно, что там за горизонтом, можно прочитать в книжках перед изобретением колеса.
Расчет EMA, Формула расчета в Quik?
Пользователь
Сообщений: Регистрация: 30.01.2015
15.02.2016 08:36:20
выкладываю модуль расчета индикаторов EMA написал очень давно, результаты должны быть как в квике
Код
local modname = ...
--автор Николай Камынин kamnik@mail.ru www.kamynin.ru
local M = {}
_G[modname] = M
package.loaded[modname] = M
local _G=_G -- глобальная таблица
setfenv(1, M)
function EMAt(y,x,m,i,n) --x- таблица
if m>=i then local s=0; for j=0,i-1 do s=s+x[i-j] end y[i]=s/i;
else if n==nil then y[i]=(y[i-1]*(m-1)+2*x[i])/(m+1); else y[i]=y[i-1] -(x[i-m] -x[i])/m; end
end
end
function EMAf(y,x,m,i,n) --x- функция
if m>=i then local s=0; for j=0,i-1 do s=s+x(i-j) end y[i]=s/i;
else if n==nil then y[i]=(y[i-1]*(m-1)+2*x(i))/(m+1); else y[i]=y[i-1]-(x(i-m)-x(i))/m; end
end
end
function sEMA(y,x,m,i)
local s=y;
if m>=i then s=((m-1)*s+x)/m; else s=(s*(m-1)+2*x)/(m+1); end
return s;
end --скользящее среднее x период m n если не задано то ехпонента или простое сглаживание
CreateDataSource
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 21:55:04
честно говоря, написал это еще год назад. но как-то не было надобности использовать.
CreateDataSource
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 21:52:59
Для справки: Реализовал открытие источников без графиков для индикаторов. ------------------- алгоритм следующий: 1) сделал библиотеку для запуска функций любого скрипта из других скриптов 2) Написал скрипт, который отвечает за открытие источников и находится в спящем потоке. 3) Если индикатору или скрипту нужны данные по истории, то он обращается за данными к спящему скрипту, который возвращает индикатору требуемые данные. --------------------
Железо для торговли роботом
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 20:19:01
Поясню еще раз. ----------------------- 1) Железо можно взять любое, лишь бы памяти не менее 2 Гб. На этом сервере у Вас 1.5 а пик более 1.5 т е бывает выгрузка на диск - это плохо. Поэтому памяти не менее 2. -------------------------- 2) сейчас у Вас квик у брокера в дата центре. сделайте в работающем КВИКЕ во 10:00, 12:00 и 21:00 информационное окно в расширенном варианте и покажите, тогда можно будет сказать конкретно на сколько хуже.
Как пошагово выполнять скрипт на qlua при запучке из QUIK ?, Вся суть, в принципе, выражена в вопросе.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 13:23:04
никак. чтобы отслеживать ошибки делайте вывод переменных в лог файл.
getBuySellInfoEx
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 07:04:14
откатить версию: из backup из каталога нужной версии переписываем в QUIK.
Колбэк при частичном открытии лимитированной позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 06:59:33
для начала читаем документацию: OnOrder Функция вызывается терминалом QUIK при получении новой заявки или при изменении параметров существующей заявки. Черным по белому написано: придет onOrder, так как произошло изменение позиции, т е изменились параметры выставленной заявки. Т е у заявки на бирже изменились параметры. Новая не выставлялась.
Как зделать переворот пози?
Пользователь
Сообщений: Регистрация: 30.01.2015
14.02.2016 06:55:06
Цитата
Андрей Мурга написал: Ви не поняли,Смотрите if aaa>bbb then buy end if aaa<bbb then закрить бай и открить селл,Как ето записать кодом? тоесть банальний реверс просто увиличить контракт не поможет робот потом запутается
if aaa<bbb then sell end ---------------------------------------- если продать столько же сколько в позиции, то она закроется, если продать больше, чем есть (если бумага маржируемая), то откроется short.
Железо для торговли роботом
Пользователь
Сообщений: Регистрация: 30.01.2015
13.02.2016 15:25:06
проблема скорее будет не в железе, а в задержках каналов связи и ОС ( алгоритм сингла). тестируйте их пингом и потом принимайте решение.
Железо для торговли роботом
Пользователь
Сообщений: Регистрация: 30.01.2015
13.02.2016 15:22:50
На указанном железе будет плохо. Если хотите очень хорошо, то робот надо ставить на удаленном выделенном железном сервере, в крайнем случае виртуальном, возможно как сейчас у Вас.
Как зделать переворот пози?
Пользователь
Сообщений: Регистрация: 30.01.2015
12.02.2016 19:41:58
сделать противоположную сделку если купили, то продать если продали, то купить если курили, то курить
вопрос по индикаторам, движение индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
12.02.2016 19:40:19
отправил на почту пример
вопрос по индикаторам, движение индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
12.02.2016 14:38:40
покажите свой индикатор( программу).
OnOrder выдает ошибку
Пользователь
Сообщений: Регистрация: 30.01.2015
08.02.2016 19:57:44
относительно объявления глобальных переменных в любом месте неверно. вот пример: print(x) x=10 результат nil
OnOrder выдает ошибку
Пользователь
Сообщений: Регистрация: 30.01.2015
08.02.2016 19:45:01
, Все что я написал - есть правда. Но причину ошибки я указал неверно. Вы тоже неверно указали причину ошибки. ------------------- Ошибка в том, что переменная order не содержит элемента order_num Поэтому вызов функции onOrder с параметрами или без не спасает от этой ошибки.
программа на луа делает один цикл купить-продать, программу скачал с интернета. работает. или сам переделал. она купила или продала по индикатору и встала.
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:24:50
бесконечный цикл в функции Main
Порядок отслеживания процесса выполнения транзакций
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:22:59
еще надо (я отслеживаю) заявки, которые выставляет человек, от заявок робота; заявки, которые являются стопами от заявок которые являются условными для открытия позиции. это до кучи
Порядок отслеживания процесса выполнения транзакций
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:20:30
еще надо отслеживать стоп-заявки и отличать их лимит заявки от выставляемых лимит заявок. Это до кучи.
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:11:42
примерно так:
Скрытый текст
--shares -- список инструментов local oldt_si,oldt_eu,flag=0,0,0; local ds={}; function main() local i = 1 for sec,v in pairs(shares) do local t=ds[i] if t==false then t,er= CreateDataSource(v.classcode,sec, INTERVAL_H1) if er==nil then t.clas=v.classcode; t.sec=sec; t:SetUpdateCallback(function(index) cb(index,ds[i]) end) toLog(log,"ds added i="..i.." classcode:"..v.classcode.." seccode:"..sec) ds[i]=t; else Log(log,"er="..er) end end i=i+1 end
while is_run do sleep(1000) end
end
function cb(ind,t) local Ti = t:T(ind-1) local h = Ti.hour local curhms = h*10 if flag==2 and (curhms~=oldt_si or curhms~=oldt_si) then flag=0 end if flag==2 then return end if curhms==oldt_si then flag=flag+1; oldt_si=curhms end if curhms==oldt_eu then flag=flag+1; oldt_eu=curhms end
if flag==2 then -- обработка
end
end
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:02:40
либо введите флаг . И по нему блокируйте обработку.
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 10:02:01
поставьте выравнивание после обработки.
Сортировка пользовательской таблицы QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:57:19
по QLUA
HHV, LLV за период в LUa ?, Реализация в Луа в виде индикатора HHV LLV
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:56:26
возьмите решение из известного Вам проекта и перепишите его на луа.
HHV, LLV за период в LUa ?, Реализация в Луа в виде индикатора HHV LLV
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:55:19
В луа Ваша задача тоже решается легко.
HHV, LLV за период в LUa ?, Реализация в Луа в виде индикатора HHV LLV
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:46:08
, самокритика - это похвально. Но замечу, не я Вас спрашиваю , при этом гордясь собственным невежеством, а ВЫ.
Сортировка пользовательской таблицы QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:42:56
см в документации Приложение 2.
Работа с OnOrder
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2016 09:23:35
один ... может задать столько вопросов, на которые 100 умных затрахаются отвечать. ------------------------- Это сладкое слово - ХАЛЯВА.
Работа с OnOrder
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2016 18:26:27
Я уже писал как решать данную проблему. Повторю еще раз. Надо контролировать изменение лимитов. И при их изменении шевелиться с заявками. тогда будет по ... сколько раз у вас сработает OnOrder
Обращение к произвольной ТТП, есть возможность?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2016 18:19:14
нет, взламывать не надо. Так как мы имеем встроенную в основной поток VMLUA , следовательно все dll, которые мы подключаем к ней являются родными для процесса info.exe (терминала КВИК) ------------------------- Проблема лишь в отсутствии документации. Но хорошей документацией QUIK никогда не славился. Поэтому простейший реинженеринг софта потребуется ----------------------------- Раньше, когда требовался взлом (до времен VM Lua) подобную задачу я делал даже без СИ, на скриптовом языке Autoit. ------------------ Но, правда, не вижу практической надобности этого мероприятия.
Как бороться с файлом alltrade.dat
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2016 18:10:20
можно делать так: -------------------------------- руками в квике 1) нажать в меню "Очистить все и начать новый сеанс"' ------------------------------- автоматом: 2) батник прописать сценарий удалить файлы 3) п 1 сделать автоматом 4) написать скрипт в батник для запуска квика и прочего. Например: у меня уже лет ...надцать квик по расписанию запускается скриптом и вводит пароли. запускает все, что еще надо, можно удалять все, что не надо .
OnOrder выдает ошибку
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2016 07:39:08
А ошибку Вы получаете потому, что у Вас вызов функции происходит до ее описания Попробуйте изучить Lua.
OnOrder выдает ошибку
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2016 07:37:34
Нельзя колбек вставлять в main попробуйте разобраться с назначением колбеков и main. Так НЕЛЬЗЯ: function main() while is_run do OnOrder() sleep(50) end end
Обращение к произвольной ТТП, есть возможность?
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 23:08:17
еще можно хуком. но это для любителей экзотики.
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 23:03:47
можно сделать очередь либо использовать кораунды а еще лучше переделать весь алгоритм
OnOrder выдает ошибку
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 22:57:29
Вы пишите скрипт или индикатор?
Одна сделка - OnTrade() два колбека
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 09:33:26
примерно так:
Скрытый текст
local lenT_old=0; local flag=false;
function OnInit (path) -- инициализация функции main lenT_old=getNumberOf("trades") flag=false; end
function OnTrade(trade) lenT=getNumberOf("trades") if lenT==lenT_old then flag=true end lenT=lenT_old; if flag then --.... -- обработка колбека end end
Куда быстрее попадают новые данные, в стакан или таблицу текущих параметров?, Интересуют лучший спрос и лучшее предложение - спред в стакане.
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 09:12:19
вопрос скорее будет в том, как быстро Вы сможете отреагировать на изменение данных. Полагаю, что это время составит в среднем не менее 100 мс. Поэтому разницы нет, если Вам не имеет значения очередь берите из ТТП
HHV, LLV за период в LUa ?, Реализация в Луа в виде индикатора HHV LLV
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 09:07:37
Вопрос к знатокам китайского языка. Кто-нибудь может написать что-нибудь на китайском, чтобы я это понял. Я в китайском - ноль.
Функция обратного вызова OnFuturesClientHolding
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 09:03:56
1) С ошибкой в скрипте. 2) С ошибкой в понимании того, что запрограммировано.
Функция CreateDataSource
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 09:01:29
можно использовать: 1) getParamEx – значения всех параметров биржевой информации из Таблицы текущих значений параметров, 2) getQuoteLevel2 – стакан по указанному классу и бумаге, 3) getItem – для таблицы all_trades
Получение количество лотов в позиции
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 08:52:15
примерно так:
Скрытый текст
local acc="...." --- это Ваш счет депо --------------------------------- function LB(sec) local n = getNumberOf("depo_limits") for y = 0, n-1 do local trade = getItem("depo_limits", y) if trade.sec_code==sec and trade.trdaccid==acc then return trade.currentbal end end return 0 end
function OnQuote(CLASS, SEC) --..... local Limit=LB( SEC) -- получим лимит --.... end
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 08:31:45
а закрытие источников перенести в закрытие скрипта
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
function main() message("_________________________________") local class_code0="TQBR" local hm=#sec_code if ds~=true then ds={}; for h=1,hm do ds[n]=nil end end for h=1,hm do if ds[h]~=true then ds[h],error=CreateDataSource(class_code0,sec_code[h],INTERVAL_M1) if ds[h] then text=string.format("%-2d %-5s created",h,sec_code[h]) else text=string.format("%-2d %-5s error: %s",h,sec_code[h],error) end message(text) end end message("---------------------------------") end