Узнал, что продается робот на Lua, «Автологин терминала QUIK».
Продается то, что есть в открытом виде на quik2dde.ru
Выкладываю тут:
-- quik_login.lua -- Автологин терминала QUIK -- © http://qui2dde.ru/ -- Версия: 2.0 -- для Quik от версии 7.11.1.5 local w32 = require("w32") -- логин и пароль для терминала QUIK_LOGIN = "Uxxxxxxx" QUIK_PASSW = "yyyyy" function FindLoginWindow() hLoginWnd = w32.FindWindow("", "Идентификация пользователя") if hLoginWnd == 0 then hLoginWnd = w32.FindWindow("", "User identification") end return hLoginWnd end timeout = 1000 -- таймаут между попытками поиска окна логина is_run = true function OnStop() timeout = 1 is_run = false end function main() while is_run do sleep(timeout) if isConnected() == 0 then local hLoginWnd = FindLoginWindow() if hLoginWnd ~= 0 then local n1 = w32.FindWindowEx(hLoginWnd, 0, "", "") local n2 = w32.FindWindowEx(hLoginWnd, n1, "", "") local n3 = w32.FindWindowEx(hLoginWnd, n2, "", "") local n4 = w32.FindWindowEx(hLoginWnd, n3, "", "") w32.SetWindowText(n2, QUIK_LOGIN) w32.SetWindowText(n3, QUIK_PASSW) w32.SetFocus(n4) w32.PostMessage(n4, w32.BM_CLICK, 0, 0) end end end endБлагодарности, как понимаю, следует адресовать swerg
Программ для тестирования много. Как-то начал считать, дошел до цифры 33 (https://smart-lab.ru/blog/236254.php).
Но, сколько бы их ни было, все равно чего-то не хватает: то танцы с бубном со входными данными, то отсутствие какого-нибудь функционала, то проблемы с установкой самой программы ТА, «то полы кривые» и т.д.
Поэтому создал свой тестер, на c#, назвал Xtest.
Вкратце напишу про то, как он работает на примере индекса Московской биржи (ранее — индекс ММВБ).
Стратегия простая:
Покупаем, когда начался рост. Продаем либо по стопу, либо по тэйк-профиту.
Для шорта — зеркально.
Для входа в позицию выбрал простой индикатор, рассказывать про него не буду, поверьте, он банальный. Одна переменная, назвал Param1.
Выходы: будем подбирать stopLoss, takeProfit и SLforTP (stopLoss для takeProfit), они в блоке «Strategy Parameters» на вкладке Parameters.
Представляю торговую систему «купи-продай».
Суть ее очень проста: Покупаем некоторое количество бумаг (start_qty), и выставляем заявки по лесенке на продажу через определенное количество пунктов.
Шаг лесенки назовем step. Да, бумаги следует продавать одинаковыми пачками, по qty_in_step лотов.
(Оставляем пока за бортом поста тему — а что делать, если купили, выставили заявки на продажу, а бумага пошла вниз?)
Поведение Equity при разных start_qty приведено на рисунке.
Индикаторы можете скачать со страницы www.xsharp.ru/indikators файл StockTest.zip, два индикатора:
1. StockTest.lua — проставляет метки сделок. Ее следует добавить на график бумаги;
2. StockEquity.lua — строит кривую Equity, следует добавить на отдельное окно.
Успешной игры по тренду!
arqatech.com/ru/about/news/quik-7-10/
Цифры — шок:
Среди других нововведений версии следует отметить увеличение количества сохраняемых «свечек» графиков в локальном хранилище Рабочего места с 3000 до 65000.
Если ранее к тестированию в QUIK можно было относиться как к забаве, то теперь это становится уже интересным делом!
Скачивайте, тестируйте. Будут вопросы — пишите.
Готовый пример для акций, класс — TQBR.
Список всех классов выводится на вторую строку лог-файла.
-- seclist_csv.lua, © smart-lab.ru/profile/XXM/ -- список бумаг, транслируемые QUIK-ом local ver = '0.91' -- 22.12.2016 local scriptPath = getScriptPath() local Terminal_Version=getInfoParam('VERSION') local logFile = scriptPath..'\\'..'seclist.csv' local file = io.open(logFile, "w") assert(file, "Ошибка открытия "..logFile) function string.split(str, sep) local fields = {} str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end) return fields end function write_log(str) file:write(str .. "\n") end function Main() local local_datetime = os.time(os.date("*t")) local dtd = os.date("%d.%m.%Y %H:%M",local_datetime) local mes = 'Start seclist_csv '..ver..', QUIK '..Terminal_Version..', '..dtd message(mes); file:write(mes .. "\n") class_list = getClassesList() mes = 'class_list = '..class_list message(mes); write_log(mes); local class_listT = {} class_listT = string.split(class_list, ',') for i = 1, #class_listT do local fline = class_listT[i] if fline == 'TQBR' then -- для примера - только акции! local classInfo = {} classInfo = getClassInfo(fline) -- 3.2.2 getClassInfo -- Функция предназначена для получения информации о классе. local sec_list = getClassSecurities(classInfo.code) local sec_listTable = {} sec_listTable = string.split(sec_list, ',') for i = 1, #sec_listTable do local classCode = classInfo.code local secCode = sec_listTable[i] local securityInfo = getSecurityInfo(classCode, secCode) local name = securityInfo.name local step = securityInfo.min_price_step local secInfo = classInfo.name..';'..classCode..';'..name..';'..secCode..';'..step write_log(secInfo); end end end local mes = 'Готово!' message(mes); write_log(mes); file:flush() file:close() end Main() -- seclist_csv.luaНа выходе получил список из 292 ценных бумаг.
1. Визуализация сделок участников ЛЧИ-2015 в Quik.
2. Визуализация сделок участников ЛЧИ-2015 в Quik. Часть 2.
3. Скачать индикаторы на языке Lua.
На ЛЧИ 2016 не запускал, вирусов нет, применяйте, как хотите, не хотите — не применяйте.
UPD 19:17, 26.09.2016:
Написали сообщение: «Индикаторы для ЛЧИ-2016 подходят»
#ДоброПропадает