Дополнительные флаги для таблицы «Стоп-заявки», Дополнительные флаги для таблицы «Стоп-заявки»
Пользователь
Сообщений: Регистрация: 06.02.2017
06.11.2023 12:25:06
Хочу, чтобы при срабатывании стопа, выставлялся ордер с параметром "По рыночной цене". Какой параметр необходимо добавить в таблицу для sendTransaction(), чтобы было мне счастье? Будет ли это работать на всех рынках? Если такого параметра нет, как это можно обойти? Думал использовать "мин/макс. возм.цена" для расчета цены или максимального спреда. Но судя по форуму, надежность получения этого параметра из ТТТ желает лучшего.
Дополнительные флаги для таблицы «Стоп-заявки», Дополнительные флаги для таблицы «Стоп-заявки»
Пользователь
Сообщений: Регистрация: 06.02.2017
04.11.2023 23:29:11
Есть таблица "Дополнительные флаги для таблицы «Стоп-заявки»". Хочу при создании стоп-заявки установить "Выполнение тейк-профита по рыночной цене" и "Выполнение стоп-заявки по рыночной цене". Подскажите, пожалуйста, пример строки кода, используя, например bid.band или другую ф-цию.
Спасибо
Как работать с битовыми флагами?, Как получить бит из битогового флага?
Пользователь
Сообщений: Регистрация: 06.02.2017
06.01.2023 12:43:36
if bit.band(table_row.flags,0x4)~=0 then --если заявка на продажу иначе на покупку
Помогите разобраться: почему не выставляется заявка на покупку?
После 7,8 и 9 строки поставьте ; а не , или совсем ничего не ставьте.
Транзакции на снятие Лимит. заявки
Пользователь
Сообщений: Регистрация: 06.02.2017
03.06.2022 19:38:13
Возможно, Ваш кусок кода тоже в цикле. После отправки заявки на снятие изменения в самой таблице происходят не сразу. Изменения еще не произошли, а Вы по следующему шагу цикла(который Вами не представлен) видите, что заявка еще активна. Хотя заявка на снятие уже отправлена на предыдущем шаге. Попробуйте после DeleteProfitByNumber(emit, class, keyNumber, file, prevString) поставить задержку с ожиданием в таблице заявок реакции на эту функцию.
Одинаковый код В Quik Junior работает а Quik СБЕР нет
Пользователь
Сообщений: Регистрация: 06.02.2017
11.04.2022 12:52:27
Между определением кол-ва бидов и обращением к нужно строке за ценой проходит время, поэтому лучше сделать проверку на не пустую строку if ql2.bid[b_qty].price ~= '' then
end;
Кривые шибки в QLua
Пользователь
Сообщений: Регистрация: 06.02.2017
08.04.2022 10:11:52
nikolz, Ваши результаты совпадают с моими. Но дойдите до третьего варианта, где и появляется ошибка.
Цитата
Если закомментировать a[2] или a[3], то сразу или с какого то раза length = 5.
На луа я пишу в notepad++ и все тестирую в самом квике.
Если его запустить, то length = 5. Если закомментировать a[4] length = 3. Если закомментировать a[2] или a[3], то сразу или с какого то раза length = 5. Я не знаю, почему у меня так, но если у Вас так же, то #a работает не правильно. Соответственно, Ваш цикл
Код
for i = 1, #queue do
queue_[tonumber(queue[i].price)] = tonumber(queue[i].quantity) -- table index is nil
end
перебирает и элемент массива который nil Попробуйте внутри цикла сделать message на каждый queue[i].quantity что бы в этом убедиться(или не убедиться)
Таблица сделок, номер заявки превращается в число e+
Пользователь
Сообщений: Регистрация: 06.02.2017
29.12.2021 17:28:25
Что бы избежать возможных проблем с преобразованием , я бы написал. tradelist[i] = "" .. getItem("trades",i).datetime.day.."."..getItem("trades",i).datetime.month.."."..getItem("trades",i).datetime.year..";".. getItem("trades",i).datetime.hour..":"..getItem("trades",i).datetime.min..":"..getItem("trades",i).datetime.sec..";"..
Таблица сделок, номер заявки превращается в число e+
Пользователь
Сообщений: Регистрация: 06.02.2017
29.12.2021 16:45:07
.trade_num, .order_num, .trans_id - они уже при получении из таблицы сделок имеют формат NUMBER. Не понятно зачем число форматировать в число. string.format("%0.17g",... - здесь вы сами пытаетесь преобразовать число в строку в формате %e или %f в зависимости от того что короче. И спрашиваете как от этого уйти. Просто не надо этого делать. Судя по тому, что в конце Вы все таки хотите получить длинную строку(tradelist[i]) из полученных данных, логичнее через string.format преобразовать числа в удобный для вас вид (как и предлагает ,
Как сохранить в файл координаты таблицы?
Пользователь
Сообщений: Регистрация: 06.02.2017
24.12.2021 11:32:14
Перед сохранением в файл нужно сначала получить новые координаты таблицы через GetWindowRect(NUMBER t_id)
Ошибка attempt to index a function value при обращении к таблице из getCandlesByIndex
Пользователь
Сообщений: Регистрация: 06.02.2017
10.12.2021 18:40:44
В справке по Qlua, к сожалению, не указано, что возвращается в случае не получения данных данной функции. Я при проверке этой функции сравниваю получаемую таблицу и ее значения не с nil, а с false (т.е. if (not tab2) и if (not tab2[0])). Пока работает.
заявки типа «Тейк-профит и стоп-лимит»
Пользователь
Сообщений: Регистрация: 06.02.2017
02.12.2021 21:46:22
Условия. Купил фьючерс А по 100. Выставил заявку типа «Тейк-профит и стоп-лимит». Тейк-профит цена исполнения 110 спред 30. Стоп-лимит цена исполнения 90 спред 10. В результате срабатывания стоп-заявки выставился лимит ордер: Продать по 80. Вопрос. Какая сторона стоп-заявки сработала? Тейк-профит или Стоп-лимит. Конечно же условия задачи идеализированы, но суть вопроса понятна. Есть допустим такое решение. Посмотреть в таблицу сделок и если есть сделки выше Стоп-лимита то сработал Тейк-профит. Но для такой задачи хочется решение по проще.
Вы не можете заменить заявку XXX. Повторите попытку позже.
Пользователь
Сообщений: Регистрация: 06.02.2017
29.10.2021 11:10:05
Мне кажется, что не стоит решать эту проблему увеличением sleep. Надежнее сделать проверку наличия заявки по номеру в таблице заявок (или через OnOrder, как и предлагал админ). Получение номера заявки по OnTransReply не гарантирует появление заявки в таблице заявок без задержек. А если в таблице заявок этой заявки нет, то и переставлять нечего.
Ст.шага цены
Пользователь
Сообщений: Регистрация: 06.02.2017
20.10.2021 23:25:04
В текущей таблице параметров столбец "Ст.шага цены" пуст . В чем может быть проблема?
Запись в один файл из разных скриптов.
Пользователь
Сообщений: Регистрация: 06.02.2017
18.10.2021 10:12:13
Перед записью проверьте, можете ли вы открыть файл для записи, не занят ли он другим процессом.
Код
f = io.open(file,"+a");
i = 0;
while(f == nil) do
i = i + 1;
if i == 2000 then
message("Не могу открыть для записи файл "..file);
sleep(5000);
error("");
end;
f = io.open(file,"+a");
sleep(1);
end;
Перевод робота с lua 5.1 на lua 5.3
Пользователь
Сообщений: Регистрация: 06.02.2017
11.10.2021 10:10:21
Код
["ORDER_KEY"] = tostring(keyNumber)
Попробуй так ["ORDER_KEY"] = string.format("%u", keyNumber);
Как объявить Двумерный массив с последующим заполнением уже в скрипте?
Пользователь
Сообщений: Регистрация: 06.02.2017
29.09.2021 16:26:46
save = {}; for i = 1, 100 do save[i] = {}; end;
Подскажите как отправлять инфу из QUIK в телеграм?
Пользователь
Сообщений: Регистрация: 06.02.2017
16.09.2021 14:42:15
Начните с самого простого варианта - через файл.txt. Дальше разберетесь по мере развития схемы.
Подскажите как отправлять инфу из QUIK в телеграм?
1. Готово 2. Готово 3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю 4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать 5. С начала надо разобраться с пунктом 4 ))
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры. 4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
Подскажите как отправлять инфу из QUIK в телеграм?
Пользователь
Сообщений: Регистрация: 06.02.2017
27.08.2021 18:47:23
Я делаю так.
Начни с конца. 1.в телеграм получи свой chat id 2.создай telegram bot и получи его token 3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения 4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3. 5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.
Ошибка без указания строки в коде
Пользователь
Сообщений: Регистрация: 06.02.2017
23.08.2021 18:14:57
Попробуйте обернуть в status_main, msg_main = pcall(function() end). Второй параметр дасть номер строки с ошибкой.
Стакан котировок
Пользователь
Сообщений: Регистрация: 06.02.2017
28.07.2021 11:05:01
Создаю стакан котировок, используя функции для работы с таблицами. Как сделать так, что бы "Лучшие котировки видны всегда"?
Узнать, что связанная со стопом лимитная заявка не прошла контроль лимитов
Пользователь
Сообщений: Регистрация: 06.02.2017
04.07.2021 18:54:58
См. флаги для табл. Стоп-Заявки
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 06.02.2017
13.03.2021 15:07:10
Цитата
У разных скриптов не получатся одинаковые ID?
Не думаю, что у Вас получится в один и тот же момент включить несколько скриптов. os.time() у всех будет разный, а соответственно math.randomseed(os.time()) и ....
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 06.02.2017
13.03.2021 14:49:15
Цитата
Есть идеи, как сделать уникальный trans_id в разных роботах без необходимости задавать свой диапазон (robot_id) внутри каждого робота (или их копий)?
Я уникальность обеспечиваю фиксированием момента времени включения скрипта, а не совершения транзакции.А уже дальше, если в скрипте есть сделка, то как обычно, к полученному случайному числу +1.
Отправка транзакции в сегменте фондового рынка (акции) - брокеры Финам / Сбербанк, какой формат и где брать код клиента?
Пользователь
Сообщений: Регистрация: 06.02.2017
02.03.2021 11:50:13
Есть робот, который работает через втб, как на срочном, так и на фондовом(использовал "CLIENT_CODE/"). Через сбер на срочном работает, на фондовом пишет Не указан код клиента. В ручном режиме заявки проходят. В роботе пытался "CLIENT_CODE" "CLIENT_CODE/" "CLIENT_CODE//" "CLIENT_CODE///" В тех.поддержке сказали, что никаких спец.установок не используют(по вопросам роботов вообще не консультируют). Если кто реально работает через сбер поделитесь опытом.
Старатель написал: Второй файл как раз служит для писателей индикатором, что первый файл занят, и запись не возможна.Как только приёмник прочитает данные, он удаляет 2-й файл, что сигнализирует о возможности записи.Т.е. организуются синхронные запись/чтение.
Я делаю так же, только с одним файлом. Передатчик создает файл и пишет туда инфу. Приемник смотрит наличие этого файла. Для него это флаг, что можно читать свежую инфу. Он (приемник) ее читает и удаляет файл. Для передатчика отсутствие файла означает, что файл прочитан и можно создавать файл для передачи новой инфы. Если это и хуже варианта с двумя файлами, то интересно чем?
Функции onInit, onStop, onClose
Пользователь
Сообщений: Регистрация: 06.02.2017
20.10.2020 18:32:45
Цитата
Кто сказал, что "это строка"?! Я совсем недавно отменил tonumber для этой операции.
Руководство пользователя Qlua
param_value
STRING
Функции onInit, onStop, onClose
Пользователь
Сообщений: Регистрация: 06.02.2017
20.10.2020 17:36:42
x = getParamEx (classcode, seccode, "last").param_value; -- это строка if x then x = tonumber(string.format("%."..scale.."f", tonumber(x)); --если нужно вещественное x = tonumber(string.format("%d", tonumber(x)); --если нужно целое (или %u без знака)
end;
Вопросы Новичка
Пользователь
Сообщений: Регистрация: 06.02.2017
15.10.2020 20:29:52
Владимир, Вопрос не только в string или number. Вопрос в том, что индекс должен быть помимо number еще и целочисленным. Поэтому выше я предложил z1 = tonumber(string.format("%d", tonumber(z.bid_count)))
Вопросы Новичка
Пользователь
Сообщений: Регистрация: 06.02.2017
15.10.2020 19:37:15
z1 = z.bid_count -- тип возвращаемое значение string z1 = z.bid_count + 0 --тип number
Количество котировок покупки. При отсутствии спроса возвращается значение «0»
offer_count
STRING
Количество котировок продажи. При отсутствии предложения возвращается значение «0»
bid
TABLE
Котировки спроса (покупки). При отсутствии спроса возвращается пустая строка
offer
TABLE
Котировки предложений (продажи). При отсутствии предложения возвращается пустая строка
Код
if z.bid[i].quantity ~= nil then
Попробуй if z.bid[i].quantity ~= ' ' then (пока в цикле дойдет до z1 этой строки может уже не быть)
Вопросы Новичка
Пользователь
Сообщений: Регистрация: 06.02.2017
15.10.2020 18:05:20
lag = 0 -- лучше поставить перед циклом
for i=1, z1 do (это для оферов) --для бидов надо написать for i=z1,1, -1 do т.к. счет начинается с края(снизу)
posicia -- надеюсь, что это инициализировано где то выше
message("Full close : " .. z3 .. " lag - ".. ( tonumber(z3-z4))) --странно lag - это объем , а z3-z4 - это разница цен
Ну и конечно все это надо перенести из OnQuote(class, sec ) в другое место
Как убрать нуль после точки?, .0
Пользователь
Сообщений: Регистрация: 06.02.2017
05.10.2020 16:22:56
Цитата
А нельзя просто отрезать нули после запятой к чертям собачьим с помощью string.sub?
price = price - price%1
Отключение скрипта при получении Nil
Пользователь
Сообщений: Регистрация: 06.02.2017
13.08.2020 13:13:30
Код
while stopped == false do
Quotes_1 = getQuoteLevel2("TQTF", "FXRL");
if Quotes_1 then
----
end;
sleep(1000)
end
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 06.02.2017
14.07.2020 14:12:43
Я бы все делал через таблицу сделок или таблицу заявок. Но для опыта 10 дней это не знаю.
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 06.02.2017
14.07.2020 13:05:33
Думаю у Вас не корректно организован оператор if. До второго условия он не доходит. Разделите.
Код
if portfolio==0 then
end;
if portfolio==1 then
end;
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 06.02.2017
14.07.2020 11:39:13
Возможно, не хватает времени на обновление portfolio. После покупки LKON (перед elseif) можно вставить
Код
local timeWfinish = os.time() + 5;
while portfolio==0 do
portfolio = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet;
if os.time() > timeWfinish then
message("Вышло время ожидания portfolio");
error("");
end;
sleep(100);
end;
Как отследить событие - перерыв в торгах на фортс
Пользователь
Сообщений: Регистрация: 06.02.2017
06.06.2020 12:51:14
Код
local c1 = getParamEx2(CLASS_CODE, SEC_CODE, "TRADINGSTATUS");
if (c1.result == "1") then
if c1.param_image ~= "открыта" then
message("Сессия "..c1.param_image);
flag_Session = false;
end;
end;
Баг с выводом времени в таблицу QLua
Пользователь
Сообщений: Регистрация: 06.02.2017
05.05.2020 13:13:14
Дмитрий, могу лишь предложить свой работающий вариант, от которого можно оттолкнуться.
Код
if string.len(Tl.hour) == 1 then Tl.hour = "0"..Tl.hour; end;
if string.len(Tl.min) == 1 then Tl.min = "0"..Tl.min; end;
if string.len(Tl.sec) == 1 then Tl.sec = "0"..Tl.sec; end;
Обработка ошибок - открыт ли файл., Обработка ошибок - открыт ли файл.
Пользователь
Сообщений: Регистрация: 06.02.2017
18.03.2020 13:10:57
Попробуй так
Код
Myfilefile = "\\MyData.txt";
i = 0;
while i == 0 do
Myfile = io.open(getScriptPath()..Myfilefile,"r+");
-- Если файл занят
if Myfile == nil then
sleep(100);
else
i = 1;
end;
end;
узнать кол-во активных стоп-заявок в таблице "stop-orders"
Пользователь
Сообщений: Регистрация: 06.02.2017
03.03.2020 16:10:48
Цитата
getItem("stop_orders",i).balance
- это активное кол-во контрактов в одной стоп-заявке.
т.е. для получения кол-ва стоп-заявок Вам надо написать так ActiveShortOrders = 1 + ActiveShortOrders
Реквоты., Ошибка создания заявки, цена сделки вне лимита №32
Пользователь
Сообщений: Регистрация: 06.02.2017
03.12.2019 15:15:52
Цитата
написал: нужно правильно написать робота, чтобы он перед выставлен тем заявки проверял, что желаемое цена находится в допустимых для текущей сессии границах для нужного инструмента. Например, для фьючерсов это pricemin и pricemax
Какие границы посоветуете для спот-рынка?
EXECUTION_CONDITION и стоп-заявка
Пользователь
Сообщений: Регистрация: 06.02.2017
02.12.2019 16:11:21
Хочу выставить стоп-заявку, при срабатывании которой выставлялась бы лим.заявка с EXECUTION_CONDITION ="KILL_BALANCE". Есть ли такая возможность? Пытался прописать в Transaction={} для стоп-заявки. Стоп выставляется, но остаток лим.заявки не удаляется.
MACD, Получение значения индикатора MACD в робот.
Пользователь
Сообщений: Регистрация: 06.02.2017
18.10.2019 22:55:54
MACD - 0 signal line - 1
Код
IsRun = true;
tag = "macd26";
function main()
while IsRun do
nl = getLinesCount(tag); --кол-во линий в индикаторе
nc = getNumCandles(tag); --кол-во получаемых свечек, начина¤ с 0-ой
first_candle = nc - 3; --получаем три последнюю
count = 3; --заказываем три последнюю
t, n, l = getCandlesByIndex (tag, 0, first_candle, count); --получаем таблицу с инфо по MACD
-- t, n, l = getCandlesByIndex (tag, 1, first_candle, count); --получаем таблицу с инфо по signal line
...
...
...
sleep(100);
end;
end;
function OnStop()
IsRun = false;
end;