Андрей Мурга написал: Ви не поняли,Смотрите 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
Перестают отображаться графики после многократного вызова CreateDataSource() - ds:Close()
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 08:28:53
чтобы не было указанной проблемы надо сделать примерно так:
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("---------------------------------") sleep(1000) for h=1,hm do if ds[h] then text=string.format("%-2d %-5s size: %d",h,sec_code[h],ds[h]:Size()) if ds[h]:Close() then text=text.." closed" else text=text.." error" end else text=string.format("%-2d %-5s empty",h,sec_code[h]) end message(text) end message("=================================") end
Обращение к произвольной ТТП, есть возможность?
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 08:15:45
можно через DDE
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
05.02.2016 08:11:41
, так как текст программы не приведен, то Ваше замечание тоже не верно. Например, если обработка данных от колбека делается в main. Тогда очередной вызов колбека может изменить данные в таблице, через которую они передаются в функцию в майн. Т е теоретически указанная выше ситуация возможна. Но, повторюсь, из приведенного рассказа автора это явно не следует.
Синхронизация данных от SetUpdateCallback
Пользователь
Сообщений: Регистрация: 30.01.2015
04.02.2016 18:52:58
Из рассказа не очень понятна проблема. из понятого, попробуйте использовать Coroutines
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
25.01.2016 19:38:19
рекомендую всем сделать также, чтобы не трахаться с версией 7
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
25.01.2016 19:37:29
откатился на 6.17.3.6 подожду когда все приколы уберут из версии 7.0.4...
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
25.01.2016 19:27:30
Я отослал Вам дампы как Вы и просили. Могу еще прислать. скажите, что Вы в них нашли. В чем причина крушения КВИКА?
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
25.01.2016 19:24:02
1) А Вы полагаете, что аварийный вылет КВИКА на скрптах VMLua - это нормальная обработка ошибок ? 2) Как убрать линии на первом графике?
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
25.01.2016 19:20:00
дело в том, что раньше в версии 6 я вообще последние полгода не получал аварийных сообщений поставил 7.0.4.10 и за 2 дня 30 штук дампов. просто уже задолбало. -------------------------------- Уж лучше бы оставили как было. Нет функции скрипт молча ничего не сообщает и не вылетает. Долго приходтся соображать почему ничего не рисует. Но найти ошибку все же проще, не надо каждый раз снова грузить КВИК. ----------------------------------- При этом размещаю индикатор на графике. все нормально. снимаю индикатор. ставлю его же снова - получаю дамп. снова загружаюсь. Ставлю тот же индикатор - все нормально. Потом может и не вылететь при повторной установке а может и слететь. все дампы отослал Вам как и просили в сообщении на почту support.
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2016 09:05:56
еще приколы. "чтобы жизнь не была скучной" данную версию поставил недавно. но сразу обнаружилось ее неустойчивая работа. теперь очень часто выскакивает аварийное завершение без внятной диагностики ошибки а лишь с предложением отправить дамп. например, 1) можно один и тот же скрипт индикатора загрузить и снять 3 раза а на четвертый квик аварийно вылетает. 2) можно закрыть квик в конце дня. И после закрытия пытаться его загрузить снова. Но он будет аварийно вылетать. Лишь удаление файла info.log позволяет его загрузить повторно. 3) Ранее уже указывал, повотрю здесь "до кучи" Теперь обращение в скрипте к несуществующей функции вызывает аварийное завершения КВИКА.
QUIK(версия 7.0.4.10), приколы
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2016 08:57:23
Обнаружил очередной прикол. На картинке есть линии тренда - горизонтальные белые линии внизу. А в меню нет пункта "удалить все тренды в текущем окне" Вопрос к знатокам: Как удалить данные тренды?
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2016 07:52:02
В версии 7.0.4.10 есть такой прикол. ------------------------------------- Если происходит обращение к функции, которой нет, т е по адресу nil, то вместо сообщения типа "отсутствует функция XXX" , происходит аварийное завершение квика с предложением послать дамп разработчикам. -------------------------------- В версиях 6 такая ситуация обходилась молчанием и без аварии. Тоже было прикольно. ------------------------------ Предложение: Реализовать нормальное обработки такой ошибки, с сообщением об отсутствии функции и без аварийного завершения КВИКА. Спасибо
Реагировать на Tick
Пользователь
Сообщений: Регистрация: 30.01.2015
22.01.2016 11:12:25
проще делать робота в индикаторе ОnCalculate(NUMBER index) - реагирует на каждый чих.
Как эффективнее разгрузить КВИК
Пользователь
Сообщений: Регистрация: 30.01.2015
21.01.2016 12:36:55
Поясняю. В ТВС данные заезжают не срезами, а пакетами. Разница между этими понятиями следующая. срез делается по времени например через каждые 100 мс передаем некоторый набор параметров. Для сжатия трафика передаем лишь изменения. При этом если какой-то параметр меняется раз в 10 мс, то в срезе будет каждое 10-е изменение параметра -------------------------- При передаче пакетами, передаются все изменения параметров, но момент отправки этих значений определяется не временем, а количеством (размером пакета) Например, размер пакета 10 значений (число взято произвольно) У нас совершается 1 сделка в 100 мс. Пакет сформируется и будет отправлен через 1 секунду от первой сделки. Еще пример, сделки совершаются через 1 мс, пакет будет сформирован и отправлен через 10 мс. Последний пример не совсем верен для биржи. Есть информация, которую биржа рассылает всем по времени, но пакетами. Т е набирается пакет 500 мс и отсылается всем. Т е получаем пакеты , т е без пропусков, но не ранее чем через установленный на бирже интервал. ------------------------ Примерно так.