Добрый день, коллеги. Прошу подсказать по след. вопросу (брокер финам).
После выполнения условия take profit, стоп заявка отображается как исполненная в таблице стоп-заявки. Я так понимаю в этот момент на биржу улетает лимитированная заявка, которая не факт что исполнится в случае неблагоприятного скачка цены. Эта заявка (лимитированная) зависает где-то в стакане и в какой-то момент может (обычно неподходящий) исполняется. Вопрос следующий. Есть ли возможность увидеть эту зависшую в стакане лимитированную заявку в какой-нибудь таблице qlua? (в таблице заявок я эту лимит. заявку не наблюдаю... в таблице стоп-заявок она отображена как исполненная...) Либо каким еще способом можно узнать фактический статус этой заявки (исполнена/не исполнена)?
Всем добрый день. Прошу помощи по след вопросу. Пытаюсь отловить момент (получить сообщение) когда идет расчет take profit по соответсвующей заявке (в данном случае на покупку) из таблицы stop_orders. Пытаюсь вернуть сообщение с помощью след кода:
Код
elseif
bit.band(getItem("stop_orders",i).flags,4)== 0 and getItem("stop_orders",i).sec_code == SecCode and bit.band(getItem("stop_orders",i).flags,1) ~=0 and bit.band(getItem("stop_orders",i).flags,8000) ~=0 then
message("идет расчет min/max - Заявку не выставляем")
sleep (5000)
end
Задаю 4 условия.Соответсвенно, (как я это понимаю), в первом условии проверяю направление заявки, во втором -инструмент, в третьем - активность(?) заявки, в четвертом- соответсвенно идет или не идет расчет Take profit. Где-то тут косяк (возможно если идет расчет, то заявка уже не считается активной и проч). Подскажите плиз где косяк? как получить message когда идет расчет take-profit? Заранее благодарю
Коллеги, хочу немного уточнить по основному вопросу этой темы. Хочу для дальнейших расчетов использовать сделки (из таблицы Trades), которые прошли после определённого момента времени. В колонке "datetime" таблицы trades время каждой сделки указано в виде таблицы. Не знаю как сравнить эти табличные данные корректно с интересующим меня моментом времени. Решил табличные данные из datetime в trades переделать в секунды след образом и сравнивать уже секунды. сделал след образом
Код
os.time(getItem ("trades", i).datetime)
не получаю нужного результата. В чем косяк? Можно данные из колонки datetime в trades перевести в секунды или как по другому сравнить табличные данные с другим моментов времени ?
Коллеги, добрый день. Пытаюсь получить агрегированную сумму по long сделкам, которые были совершены после определенного времени. Информацию пытаюсь получить из таблицы trades. Никак не получается корректно выставить условие на соответствие времени сделки. Подскажите плиз в чем косяк - как правильно обратиться? В скрипте ниже пытаюсь получить агрегированное значение по long сделкам, которые прошли после 12 часов. Соответсвенно функция ничего не возвращает. Без временного условия все работает как надо. Спасибо
Код
function aggrF()
LongValue=0 -- здесь рассчитываю кумулятивное значение из столбца объем таблицы сделок
for i = 0, getNumberOf("trades") - 1 do
if bit.band(getItem("trades",i).flags,4)> 0 and getItem("trades",i).sec_code == SecCode and getItem("trades",i).datetime.hour > 12 then-- сделка на продажу по конкр. инструменту
LongValue = getItem("trades",i).value+LongValue
end
end
return LongValue
end
Duke2 написал: Evgenii , Main зациклен, просто в выдержку кода не попало зацикливание. Спасибо все равно
дело в том что поток колбеков и поток Main - это разные потоки. Если функция выставления заявки будет работать в майн, то это ничего не даст, кроме лучшей читаемости текста программы. -------------------------- Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке, а в цикле майн проверять завершение работы этой функции. ----------------- Если есть желание это сделать, то рекомендую почитать книгу Дж.Рихтер Создание эффективных WIN-32 приложений с учетом специфики 64-разрядной версии Windows
Спасибо. Я правильно понимаю, что независимо от того выставляется заявка в функции main или другой функции это никак не повлияет на взаимоотношение этой заявки и колбек функций (колбеки будут отрабатывать в любом случае)? Я просто опасаюсь, что колбек функции могут быть заточены именно для работы с заявками которые заходят из функции main...
Добрый день. Прошу подсказки. Вывел выставление заявки в отдельную функцию (из main), но столкнулся с тем, код выставив заявку, обратно в функцию main не возвращается (код выключается). В чем может быть дело? И еще вопрос, в этом случае (выставление заявки не в функции main) будут ли функции обратного вызова отрабатывать нормально, смогут ли они (например) нормально отлавливать исполнение заявки по номеру?Буду благодарен за любые комментарии по сути Ниже выдержка из кода. Прошу игнорировать детали не имеющие отношение к вопросу. Спасибо
Код
function MarketOrderBuyF(QuantityFigure, Id_B_Order, Circle,Status_B_Order,State_B_Order)
local MarketOrderBuy = {
["ACTION"] = "NEW_ORDER",
["ACCOUNT"] = Depo,
["OPERATION"] = "B",
["CLASSCODE"] = "SPBFUT",
["SECCODE"] = SecCode,
["PRICE"] = "0",
["QUANTITY"] = tostring(QuantityFigure),
["TRANS_ID"] = tostring(Id_B_Order),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(MarketOrderBuy)
while Status_B_Order == nil and Err_Order == "" do
sleep(10)
end
if Status_B_Order == 3 then -- ждем когда в переменную State_B_Order запишется значение, от того запишется ли значение зависит величина take profit
while State_B_Order ~= "ИсполненаПокупка" do
sleep(10)
end
end
return State_B_Order
end
function main()
local Enter_in_pos = "no"
while Enter_in_pos == "no" do
MarketOrderBuyF(1,Id_B_Order,1,Status_B_Order,State_B_Order) -- выставление заявки на покупку по рыночной цене передаю в функцию
if State_B_Order == "ИсполненаПокупка" then -- если исполнена покупка, выставляю take profit
while Trade_B == nil do-- ждем пока в переменную trade_B запишется значение - от trade _B зависит величина Take profit
sleep(10)
end
message("State_B_Order"..State_B_Order)
Enter_in_pos = "Yes"
end --
sleep(1000)
Добрый день всем! Пытаюсь передать в функцию задачу закрытия (паузы) скрипта в определенное время. Пытаюсь это сделать на в main, а в отдельной функции. Написал приложенный код - на выходе получаю какую-то ерунду (ну и скрипт не закрывается). По моей логике он должен закрыться с первого раза. Подскажите плиз в чем косяк. Вопрос я так понимаю детский.
Ну и навскидку.. будет ли работать та часть, которая закомментена (суть я думаю понятна)
буду благодарен за любые комменты
Спасибо
Код
function OnInit()
is_run = true
end
function OnStop()
is_run = false
return 2000
end
function CloseScript()
curr_date = os.date("*t")
if curr_date.hour == 13 and curr_date.min >= 05 then
message("Закрываемся")
is_run = false
return (500)
--elseif curr_date.hour == 13 and curr_date.min >= 55 then
--message("Ждем")
--sleep(600000)
--message("продолжаем")
end
return nil
end
function main()
EnterInPos = "No"
while EnterInPos == "No" do
CloseScript()
sleep (1000)
end --закрывает While
end --закрывает main fnct
Добрый день, Пытаюсь вернуть кол-во активных коротких стоп-заявок, с помощью приложенного кода. Получаю ошибку. Не подскажите плиз, уважаемые коллеги, в чем ошибка. Прошу не пенять за неграмотность, делаю первые шаги в обучении Спасибо
Код
ActiveShortOrders = 0 -- здесь расчитываю кол-во активных короткх заявок
for i = 0, getNumberOf("stop_orders") - 1 do
if bit.band(getItem("stop_orders",i).flags,4) > 0 and getItem("stop_orders",i).seccode == SecCode and bit.band(getItem("stop_orders",i).flags,1) ~=0 then
ActiveShortOrders = getItem("stop_orders",i).balance + ActiveShortOrders
end
end
Пытаюсь своими силами написать код (ниже). Хочу чтоб цена инструмента, на которую я ориентируюсь в торговле (сравниваемая цена) периодически "подтягивалась" к текущей (рыночной) цене инструмента - скажем раз в 30 сек и фиксировалась на этом уровне до след. обновления (еще через 30 сек). В определенные моменты сравниваемая цена обновляется, но далее не фиксируется (сбрасывается на первоначальный уровень). Подозреваю, что решение проблемы где-то на поверхности, но никак не могу сообразить...с переменными возможно что-то напутал... Помогите плиз, ткните в ошибку !
Спасибо
Код
function variableFPRB(Start_counting, FixedPriceRTSBuy)
local SecCode = "SRU9"
local A = os.time()
local CurrentFPRB
local Seconds = A - Start_counting
if Seconds >= 30 and Seconds < 33 then
CurrentFPRB = getParamEx("SPBFUT", SecCode, "LAST").param_value
elseif Seconds >= 60 and Seconds < 63 then
CurrentFPRB = getParamEx("SPBFUT", SecCode, "LAST").param_value
else CurrentFPRB = FixedPriceRTSBuy
end
return CurrentFPRB, Seconds
end
function main()
local SecCode = "SRU9"
local Start_counting = os.time()
local FixedPriceRTSBuy = getParamEx("SPBFUT", SecCode, "LAST").param_value
local EnterInPos = "No"
while EnterInPos == "No" do
local FixedPriceRTSBuyNew, Seconds = variableFPRB(Start_counting, FixedPriceRTSBuy) -- это сравниваемая цена
local PriceRTSBuy = getParamEx("SPBFUT", SecCode, "LAST").param_value -- это рыночная цена
local Raznost = tonumber(PriceRTSBuy) - tonumber(FixedPriceRTSBuyNew)
local FixedPriceRTSBuy = FixedPriceRTSBuyNew
message("Разность: "..Raznost.."\nсравниваемая цена: "..FixedPriceRTSBuyNew.."\nрыночная цена: "..PriceRTSBuy.."\nпрошло: "..Seconds)
sleep (5000)
end
end