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

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

Страницы: 1
Порядок отслеживания процесса выполнения транзакций
 
Интересная тема. Только истинные мастера могли в процессе отправки торгового приказа и получения рещультата его выполнения придумать столько гемороя..
я же всегда стремился к  простоте. Поэтому задам простой вопрос.

По параметру    ["TRANS_ID"] можно идентифицировать транзакцию в функции function   OnTransReply(trans_reply) . Если trans_reply.status == 3, значит всё Ок. Если >3 значит ничего не получилось.. Теперь возникает вопрос с тем, что повторно отосланный на сервер торговый приказ будет иметь уже другой "TRANS_ID", обработка которого при нормальном (без отказов) выполнении всех транзакций, в функции OnTransReply будет совсем другой. Так вот вопрос: Можно ли послать повторный приказ на сервер с тем же "TRANS_ID", что и раннее неудавшийся? Тогда бот просто не заметит неудавшуюся тразакцию и будет обрабатывать реплаи по "TRANS_ID" требующейся в алгоритме операции, а не по порядковому номеру транзакции?

Спасибо.
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
 
Оказывается, что тут на форуме в ответах "продвинутых" можно набраться ошибок, которые поставят вас в тупик.. что и случилось. Неработающий  код был собран из ответов на вопросы заданные в других темах. Там я почерпнул ложное знание о параметрах, передаваемых в транзакцию для снятия стопзаявок.

Привожу здесь правильный код, что бы другие могли это найти.
Для снятия стопа в транзакции важно правильно заполнить два поля

["ACTION"] = "KILL_STOP_ORDER",
["STOP_ORDER_KEY"] = tostring(_NUMBER)

...
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
 
Теперь я пытаюсь снять активную заявку и вызываю вот эту функцию

function KILL_STOP_ORDER(_MARKET, _TICKER, _ACCOUNT, _NUMBER)
TRANS_ID = TRANS_ID + 1
t =
  {
     ["TRANS_ID"]= tostring(TRANS_ID),
     ["ACCOUNT"] = tostring(_ACCOUNT),
     ["CLASSCODE"] = tostring(_MARKET),
     ["SECCODE"] = tostring(_TICKER),
     ["ACTION"] = "KILL_ORDER",
     ["ORDER_KEY"] = tostring(_NUMBER)
  }
res=sendTransaction(t)
end

Квик мне отвечает в окне сообщений, что

"Вы не можете снять данную заявку"

Вручную снимается.. Что тут такое?

Спасибо.
ДемоКвик радует неожиданностями, Перестала работать функция
 
Перед переустановкой квика ещё раз проверил вот этот скрипт

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"
 
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"
 
Добрый день,

вот такой код

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, полученному при переборе, но ничего не получается. А каждый раз перебирать не хочется.
Как написать обращение к стопзаявке по её номеру с проверкой статуса?

Спасибо.
ДемоКвик радует неожиданностями, Перестала работать функция
 
В рабочем квике код работает, в демо тот же код не работает. Склоняюсь к проблеме с демоквиком. Возможно у меня тут глюки, но переустанавлмвать сегодня уже не буду. Оставлю до понедельника... но всё равно всёэто очень радостно..
ДемоКвик радует неожиданностями, Перестала работать функция
 
Ввод этих констант такой

p_account = "SPBFUT00521"
p_clientcode = "101326"
p_classcode = "SPBFUT"
p_seccode = "SiM6"

Ну и если поставить в месагу вот так,

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 условие не выполняется..
ДемоКвик радует неожиданностями, Перестала работать функция
 
Вечером только закончил отладку, как бот вообще перестал работать. Выяснилось, что функция

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
 
не буду увеличивать количество однотипных веток, спрошу здесь.

в qpile при установке стопордера у меня работал такой код:

...
  R = SEND_TRANSACTION(30, T)
   RESULT = GET_VALUE(R, "ORDER_NUMBER")
END FUNC
...

в qlua отправка транзакции происходит так:

local res=sendTransaction(t_Stop)

Можно ли получить из переменной res номер стопордера, если нет, то как это сдеклать?

Спасибо.
Страницы: 1
Наверх