Duke2 (Автор тем)

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

Страницы: 1
Отловить свою лимитную заявку, после "исполнения" Take profit
 
Добрый день, коллеги. Прошу подсказать по след. вопросу (брокер финам).

После выполнения условия take profit, стоп заявка отображается как исполненная в таблице стоп-заявки.
Я так понимаю в этот момент на биржу улетает лимитированная заявка, которая не факт что исполнится в случае неблагоприятного скачка цены. Эта заявка (лимитированная) зависает где-то в стакане и в какой-то момент может (обычно неподходящий)  исполняется. Вопрос следующий. Есть ли возможность увидеть эту зависшую в стакане лимитированную заявку в какой-нибудь таблице qlua? (в таблице заявок я эту лимит. заявку не наблюдаю... в таблице стоп-заявок она отображена как исполненная...) Либо каким еще способом можно узнать фактический статус этой заявки (исполнена/не исполнена)?

Благодарю за любые комментарии
Получить актуальный статус take profit заявки из таблицы stop_orders с помощью bit флагов
 
Всем добрый день. Прошу помощи по след вопросу.
Пытаюсь отловить момент (получить сообщение) когда идет расчет  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? Заранее благодарю

агрегировать значения из таблицы сделок по временному условию
 
Коллеги, добрый день.
Пытаюсь получить агрегированную сумму по 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  
вывести выставление заявки из функции 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
узнать кол-во активных стоп-заявок в таблице "stop-orders"
 
Добрый день,
Пытаюсь вернуть кол-во активных коротких стоп-заявок, с помощью приложенного кода. Получаю ошибку. Не подскажите плиз, уважаемые коллеги, в чем ошибка. Прошу не пенять за неграмотность, делаю первые шаги в обучении
Спасибо
Код
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
Страницы: 1
Наверх