Дублируются пользовательские сообщения из скрипта lua
Пользователь
Сообщений: Регистрация: 20.04.2023
09.06.2023 17:54:53
Благодарю за ответ. Вот здесь нашел решение - . Вставил в начало кода:
Код
t_trades = {}
И после function OnTrade(trade)
Код
if t_trades[trade.order_num] then
return
end
t_trades[trade.order_num] = true
Сейчас сообщения не повторяются.
Дублируются пользовательские сообщения из скрипта lua
Пользователь
Сообщений: Регистрация: 20.04.2023
09.06.2023 15:11:18
Всем добрый день.
Есть такой код:
Код
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). См. вложенный файл с серией сообщений после выполнения кода. Подскажите, пожалуйста, с чем это связано и как исправить.
С уважением.
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
Пользователь
Сообщений: Регистрация: 20.04.2023
30.05.2023 04:00:18
Нужно получить данные из колонки "Доступно".
Получить данные из колонки "Доступно" из таблицы "Позиции по инструментам"
Пользователь
Сообщений: Регистрация: 20.04.2023
29.05.2023 19:33:49
Всем привет,
Подскажите, пожалуйста, как получить данные из колонки "Доступно" из таблицы "Позиции по инструментам" для режима торгов Т2 (см. вложенный скриншот). Через getDepo не получается:
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
Пользователь
Сообщений: Регистрация: 20.04.2023
24.05.2023 16:48:24
Цитата
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
Пользователь
Сообщений: Регистрация: 20.04.2023
23.05.2023 10:44:30
Цитата
Владимир написал: for или while, можно даже goto, хотя это уже извращение.
Спасибо, нашел по ним информацию, изучаю.
Робот-сканер нескольких инструментов в Quik Lua
Пользователь
Сообщений: Регистрация: 20.04.2023
22.05.2023 20:46:50
Спасибо за ответ. С "вечным циклом" и проверками разобрался. Не подскажете, при помощи чего можно сделать цикл перебора инструментов?
Робот-сканер нескольких инструментов в Quik Lua
Пользователь
Сообщений: Регистрация: 20.04.2023
22.05.2023 15:20:30
Всем добрый день.
Есть такой код 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х знаков после запятой
Пользователь
Сообщений: Регистрация: 20.04.2023
21.05.2023 10:13:11
Цитата
Nikolay написал: Стоит помнить о вычислениях с плавающей запятой.
Спасибо за уточнение!
Как обрезать число типа float до 2х знаков после запятой
Пользователь
Сообщений: Регистрация: 20.04.2023
21.05.2023 07:47:33
Цитата
nikolz написал: через строку - это медленное решение
Согласен.
Поэтому позже нашел такое решение: NewStopPrice = PriceC * 1.01 - PriceC * 1.01%0.01. Вот отсюда:
Как обрезать число типа float до 2х знаков после запятой
Пользователь
Сообщений: Регистрация: 20.04.2023
21.05.2023 07:45:04
Цитата
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х знаков после запятой
Пользователь
Сообщений: Регистрация: 20.04.2023
21.05.2023 07:03:35
10 или 100 чего будет?
Как обрезать число типа float до 2х знаков после запятой
Пользователь
Сообщений: Регистрация: 20.04.2023
20.05.2023 19:06:51
Цитата
Владимир Ишанин написал: string.sub(Название переменной,1,3) 1 - с первого символа и до 3 т.к. 2 знака после запятой..
Начал читать ваши уроки. Очень полезно, так как не программировал на lua никогда!))
Робот - оповещение о значениях RSI
Пользователь
Сообщений: Регистрация: 20.04.2023
20.05.2023 09:05:52
Спасибо, что ответили. )) Нашел раньше market_scaner отсюда:
Робот - оповещение о значениях RSI
Пользователь
Сообщений: Регистрация: 20.04.2023
20.04.2023 12:36:11
Всем добрый день,
Скажите, пожалуйста, может, есть где-либо в открытом доступе код робота Qpile, который бы оповещал о достижении определенных значений RSI, заданных в коде. Всегда пользовался приложением "Альфа-инвестиции", где есть конструктор роботов (на C#), что очень удобно: любой пользователь, не знакомый с программированием, может создавать роботов. Однако, с переходом на Quik возникла описанная задача.
Робот - оповещение о значениях RSI
Пользователь
Сообщений: Регистрация: 20.04.2023
20.04.2023 12:30:45
Всем добрый день,
Скажите, пожалуйста, может, есть где-либо в открытом доступе код робота Lua, который бы оповещал об определенных значениях RSI (по любому инструменту). Всегда пользовался приложением "Альфа-инвестиции", где есть конструктор роботов (на C#), что очень удобно: любой пользователь, не знакомый с программированием, может создавать роботов. Однако, с переходом на Quik возникла описанная задача.