Порядок отслеживания процесса выполнения транзакций
Пользователь
Сообщений: Регистрация: 17.03.2016
05.04.2016 09:18:16
Интересная тема. Только истинные мастера могли в процессе отправки торгового приказа и получения рещультата его выполнения придумать столько гемороя.. я же всегда стремился к простоте. Поэтому задам простой вопрос.
По параметру ["TRANS_ID"] можно идентифицировать транзакцию в функции function OnTransReply(trans_reply) . Если trans_reply.status == 3, значит всё Ок. Если >3 значит ничего не получилось.. Теперь возникает вопрос с тем, что повторно отосланный на сервер торговый приказ будет иметь уже другой "TRANS_ID", обработка которого при нормальном (без отказов) выполнении всех транзакций, в функции OnTransReply будет совсем другой. Так вот вопрос: Можно ли послать повторный приказ на сервер с тем же "TRANS_ID", что и раннее неудавшийся? Тогда бот просто не заметит неудавшуюся тразакцию и будет обрабатывать реплаи по "TRANS_ID" требующейся в алгоритме операции, а не по порядковому номеру транзакции?
Спасибо.
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
Пользователь
Сообщений: Регистрация: 17.03.2016
22.03.2016 07:09:04
Оказывается, что тут на форуме в ответах "продвинутых" можно набраться ошибок, которые поставят вас в тупик.. что и случилось. Неработающий код был собран из ответов на вопросы заданные в других темах. Там я почерпнул ложное знание о параметрах, передаваемых в транзакцию для снятия стопзаявок.
Привожу здесь правильный код, что бы другие могли это найти. Для снятия стопа в транзакции важно правильно заполнить два поля
ДемоКвик радует неожиданностями, Перестала работать функция
Пользователь
Сообщений: Регистрация: 17.03.2016
21.03.2016 11:13:44
Перед переустановкой квика ещё раз проверил вот этот скрипт
p_classcode = "SPBFUT" p_seccode = "SiM6"
is_run = true count=1 function main() while is_run do message("Hello, World! №"..tostring(count),1) count=count+1 sleep(5000) end end
function OnStop(stop_flag) is_run=false end
function OnQuote(class_code, sec_code) --message(tostring("FFF"),1) if class_code==p_classcode and sec_code==p_seccode then message("HHH",1) end end
Вывод сообщения "HHH" Не реализовывался. После переустановки заработало.. Так что демоквик загадочен и капризен..
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
Пользователь
Сообщений: Регистрация: 17.03.2016
19.03.2016 17:06:26
O! Сам нашёл. Пытался передать в числовой тип таблицу с параметрами стопордера ))) Нужно получать значения стопордера из "stop_orders" в какую-нибудь таблицу..
any = { } Total = getNumberOf("stop_orders") for Index = 0, Total - 1 do any = getItem("stop_orders",Index) if bit.band(any.flags, 1) > 0 OrderNumber = any.order_num message("Стопзаявка № = "..tostring(OrderNumber).." активна",1) end end
В понедельник попробую, если квик заработает..
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
Пользователь
Сообщений: Регистрация: 17.03.2016
19.03.2016 09:09:12
Добрый день,
вот такой код
Total = getNumberOf("stop_orders") for Index = 0, Total - 1 do OrderNumber = getItem("stop_orders",Index).order_num +0
перебирает стопзаявки в таблице далее желательно найти среди них активную. Для этого изобрёл во такой код
if bit.band(getItem("stop_orders",Index)["flags"],1)>0 then message("заявка активна",1) end
пытался обратиться к заявке не по индексу, а по номеру OrderNumber, полученному при переборе, но ничего не получается. А каждый раз перебирать не хочется. Как написать обращение к стопзаявке по её номеру с проверкой статуса?
Спасибо.
ДемоКвик радует неожиданностями, Перестала работать функция
Пользователь
Сообщений: Регистрация: 17.03.2016
18.03.2016 21:12:49
В рабочем квике код работает, в демо тот же код не работает. Склоняюсь к проблеме с демоквиком. Возможно у меня тут глюки, но переустанавлмвать сегодня уже не буду. Оставлю до понедельника... но всё равно всёэто очень радостно..
ДемоКвик радует неожиданностями, Перестала работать функция
function OnQuote(class_code, sec_code) message(tostring(p_classcode).." "..tostring(p_seccode),1) if class_code==p_classcode and sec_code==p_seccode then message(tostring(START_FLAG),1) tb=getQuoteLevel2(class_code, sec_code)
то замечательно выводит это в сообщении..
а второй оператор - мёртвый, то есть в if условие не выполняется..
ДемоКвик радует неожиданностями, Перестала работать функция
Пользователь
Сообщений: Регистрация: 17.03.2016
18.03.2016 20:22:01
Вечером только закончил отладку, как бот вообще перестал работать. Выяснилось, что функция
function OnQuote(class_code, sec_code) --message(tostring(START_FLAG),1) if class_code==p_classcode and sec_code==p_seccode then message(tostring(START_FLAG),1) tb=getQuoteLevel2(class_code, sec_code) OFFER_PRICE = tb.offer[1].price BID_PRICE = tb.bid[math.ceil(tb.bid_count-0)].price GRAPH_TAG = "MA_FAST" number_of_candles=getNumCandles(GRAPH_TAG) t,_,legend=getCandlesByIndex(GRAPH_TAG,0,number_of_candles-1,1) MA_F = t[0].close START_FLAG = true message(tostring(START_FLAG),1) end end
не работает. сообщения из первого оператора mtssage проходят, а из второго ещё нет. Днём работала, и на реальном счёте в реальном квике работает. Но вставлена в другой бот..
Может это случиться из-за того , что я напорол чего-то в другом месте программы? Вроде не счем не связана.. Или это сюрпризы демодоступа?
Спасибо.
sendTransaction
Пользователь
Сообщений: Регистрация: 17.03.2016
18.03.2016 08:22:57
не буду увеличивать количество однотипных веток, спрошу здесь.
в qpile при установке стопордера у меня работал такой код:
... R = SEND_TRANSACTION(30, T) RESULT = GET_VALUE(R, "ORDER_NUMBER") END FUNC ...
в qlua отправка транзакции происходит так:
local res=sendTransaction(t_Stop)
Можно ли получить из переменной res номер стопордера, если нет, то как это сдеклать?