Константин Рейм (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Функция возвращает код класса по коду инструмента
 
Вот так работает
Код
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
   --------------------------------------------------------------------------------------------------------------------------
   for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*_*%P*),") do
      for sec in string_gmatch(getClassSecurities(class), "(%P*%.*%P*-*%P*),") do
         if sec == code then return class end
      end
   end
   --------------------------------------------------------------------------------------------------------------------------
end
Функция возвращает код класса по коду инструмента
 
Спасибо
Функция возвращает код класса по коду инструмента
 
Код
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
   --------------------------------------------------------------------------------------------------------------------------
   for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*),") do
      for sec in string_gmatch(getClassSecurities(class), "(%P*_*%P*_*%P*),") do
         if sec == code then return class end
      end
   end
   --------------------------------------------------------------------------------------------------------------------------
end

Здравствуйте. Функция не возвращает код класса: "STOCK_USA" и "FQBR" ("SPBXM" - не проверял). В чем подвох?

Ошибка в отрисовки таблиц
 
Вероятно таблица создается
function OnInit(script_path) -- Функция вызывается терминалом QUIK перед вызовом функции main()
  здесь
end
Создайте ее вот
function main() -- Функция, реализующая основной поток выполнения в скрипте
  здесь
end
Как отловить когда сработал стоп
 
Цитата
xorax написал:
Перечитайте мои сообщения.
А может ответы на ваши вопросы внимательнее изучать?)))
Цитата
В какой лимитной заявке? Когда выставляется стоп, ни какой лимитной заявки нет. Лимитная заявка выставляется только после того, как  условия выполнились согласно указанным условиям  в стоп заявке или в тейке.
Все верно. Теперь нам нужно
Цитата
Всё бы хорошо, но я не могу отловить сам результат выполнения стоп заявки, когда стоп исполнился.
В моём понимании когда срабатывает стоп, создаётся новая заявка с новым номером заявки которая не равна номеру стопа.
Хотелось бы увидеть схему OnStopOrder -> ...  -> ...  -> здесь признак того что стоп сработал.
Сработала стоп-заявка - нужно это действие отследить, так?
В таблице стоп-заявок есть поля: Номер и Номер заявки. Поле Номер - это номер нашей стоп-заявки, поле Номер заявки - это номер лимитной заявки - данное поле при выставлении стоп-заявки пустое, как только наша стоп-заявка превратится в лимитную - это поле заполнится - номер лимитной заявки - все.
контроль исколнения многоконтрактовой заявки в quik 8.6
 
Через Таблица сделок
Как отловить когда сработал стоп
 
Цитата
Демидков Юрий написал:
Дальше где-то откопать номер выставленной лимитированной заявки.
Пример для таблицы заявок.
linkedorder - в таблице стоп-заявок и есть номер лимитки.
Код
function CheckOrders() -- Функция проверяет таблицу заявок
   local gNOf = getNumberOf("orders")-1 -- Номер последней строки в таблице заявок
   for i = NumLineTO+1, gNOf, 1 do -- Перебирает строки в таблице заявок начиная от NumLineTO+1
      local orders = getItem("orders",i) -- Параметры заявки

      ...
   
      local num = 0 -- Номер заявки
      if bit.test(orders.flags, 0) then -- Заявка активна
         num = orders.order_num -- Контроль заявки
      end
      local stopNum = orders.linkedorder -- Номер стоп-заявки

      ...

   end
end
TRANS_ID, Значение на сегодня?
 
Цитата
Sergey Gorokhov написал:
2 147 483 647
Для id = 3 333 333 333 - транзакция уходит - и в таблице транзакций видим не 3 333 333 333, а присваивается № 2 147 483 647. Для id = 4 444 444 444 - ошибка - Неправильно указан идентификатор транзакции: "4444444444". По этому и возник вопрос. Ладно формат ххх ххх ххх - будет достаточно. Всем спасибо.
TRANS_ID, Значение на сегодня?
 
Из описания QLUA.chm: TRANS_ID -- Уникальный идентификационный номер заявки, значение от «1» до «2 147 483 647»
Реальное максимально допустимое значение на сегодня?
Работа с опционами, Где взять данные по дельте и временной стоимости опционов?
 
Цитата
Демидков Юрий написал:
Не могу найти, как получить данные, которые отображаются в доске опционов.
Эти данные не транслируются - надо рассчитывать в скрипте
Как отследить событие - перерыв в торгах на фортс
 
Цитата
Дмитрий написал:
Не знаю, может что делаю не правильно, но код выдает ошибку
Код
function Round(num, n) -- Функция округляет до указанного количества знаков
   local n = (n or 0)
   return tonumber(string_format("%."..n.."f", num))
end
Эту функцию еще добавить надо.
В принципе то можно без нее. Но тогда вот так
Код
Status = tonumber(getParamEx(CLASS_CODE, SEC_CODE , "status").param_value)
но опять результат будет = 1.0 например (8.5 квик). А функция Round - .0 уберет, это у меня бзик - по "феншую" должно быть и все))). А так эта функция в основном то нужна сейчас для объема и цены - приходит объем 3.0, цена по РТС например 100 000.0 - не порядок.
Как отследить событие - перерыв в торгах на фортс
 
Код
 Status = Round(getParamEx("SPBFUT", Fut, "status").param_value) -- Торговля разрешена/не разрешена
Постоянно проверяется. Такой вариант не подходит?
Как отследить событие - перерыв в торгах на фортс
 
Цитата
Дмитрий написал:
и после 18:45
Так фортс до 23-50
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
#18 - пост наглядный скрин
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Цитата
Egor Zaytsev написал:
В таком случае потребуется ваше рабочее место (без ключей) и скрипт или парочку на которых возникает проблема.
Вот здесь такая же проблема
https://forum.quik.ru/messages/forum10/message45090/topic5348/#message45090
а следовательно, дело не в моем терминале и тем более не в моих скриптах.
фьючерс на индекс ртс, в таблице сделок
 
Цитата
Anna Lozenko написал:
если изменилась стоимость шага цены
Изменение происходит во время клиринга или по ходу торгов?
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Цитата
Egor Zaytsev написал:
Добавьте скрипты в таблицу. Закройте QUIK, удалите файла scripts.dat (из директории с программой) запустите QUIK проверьте таблицу "Доступные скрипты". Сообщите результат.
Добавил, закрыл, удалил, запустил, проверил - "Доступные скрипты" - пустая таблица.
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Цитата
Egor Zaytsev написал:
С данным вопросом нужно разбираться. Попробуйте запустить QUIK от имени администратора, нажав правой кнопкой мыши по ярлыку с программой и выбрав "запуск от имени администратора"
Картина та же. Запустил 4 скрипта. 1,2,3,4. 2й - удалил. На место 2ого встал 3й скрипт, на место 3ого - 4й - все правильно, но только "зеленые треугольники" - осталось = 4. Далее удалил все скрипты - в терминале в РАБОЧЕМ состоянии остался один скрипт, при этом в поле Загруженные скрипты - НЕТ ни одного скрипта. Попытался добавить вновь удаленный скрипт пишет - "Выбранный скрипт уже был загружен. Добавить его еще раз?"
На первом добавлении скриптов - 3й скрипт с ошибкой - специально посмотреть на вывод ошибки - да выводит ошибку в поле "Ошибки выполнения скрипта" - все хорошо. После удаления из "Доступные скрипты" всех скриптов и повторном добавлении - 3ого (с ошибкой) скрипта - в поле "Ошибки выполнения скрипта" - сообщения об ошибке нет. Удалил все скрипты - закрыл терминал - открыл терминал - все ранее добавленные скрипты - оказались загруженными.
Заходил от имени администратора как вы и предложили.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
SPBOPT - класс опционов, месяц, неделя
OPTW - класс недельного опциона у некоторых брокеров
А по большому счету эта функция нужна для корректного ввода инструмента из меню.
Есть инструмент - все работает - нет инструмента - класс - nil - подсветка о ошибке ввода и ничего не работает.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
Код
function GetClassBySec(sec_code) -- Функция возвращает код класса по коду инструмента
   for class_code in string_gmatch("QJSIM,TQBR,SPBFUT,SPBOPT,CETS,OPTW,", "(%P*),") do -- Добавить код если надо
      for sec in string_gmatch(getClassSecurities(class_code), "(%P*_*%P*_*%P*),") do
         if sec == sec_code then return class_code end
      end
   end
end
Заявка на покупку акции после определённого отката вниз от определённой цены., Заявка на покупку акции после определённого отката вниз от определённой цены.
 
Можно работа написать такого
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Цитата
swerg написал:
Этот колхоз имени 8 марта меня искренне поражает.
Я сам коды пишу на Lua. Прекрасно понимаю что такое процесс написания. В процессе - ошибки есть и будут - это нормально, но на выходе проверка идет тотальная - проверятся все от и до - чтобы все работало как надо. Понятное дело что все мы люди и ошибки какие то могут быть допущены. НО здесь то явно не скрытая ошибка которую тяжело выявить, здесь реальный косяк на лицо.
Удалил все скрипты из таблица Загруженные скрипты - выключил терминал - включил - все скрипты на месте как будто и не удалял.
Я пишу здесь не с целью критики или обвинений, а с целью обращения вашего внимания на явный недочет и скорейшее устранение этих неполадок.
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Как то так получилось - в таблице один скрипт запущен, а в квике 2 работают.
таблица Доступные скрипты 8.5.2.11, таблица Доступные скрипты 8.5.2.11
 
Квик 8.5.2.11. Беда прямо с этой таблицей. Уважаемые разработчики пожалуйста приведите в порядок. Добавляем несколько скриптов - при удалении из "середины" - начинается "карусель". При добавлении скрипта - пишет что этот скрипт уже есть. В общем там много сюрпризов. Это касается и демо и реала.
как решить проблему в новом квике 8.5, когда tostring (целое число) выдает дробь?
 
Цитата
Sergey Denegin написал:
но tostring упорно дает на выходе "1.0".
Код
function Round(num, n) -- Функция округляет до указанного количества знаков
   local n = (n or 0)
 return tonumber(string_format("%."..n.."f", num))
end
Несколько Lua-роботов на 1 инструменте
 
Цитата
Imersio Arrigo написал:
То ли я спрашивать не умею, то ли что...
Лыжи не едут)))
Цитата
Imersio Arrigo написал:
Не понимаю КОГДА это происходит?Просто в основном цикле main?
Да просто в main. При дисконекте какие там события, то? А так обрыв связи - лимитка прошла - связь восстановлена - проверили таблицу и 100% ни чего не потеряли.
Несколько Lua-роботов на 1 инструменте
 
Цитата
Imersio Arrigo написал:
Когда и как вы решаете, что пора проверить кол-во строк в таблице?
Пример уже приводил. Когда getNumberOf("trades")-1 (Номер последней строки в таблице сделок) станет больше чем NumLineTT (Запомнили последнюю строку таблицы сделок)
Несколько Lua-роботов на 1 инструменте
 
Цитата
Imersio Arrigo написал:
Это в цикле выполняется или по событию? когда и как вы узнаете что пора это делать?
Код
local gNOf = getNumberOf("trades")-1 -- Номер последней строки в таблице сделок

NumLineTT = gNOf -- Запомнили последнюю строку таблицы сделок
Несколько Lua-роботов на 1 инструменте
 
Цитата
Иван написал:
Судя по ответам прихожу к выводу что проблематично это нескольких роботов запускать на 1 инструмент в рамках 1 счета.
Каждый бот ведет свои и только свои сделки - ни каких проблем нет совсем.
Несколько Lua-роботов на 1 инструменте
 
Цитата
Imersio Arrigo написал:
А почему? Это же логично, чем все время опрашивать таблицу.
Обрыв связи - потеряли сделку. Не все время, а только при появлении новой строки.
Цитата
Imersio Arrigo написал:
А как вы узнаете что появилась новая строка?
Код
      if NumLineTT < getNumberOf("trades")-1 then -- Появилась новая строка в таблице сделок
         CheckDeal() -- Проверим таблицу сделок
      end
Несколько Lua-роботов на 1 инструменте
 
Цитата
Imersio Arrigo написал:
а контролировать OnTrade()
OnTrade() - не использую, только таблица сделок
Несколько Lua-роботов на 1 инструменте
 
Цитата
Иван написал:
нужно постоянно анализировать таблицу сделок?
Нет, анализ только если появилась новая строка в Таблице сделок - зашел посмотрел - мое не мое
Несколько Lua-роботов на 1 инструменте
 
Цитата
Иван написал:
идентификатор в поле комментарий при открытии/закрытии позиций
На одном инструменте хоть сто роботов могут торговать и каждый по свой логике. Фильтр по комментарию как раз дает такую возможность - новый бот - новый уникальный комент. У меня имя робота - это комментарий к заявке - если имена ботов разные - торгуем хоть миллиард стратегий на одном инструменте.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
swerg написал:
Давно есть метатрейдер с выходом на биржу.
Там опционов нет.
Разрыв соединения, Квик разрывает соединение при подключении с утра
 
Цитата
Sergey Denegin написал:
У вас какой брокер?
Открытие
Разрыв соединения, Квик разрывает соединение при подключении с утра
 
Цитата
Максим написал:
у меня еще скриптов много в Квике просто...
Скриптов у меня то же предостаточно (в данный момент 10 запущено). Версия 8.3.2.4 - раз в сутки примерно квик зависает и ни как не реагирует. Перезапуск только через Диспетчер задач. Об этом ни хотел даже писать все равно на 8.5 скоро переходить. Так вот раньше такого то же не было. На более ранних версиях гораздо больше скриптов работало и все нормально было. В общем одни претензии у этих пользователей, понапишут скриптов, а потом жалуются)))
Разрыв соединения, Квик разрывает соединение при подключении с утра
 
Цитата
Максим написал:
мне поддержка Финама
У вас Финам, у меня Открытие. Наводит на мысль что действительно дело не в серверах, а в квике? Пишу не просто так, а для того чтобы разработчики обратили внимание и сделали орг. выводы - надо что то делать.
Как сделать поле ввода цены в таблице CreateTable?
 
Цитата
Alex написал:
Спасибо тебе добрый человек за выложенный скриптА на пальцах можешь обьяснить ?)))
Запускаем этот пример. В полях меняем переменные с "экрана". Этот пример написан аж в 2016 г. судя по коду инструмента, сейчас то по другому несколько делаю (параметры в цикле - строк гораздо меньше), но принцип тот же.
Как сделать поле ввода цены в таблице 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
Разрыв соединения, Квик разрывает соединение при подключении с утра
 
Цитата
Максим написал:
а на другом сервере все сразу работает у вас?
Нет не сразу. Пытаюсь подключаться по порядку 1,2,3... сервер. Сколько на это времени уходит не обращал внимания, но точно не быстро.
Разрыв соединения, Квик разрывает соединение при подключении с утра
 
Цитата
Sergey Denegin написал:
Что толку присылать архив, если ситуация нестабильная? Весь день может нормально работать, с одной и той же конфигурацией, а потом бац
Присоединяюсь к негодованию. Нас уже 3-е в этой ветке, а это уже статистика. А кроме шуток - есть такая же беда с "Удалённый хост принудительно разорвал существующее подключение". Предположений и гипотез ни когда не делал по этому поводу, а просто переключаюсь на другой сервер - НО это понятное дело совсем не дело. Конфигурация - 1 график, 2-е МА для красоты и несколько скриптов.
Можно ли иметь разнонаправленные позиции?
 
Цитата
Imersio Arrigo написал:
Да мало ли что там в скрине видно. У себя в программе я могу что угодно показать.Покажите таблицу квика где будет видно 2 шорта и 1 лонг одного инструмента.
2 шорта и 1 лонг = 1 шорт
Речь идет о том что есть 2 шорта открытых, человек хочет открыть лонг, открывает 1 лонг - тем самым закрывает по факту 1 шорт, потом этот лонг закрывает с профитом - получается снова 2 шорта. Можно так делать - да. Есть в этом смысл? - это уже другой разговор.
Можно ли иметь разнонаправленные позиции?
 
Цитата
Imersio Arrigo написал:
А че эт за спам?Какое это имеет отношение к обсуждаемому вопросу?
В скрине четко видно 2 шорта и 1 лонг одного инструмента.
Можно ли иметь разнонаправленные позиции?
 
Цитата
Imersio Arrigo написал:
Цитата
Константин Рейм написал:
Ссылку в личку скинул - там точно по теме)))
А можно всем посмотреть?
Да
Можно ли иметь разнонаправленные позиции?
 
Цитата
q2763 написал:
А что там?
Ссылку в личку скинул - там точно по теме)))
Можно ли иметь разнонаправленные позиции?
 
Это подойдет?
Как отключить выпадающее меню сортировки при правом клике мышкой на ячейку таблицы в новой версии LUA?
 
Цитата
Sergey Denegin написал:
Я предпочитаю устранять причину "косяков". а не их следствие.
Поддерживаю
Жизнеспособность идеи - 100 контрактов = 100 стоп-ордеров по 1 контракту каждый
 
Цитата
Иван написал:
И получается что вы снимаете всю пачку стоп-пов и их по новому переставляете.
Нет не получается. Из примера видно что стоп эта одна заявка объемом в 10 лотов. Если бы у меня было 10 заявок по 1 лоту, то в этом случае вообще ни чего не нужно переставлять.
Жизнеспособность идеи - 100 контрактов = 100 стоп-ордеров по 1 контракту каждый
 
Цитата
Иван написал:
Получается это никак не отличается от события OnTrade().Вы отслеживаете число. Хотя я пробовал отслеживать кол-во из таблицы ограничений по клиентским счетам.
OnTrade() при обрыве связи вы потеряете сделки, а в таблице сделок нет. В "Ограничения по клиентским счетам" нет объема, вы перепутали видимо с таблицей "Позиции по клиентским счетам (Фьючерсы)".
Жизнеспособность идеи - 100 контрактов = 100 стоп-ордеров по 1 контракту каждый
 
Простой пример. Есть робот - отслеживает ваши ручные манипуляции. Открыли руками 10 лотов - робот это увидел через Таблицу сделок (они - сделки там появились). Как только открыли 10 лотов, бот самостоятельно уже без вашего участия выставил по за ранее заданным вами параметрам стоп и тейк. Потом вы решили закрыть руками 3 лота - закрываем 3 лота - 3 закрытых лота так же появились в Таблице сделок - бот видит что закрыто 3 лота - значит открытая ранее позиция на 10 лотов сократилась и стала 7 лотов. Бот заявки стоп и тейк по 10 лотов снимает и выставляет по 7 лотов.
Страницы: 1 2 След.
Наверх