Алексей А. (Все сообщения пользователя)

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

Страницы: 1
Дублируются пользовательские сообщения из скрипта lua
 
Цитата
nikolz,
Может, у вас есть вариант решения проблемы, чтобы сообщения не повторялись?
Дублируются пользовательские сообщения из скрипта lua
 
Цитата
nikolz написал:
1) Зачем дублировать таблицу сделок?
Честно говоря, не знаю. Код работает, да и ладно.
Цитата
nikolz написал:
2) Если сделок миллион.
Миллиона не будет. Возможно, около 50.
Дублируются пользовательские сообщения из скрипта lua
 
Благодарю за ответ.
Вот здесь нашел решение - https://quik2dde.ru/viewtopic.php?id=310 .
Вставил в начало кода:
Код
t_trades = {}

И после function OnTrade(trade)
Код
   if t_trades[trade.order_num] then
   return
   end
   t_trades[trade.order_num] = true

Сейчас сообщения не повторяются.
Дублируются пользовательские сообщения из скрипта lua
 
Всем добрый день.

Есть такой код:
Код
ticker = {"VTBR"}
lot = {"1"}
trans_id = {os.time()+1}
account = "xxxxxx"
class_code = "yyyy"
client_code = "zzzzzzzz"
LastStatus = {nil}           
run = true         

function main()
   TransOpenPos() 
   while run do sleep(1) 
   end
end

function OnStop() 
   run = false 
end

function TransOpenPos()
   for j = 1, #ticker do
      local Transaction={
         ACCOUNT = account;
         CLIENT_CODE = client_code;
         CLASSCODE = class_code;
         SECCODE = ticker[j];
         ACTION = 'NEW_ORDER';
         OPERATION = 'S';
         TYPE = 'M';
         PRICE = 0;
         QUANTITY = lot[j];
         TRANS_ID = tostring(trans_id[j]);
      }
      local Res = sendTransaction(Transaction)
      if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') 
      end
   end
end

function OnTrade(trade)
   for j = 1, #ticker do
      if trade.trans_id == trans_id[j] then
         sleep(100);
         message('OnTrade(): По транзакции №'..trade.trans_id..' успешно совершена сделка №'..trade.trade_num..' по цене '..trade.price..' объемом '..trade.qty) 
         qty_trades = getNumberOf("trades"); 
         num_trade = 0; 
         for i = 0, qty_trades - 1 do 
            trade_find = getItem("trades", i); 
            if trade_find.sec_code == ticker then 
               num_trade = trade_find.trade_num
            end
         end
         message("Номер сделки в торговой системе - "..trade.trade_num);
         sleep(100);   
      end
   end
end

Работает нормально, только после выполнения кода почему-то повторяются сообщения, которые находятся внутри functon OnTrade(trade). См. вложенный файл с серией сообщений после выполнения кода.
Подскажите, пожалуйста, с чем это связано и как исправить.

С уважением.
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
 
Нужно получить данные из колонки "Доступно".
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
 
Всем привет,

Подскажите, пожалуйста, как получить данные из колонки "Доступно" из таблицы "Позиции по инструментам" для режима торгов Т2 (см. вложенный скриншот).
Через getDepo не получается:
Код
function main()
   
   ticker = "ETLN"
   firmid = "XXXXXXXXXXXXX"
   clientcode = "XXXXXX"
   account = "XXXXX-XXXXXXXX" 
   
   depodata = getDepo(clientcode, firmid, ticker, account)
   dostupno = depodata.depo_limit_available   
   
   message (ticker.." "..dostupno)

end
При запуске скрипта результат по доступному количеству - ноль. А в getDepoEx нет параметра "Текущий остаток по бумагам".
Неприятность таблицы "Клиентский портфель", Вопрос "совсем новичка":
 
Цитата
Павел написал:
Код
Спасибо за код!
Робот-сканер нескольких инструментов в Quik Lua
 
Цитата
Алексей А. написал:
Не смог понять
Блин, это ж так прост оказалось))))))
Код
   instruments={{"AFKS", 1, 0.001, os.time()+1}, {"AFLT", 1, 0.01, os.time()+2}, {"AGRO", 1, 0.2, os.time()+3}}
   for _,val in ipairs(instruments) do
      message(val[1].." "..val[2].." "..val[3].." "..val[4])
   end
Робот-сканер нескольких инструментов в Quik Lua
 
Цитата
BlaZed написал:
instruments={{"class1","sec1"},{"class2","sec2"},{"class3","sec3"},{"class4","sec4"}}
for _,val in ipairs(instruments) do
  message(val[1].." "..val[2])
end
Не смог понять, как работает pair или ipairs, если много массивов...
Поэтому сделал так:

Код
function main ()
   ticker = {"AFKS", "AFLT", "AGRO"}
   lot = {"1", "1", "1"}
   pricestep = {"0.001", "0.01", "0.2"}
   trans_id = {os.time()+1, os.time()+2, os.time()+3}
      
   for i = 1, #ticker do
      ds = CreateDataSource("TQBR", ticker[i], INTERVAL_D1);
      sleep(400) 
      CandleNum = ds:Size()
      priceO = ds:O(CandleNum)
      orderprice = priceO * 1.05 - priceO * 1.05%pricestep[i]
      
      message ("Тикер "..ticker[i]..". Количество лотов: "..lot[i]..". Шаг цены: "..pricestep[i]..". Номер транзакции: "..trans_id[i]..". Цена: "..orderprice)
   end
   
   -- и дальше код ........
end
Робот-сканер нескольких инструментов в Quik Lua
 
Цитата
Владимир написал: for или while, можно даже goto, хотя это уже извращение.
Спасибо, нашел по ним информацию, изучаю.
Робот-сканер нескольких инструментов в Quik Lua
 
Спасибо за ответ. С "вечным циклом" и проверками разобрался.
Не подскажете, при помощи чего можно сделать цикл перебора инструментов?
Робот-сканер нескольких инструментов в Quik Lua
 
Всем добрый день.

Есть такой код Lua, который работает только по одному инструменту: при запуске в Quik смотрит цену открытия и закрытия, и если цена закрытия становится больше цены открытия на 5%, то покупает по рынку 1 лот.

Подскажите, пожалуйста, что добавить в скрипт, чтобы можно было запустить его один раз, чтобы постоянно мониторил цену, пока не отключишь его.
А если необходимо сканировать несколько инструментов, например, SIBN, SBER, как нужно изменить скрипт?

Код
stopped = false
function OnStop()
   stopped = true
   return 5000
end

function main()
   ticker = "SIBN"
   ds1, err = CreateDataSource("TQBR", ticker, INTERVAL_D1);
   sleep(400)
   CandleNum = ds1:Size()
   PriceC = ds1:C(CandleNum)
   PriceO = ds1:O(CandleNum)
   
   if PriceC > PriceO * 1.05 then -- Если цена закрытия становится больше цены открытия на 5%, то покупаем по рынку 1 лот
      
      A = {
         ACTION = 'NEW_ORDER',
         ACCOUNT = 'xxxxxxxxxxx',
         OPERATION = 'B', -- 'B' - покупка, 'S' - продажа
         CLASSCODE = 'TQBR', 
         SECCODE = ticker, 
         PRICE = tostring(0), 
         QUANTITY = tostring(1), -- количество лотов
         TRANS_ID = tostring(1000), -- идентификатор транзакции, чтобы программа распознавала транзакции, когда много сделок
         TYPE = 'M'
      }
      Err_A = sendTransaction(A)
      message("error: "..Err_A)
   end   
end


Я начал изучать Lua на прошлой неделе, поэтому мой уровень почти нулевой. Буду благодарен, если дадите какие-либо наводки, что изучать.
Как обрезать число типа float до 2х знаков после запятой
 
Цитата
Nikolay написал:
Стоит помнить о вычислениях с плавающей запятой.
Спасибо за уточнение!
Как обрезать число типа float до 2х знаков после запятой
 
Цитата
nikolz написал:
через строку - это медленное  решение
Согласен.

Поэтому позже нашел такое решение: NewStopPrice = PriceC * 1.01 - PriceC * 1.01%0.01.
Вот отсюда: https://bot4sale.ru/blog-menu/qlua/512-floor-to-step.html
Как обрезать число типа float до 2х знаков после запятой
 
Цитата
nikolz написал:
если 10 или 100 то она не работает, надо изменять последнюю цифру.
Правильно, последнюю цифру меняю в зависимости от количества символов.
string.sub(Название переменной,1,3) - оставляет 3 символа, начиная с 1-го слева, включая запятую (точку).
string.sub(Название переменной,1,5) - оставляет 5 символов, начиная с 1-го слева, включая запятую (точку).

Спасибо за y=string.sub(x,1,string.find(x,'.')+3).
Как обрезать число типа float до 2х знаков после запятой
 
10 или 100 чего будет?
Как обрезать число типа float до 2х знаков после запятой
 
Цитата
Владимир Ишанин написал:
string.sub(Название переменной,1,3) 1 - с первого символа и до 3 т.к. 2 знака после запятой..
Владимир, спасибо! Как раз то, что искал.))
Робот - оповещение о значениях RSI
 
Цитата
Николай написал:
своем Дзен-канал
Начал читать ваши уроки. Очень полезно, так как не программировал на lua никогда!))
Робот - оповещение о значениях RSI
 
Спасибо, что ответили. )) Нашел раньше market_scaner отсюда: https://www.bot4sale.ru/download-categories/2012-06-13-15-10-36/item/market-scaner.html
Робот - оповещение о значениях RSI
 
Всем добрый день,

Скажите, пожалуйста, может, есть где-либо в открытом доступе код робота Qpile, который бы оповещал о достижении определенных значений RSI, заданных в коде.
Всегда пользовался приложением "Альфа-инвестиции", где есть конструктор роботов (на C#), что очень удобно: любой пользователь, не знакомый с программированием, может создавать роботов. Однако, с переходом на Quik возникла описанная задача.
Робот - оповещение о значениях RSI
 
Всем добрый день,

Скажите, пожалуйста, может, есть где-либо в открытом доступе код робота Lua, который бы оповещал об определенных значениях RSI (по любому инструменту).
Всегда пользовался приложением "Альфа-инвестиции", где есть конструктор роботов (на C#), что очень удобно: любой пользователь, не знакомый с программированием, может создавать роботов. Однако, с переходом на Quik возникла описанная задача.
Страницы: 1
Наверх