Как сделать поле ввода цены в таблице CreateTable?

Страницы: 1
RSS
Как сделать поле ввода цены в таблице CreateTable?
 
Добрый день

Сделал информационную табличку. Настроил функцию на нажатие мышкой на определенную ячейку таблицы

Но как сделать так что бы в ячейку можно было поместить текст или число из терминала при запущенном скрипте??
Как присваивать значения из скрипта тут все ясно и понятно , но как это сделать «с экрана»??

спасибо!
 
Вообщем надо чтобы при клике мышкой на ячейку таблицы туда (в ячейку) можно было записать число или текст
 
Код
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
 
Спасибо тебе добрый человек за выложенный скрипт
А на пальцах можешь обьяснить ?)))
 
Цитата
Alex написал:
Спасибо тебе добрый человек за выложенный скриптА на пальцах можешь обьяснить ?)))
Запускаем этот пример. В полях меняем переменные с "экрана". Этот пример написан аж в 2016 г. судя по коду инструмента, сейчас то по другому несколько делаю (параметры в цикле - строк гораздо меньше), но принцип тот же.
 
Сбрось пож-ста вариант с циклами. У меня много ячеек и код будет гигантский)

Спасибо
Страницы: 1
Читают тему (гостей: 1)
Наверх