Account = "SPBFUT00625" -- Торговый счет
Table = "Straddle" -- Заголовок таблицы, комментарий
trans_id = 111 -- Старт номеров транзакций
Sec_Opt = "RI100000BL6" -- Код опциона (ближний к Start страйк, подберем автоматом)
Step_Str = 2500 -- Шаг страйка
Comm_Opt = 8 -- Комиссия опциона (биржа + брокер на "круг" по 1-му лоту) в пунктах
O_Lots = 2 -- Лот опциона
Sec_Fut = "RIZ6" -- Код фьючерса
Comm_Fut = 6 -- Комиссия фьючерса (биржа + брокер на "круг" по 1-му лоту) в пунктах
F_Lots = 1 -- Лот фьючерса
Start = 100000 -- Старт, "0" открыть сразу
Indent = 50 -- Отступ от Start вверх/вниз в пунктах
Trade = 1 -- Если прибыль >= Min_Prof/Max_Prof то закрыть все, если "0" торгуем бесконечно, "1" остановка
Min_Prof = 30 -- Мин профит в пунктах
Max_Prof = 10000 -- Макс профит в пунктах
---------------------------------------------------------------------------------------------------------
is_run = true
Timer = os.clock()
---------------------------------------------------------------------------------------------------------
function OnInit() -- Функция вызывается терминалом QUIK перед вызовом функции main()
-- Присвоили параметру "|"; Кол-во символов
Account_Text = Account.."|"; Account_Cursor = #tostring(Account)
Table_Text = Table.."|"; Table_Cursor = #tostring(Table)
trans_id_Text = trans_id.."|"; trans_id_Cursor = #tostring(trans_id)
Sec_Opt_Text = Sec_Opt.."|"; Sec_Opt_Cursor = #tostring(Sec_Opt)
Step_Str_Text = Step_Str.."|"; Step_Str_Cursor = #tostring(Step_Str)
Comm_Opt_Text = Comm_Opt.."|"; Comm_Opt_Cursor = #tostring(Comm_Opt)
O_Lots_Text = O_Lots.."|"; O_Lots_Cursor = #tostring(O_Lots)
Sec_Fut_Text = Sec_Fut.."|"; Sec_Fut_Cursor = #tostring(Sec_Fut)
Comm_Fut_Text = Comm_Fut.."|"; Comm_Fut_Cursor = #tostring(Comm_Fut)
F_Lots_Text = F_Lots.."|"; F_Lots_Cursor = #tostring(F_Lots)
Start_Text = Start.."|"; Start_Cursor = #tostring(Start)
Indent_Text = Indent.."|"; Indent_Cursor = #tostring(Indent)
Trade_Text = Trade.."|"; Trade_Cursor = #tostring(Trade)
Min_Prof_Text = Min_Prof.."|"; Min_Prof_Cursor = #tostring(Min_Prof)
Max_Prof_Text = Max_Prof.."|"; Max_Prof_Cursor = #tostring(Max_Prof)
CreateTableMenu() -- Создать таблицу меню
end
function main() -- Функция, реализующая основной поток выполнения в скрипте
while is_run do -- Цикл будет выполнятся, пока is_run == true
Cursor()
sleep(100)
end
end
function CreateTableMenu() -- Функция создает таблицу меню
t_id_Menu = AllocTable() -- Получает доступный id
-- Добавляет колонки
AddColumn(t_id_Menu, 0, "", true, QTABLE_STRING_TYPE, 16)
AddColumn(t_id_Menu, 1, "", true, QTABLE_STRING_TYPE, 16)
AddColumn(t_id_Menu, 2, "", true, QTABLE_STRING_TYPE, 16)
AddColumn(t_id_Menu, 3, "", true, QTABLE_STRING_TYPE, 8)
CreateWindow(t_id_Menu) -- Создает таблицу
SetWindowCaption(t_id_Menu, "Straddle/Параметры") -- Устанавливает заголовок
SetWindowPos(t_id_Menu, 682, 209, 331, 218) -- Задает положение и размеры окна таблицы
for i = 1, 11, 1 do InsertRow(t_id_Menu, i) end -- Добавляет строки
-- Добавляет значения в ячейки
SetCell(t_id_Menu, 1, 0, "Счет"); SetCell(t_id_Menu, 1, 1, Account)
SetCell(t_id_Menu, 2, 0, "Табл/Коммент"); SetCell(t_id_Menu, 2, 1, Table)
SetCell(t_id_Menu, 3, 0, "№ транзакций"); SetCell(t_id_Menu, 3, 1, tostring(trans_id))
SetCell(t_id_Menu, 4, 0, "Шаг страйка"); SetCell(t_id_Menu, 4, 1, tostring(Step_Str))
SetCell(t_id_Menu, 1, 2, "Старт"); SetCell(t_id_Menu, 1, 3, tostring(Start))
SetCell(t_id_Menu, 2, 2, "Отступ"); SetCell(t_id_Menu, 2, 3, tostring(Indent))
SetCell(t_id_Menu, 3, 2, "Торговля"); SetCell(t_id_Menu, 3, 3, tostring(Trade))
SetCell(t_id_Menu, 4, 2, "Мин профит"); SetCell(t_id_Menu, 4, 3, tostring(Min_Prof))
SetCell(t_id_Menu, 5, 2, "Макс профит"); SetCell(t_id_Menu, 5, 3, tostring(Max_Prof))
Gray(t_id_Menu, 6)
SetCell(t_id_Menu, 7, 0, "Опцион"); SetCell(t_id_Menu, 7, 1, Sec_Opt)
SetCell(t_id_Menu, 8, 0, "Комиссия"); SetCell(t_id_Menu, 8, 1, tostring(Comm_Opt))
SetCell(t_id_Menu, 9, 0, "Лот"); SetCell(t_id_Menu, 9, 1, tostring(O_Lots))
SetCell(t_id_Menu, 7, 2, "Фьючерс"); SetCell(t_id_Menu, 7, 3, Sec_Fut)
SetCell(t_id_Menu, 8, 2, "Комиссия"); SetCell(t_id_Menu, 8, 3, tostring(Comm_Fut))
SetCell(t_id_Menu, 9, 2, "Лот"); SetCell(t_id_Menu, 9, 3, tostring(F_Lots))
Gray(t_id_Menu, 10)
SetCell(t_id_Menu, 11, 0, "СТАРТ"); Green(t_id_Menu, 11, 0)
-- Назначает таблице t_id_Menu функцию обработки кликов
SetTableNotificationCallback(t_id_Menu, OnClick)
end
function OnStop() -- Функция вызывается терминалом QUIK при остановке скрипта из диалога управления
DestroyTable(t_id_Menu)
is_run = false
end
-- Функции по раскраске ячеек таблицы
function White(t_id, line, column) -- Белый
SetColor(t_id, line, column, RGB(255,255,255), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))
end
function Green(t_id, line, column) -- Зеленый
SetColor(t_id, line, column, RGB(165,227,128), RGB(0,0,0), RGB(165,227,128), RGB(0,0,0))
end
function Red(t_id, line, column) -- Красный
SetColor(t_id, line, column, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0))
end
function Gray(t_id, line, column) -- Серый
if column == nil then column = QTABLE_NO_INDEX end -- Если индекс столбца не указан, окрашивает всю строку
SetColor(t_id, line, column, RGB(208,208,208), RGB(0,0,0), RGB(208,208,208), RGB(0,0,0))
end
-- Функция для подсветки выбранного диапазона ячеек цветом фона и цветом текста в течении указанного времени с плавным «затуханием» для таблицы с идентификатором «t_id»
function BlueAtten(t_id, line, column) -- Синий
Highlight(t_id, line, column, RGB(44,112,188), RGB(255,255,255), 100)
end
function OnClick(t_id, event, line, column) -- Функция обработки кликов в таблицах
if event == QTABLE_LBUTTONUP then -- Отпущена левая кнопка мыши, при этом par1 содержит номер строки, par2 – номер колонки
if t_id == t_id_Menu then -- Таблица меню
Account_Inputing = false; SetCell(t_id_Menu, 1, 1, tostring(Account))
Table_Inputing = false; SetCell(t_id_Menu, 2, 1, tostring(Table))
trans_id_Inputing = false; SetCell(t_id_Menu, 3, 1, tostring(trans_id))
Step_Str_Inputing = false; SetCell(t_id_Menu, 4, 1, tostring(Step_Str))
Sec_Opt_Inputing = false; SetCell(t_id_Menu, 7, 1, tostring(Sec_Opt))
Comm_Opt_Inputing = false; SetCell(t_id_Menu, 8, 1, tostring(Comm_Opt))
O_Lots_Inputing = false; SetCell(t_id_Menu, 9, 1, tostring(O_Lots))
Start_Inputing = false; SetCell(t_id_Menu, 1, 3, tostring(Start))
Indent_Inputing = false; SetCell(t_id_Menu, 2, 3, tostring(Indent))
Trade_Inputing = false; SetCell(t_id_Menu, 3, 3, tostring(Trade))
Min_Prof_Inputing = false; SetCell(t_id_Menu, 4, 3, tostring(Min_Prof))
Max_Prof_Inputing = false; SetCell(t_id_Menu, 5, 3, tostring(Max_Prof))
Sec_Fut_Inputing = false; SetCell(t_id_Menu, 7, 3, tostring(Sec_Fut))
Comm_Fut_Inputing = false; SetCell(t_id_Menu, 8, 3, tostring(Comm_Fut))
F_Lots_Inputing = false; SetCell(t_id_Menu, 9, 3, tostring(F_Lots))
if line == 1 and column == 1 then Account_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 2 and column == 1 then Table_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 3 and column == 1 then trans_id_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 4 and column == 1 then Step_Str_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 7 and column == 1 then Sec_Opt_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 8 and column == 1 then Comm_Opt_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 9 and column == 1 then O_Lots_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 1 and column == 3 then Start_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 2 and column == 3 then Indent_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 3 and column == 3 then Trade_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 4 and column == 3 then Min_Prof_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 5 and column == 3 then Max_Prof_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 7 and column == 3 then Sec_Fut_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 8 and column == 3 then Comm_Fut_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 9 and column == 3 then F_Lots_Inputing = true; BlueAtten(t_id_Menu, line, column)
elseif line == 11 and column == 0 then
--CreateTable()
DestroyTable(t_id_Menu)
end
end
elseif event == QTABLE_CHAR then -- Нажата символьная клавиша, при этом par2 содержит код клавиши, par1 – текущую выделенную строку
if Account_Inputing then
Arr = Parameter(1, 1, column, Account_Text, Account_Cursor)
Account_Text = Arr.text; Account_Cursor = Arr.cursor; Account = Arr.param
end
if Table_Inputing then
Arr = Parameter(2, 1, column, Table_Text, Table_Cursor)
Table_Text = Arr.text; Table_Cursor = Arr.cursor; Table = Arr.param
end
if trans_id_Inputing then
Arr = Parameter(3, 1, column, trans_id_Text, trans_id_Cursor)
trans_id_Text = Arr.text; trans_id_Cursor = Arr.cursor; trans_id = tonumber(Arr.param)
end
if Step_Str_Inputing then
Arr = Parameter(4, 1, column, Step_Str_Text, Step_Str_Cursor)
Step_Str_Text = Arr.text; Step_Str_Cursor = Arr.cursor; Step_Str = tonumber(Arr.param)
end
if Sec_Opt_Inputing then
Arr = Parameter(7, 1, column, Sec_Opt_Text, Sec_Opt_Cursor)
Sec_Opt_Text = Arr.text; Sec_Opt_Cursor = Arr.cursor; Sec_Opt = Arr.param
end
if Comm_Opt_Inputing then
Arr = Parameter(8, 1, column, Comm_Opt_Text, Comm_Opt_Cursor)
Comm_Opt_Text = Arr.text; Comm_Opt_Cursor = Arr.cursor; Comm_Opt = tonumber(Arr.param)
end
if O_Lots_Inputing then
Arr = Parameter(9, 1, column, O_Lots_Text, O_Lots_Cursor)
O_Lots_Text = Arr.text; O_Lots_Cursor = Arr.cursor; O_Lots = tonumber(Arr.param)
end
if Start_Inputing then
Arr = Parameter(1, 3, column, Start_Text, Start_Cursor)
Start_Text = Arr.text; Start_Cursor = Arr.cursor; Start = tonumber(Arr.param)
end
if Indent_Inputing then
Arr = Parameter(2, 3, column, Indent_Text, Indent_Cursor)
Indent_Text = Arr.text; Indent_Cursor = Arr.cursor; Indent = tonumber(Arr.param)
end
if Trade_Inputing then
Arr = Parameter(3, 3, column, Trade_Text, Trade_Cursor)
Trade_Text = Arr.text; Trade_Cursor = Arr.cursor; Trade = tonumber(Arr.param)
end
if Min_Prof_Inputing then
Arr = Parameter(4, 3, column, Min_Prof_Text, Min_Prof_Cursor)
Min_Prof_Text = Arr.text; Min_Prof_Cursor = Arr.cursor; Min_Prof = tonumber(Arr.param)
end
if Max_Prof_Inputing then
Arr = Parameter(5, 3, column, Max_Prof_Text, Max_Prof_Cursor)
Max_Prof_Text = Arr.text; Max_Prof_Cursor = Arr.cursor; Max_Prof = tonumber(Arr.param)
end
if Sec_Fut_Inputing then
Arr = Parameter(7, 3, column, Sec_Fut_Text, Sec_Fut_Cursor)
Sec_Fut_Text = Arr.text; Sec_Fut_Cursor = Arr.cursor; Sec_Fut = Arr.param
end
if Comm_Fut_Inputing then
Arr = Parameter(8, 3, column, Comm_Fut_Text, Comm_Fut_Cursor)
Comm_Fut_Text = Arr.text; Comm_Fut_Cursor = Arr.cursor; Comm_Fut = tonumber(Arr.param)
end
if F_Lots_Inputing then
Arr = Parameter(9, 3, column, F_Lots_Text, F_Lots_Cursor)
F_Lots_Text = Arr.text; F_Lots_Cursor = Arr.cursor; F_Lots = tonumber(Arr.param)
end
elseif event == QTABLE_CLOSE then -- Закрыть таблицу
if t_id == t_id_Menu then
OnStop() -- Завершает скрипт
end
end
end
function Parameter(line, column, key_code, text, cursor) -- Ввод параметров
if (32 <= key_code and key_code <= 126) or (192 <= key_code and key_code <= 255) then
if cursor == 0 then
text = string.char(key_code).."|"
else
text = string.sub(text, 1, cursor)..string.char(key_code).."|"
end
cursor = cursor + 1
param = string.sub(text, 1, cursor)
SetCell(t_id_Menu, line, column, text)
elseif key_code == 8 then -- BACKSPACE
if cursor > 0 then
text = string.sub(text, 1, cursor - 1).."|"
cursor = cursor - 1
param = string.sub(text, 1, cursor)
if cursor == 0 then param = 0 end
SetCell(t_id_Menu, line, column, text)
end
end
return {["text"] = text, ["cursor"] = cursor, ["param"] = param}
end
function Cursor() -- Мигалка "|"
if os.clock() - Timer >= 0.5 then
if Account_Inputing then Account_Text = Curs(1, 1, Account_Text, Account_Cursor)
elseif Table_Inputing then Table_Text = Curs(2, 1, Table_Text, Table_Cursor)
elseif trans_id_Inputing then trans_id_Text = Curs(3, 1, trans_id_Text, trans_id_Cursor)
elseif Step_Str_Inputing then Step_Str_Text = Curs(4, 1, Step_Str_Text, Step_Str_Cursor)
elseif Sec_Opt_Inputing then Sec_Opt_Text = Curs(7, 1, Sec_Opt_Text, Sec_Opt_Cursor)
elseif Comm_Opt_Inputing then Comm_Opt_Text = Curs(8, 1, Comm_Opt_Text, Comm_Opt_Cursor)
elseif O_Lots_Inputing then O_Lots_Text = Curs(9, 1, O_Lots_Text, O_Lots_Cursor)
elseif Start_Inputing then Start_Text = Curs(1, 3, Start_Text, Start_Cursor)
elseif Indent_Inputing then Indent_Text = Curs(2, 3, Indent_Text, Indent_Cursor)
elseif Trade_Inputing then Trade_Text = Curs(3, 3, Trade_Text, Trade_Cursor)
elseif Min_Prof_Inputing then Min_Prof_Text = Curs(4, 3, Min_Prof_Text, Min_Prof_Cursor)
elseif Max_Prof_Inputing then Max_Prof_Text = Curs(5, 3, Max_Prof_Text, Max_Prof_Cursor)
elseif Sec_Fut_Inputing then Sec_Fut_Text = Curs(7, 3, Sec_Fut_Text, Sec_Fut_Cursor)
elseif Comm_Fut_Inputing then Comm_Fut_Text = Curs(8, 3, Comm_Fut_Text, Comm_Fut_Cursor)
elseif F_Lots_Inputing then F_Lots_Text = Curs(9, 3, F_Lots_Text, F_Lots_Cursor)
end
end
end
function Curs(line, column, text, cursor) -- Мигалка "|"
if string.sub(text, cursor + 1, cursor + 1) == "|" then -- Если курсор есть
text = string.gsub(text, "|", " ") -- Удалить курсор
SetCell(t_id_Menu, line, column, text)
Timer = os.clock()
else
text = string.gsub(text, " ", "|") -- Показать курсор
SetCell(t_id_Menu, line, column, text)
Timer = os.clock()
end
return text -- Вернуть текст с курсором или без него
end
|