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

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

Страницы: 1
Получить актуальный статус 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? Заранее благодарю

агрегировать значения из таблицы сделок по временному условию
 
Коллеги, хочу немного уточнить по основному вопросу этой темы. Хочу для дальнейших расчетов использовать сделки (из таблицы Trades), которые прошли после определённого момента времени. В колонке "datetime" таблицы trades время каждой сделки указано в виде таблицы. Не знаю как сравнить эти табличные данные корректно с интересующим меня моментом времени. Решил табличные данные из datetime в trades переделать в секунды след образом и сравнивать уже секунды. сделал след образом
Код
os.time(getItem ("trades", i).datetime)
  не получаю нужного результата. В чем косяк? Можно данные из колонки datetime в trades перевести в секунды или как по другому сравнить табличные данные с другим моментов времени ?  
агрегировать значения из таблицы сделок по временному условию
 
Игорь М, Nikolay, Спасибо огромное! Очень помогли!
агрегировать значения из таблицы сделок по временному условию
 
Коллеги, добрый день.
Пытаюсь получить агрегированную сумму по 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 в отдельную функцию
 
Цитата
nikolz написал:
Цитата
Duke2 написал:
Evgenii , Main зациклен, просто в выдержку кода не попало зацикливание. Спасибо все равно
дело в том что поток колбеков и поток Main - это разные потоки.
Если функция выставления заявки будет работать в майн,
то это ничего не даст, кроме лучшей читаемости текста программы.
--------------------------
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
а в цикле  майн проверять завершение работы этой функции.
-----------------
Если есть желание это сделать,
то рекомендую почитать книгу Дж.Рихтер Создание эффективных WIN-32 приложений с учетом специфики 64-разрядной версии Windows
Спасибо. Я правильно понимаю, что независимо от того  выставляется заявка в функции main или другой функции это никак не повлияет на взаимоотношение этой заявки и колбек функций (колбеки будут отрабатывать в любом случае)? Я просто опасаюсь, что колбек функции могут быть заточены именно для работы с заявками которые заходят из функции main...
вывести выставление заявки из функции main в отдельную функцию
 
Evgenii, 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) 
функция по закрытию скрипта в определенное время
 
Anton, ok, спасибо
функция по закрытию скрипта в определенное время
 
Цитата
Anton написал:
Устанавливаете в своей функции is_run и потом нигде ее не проверяете
я не хочу ее проверять, я хочу скрипт закрыть...
Цитата
Anton написал:
Ваша задача как-то мейну сообщить, что надо выйти из цикла
а как, например, это сделать? или лучше не привлекать для этого отдельную функцию вообще?(можно прям в main по условию закрыть скрипт - это я понимаю)

В любом случае спасибо
функция по закрытию скрипта в определенное время
 
Добрый день всем!
Пытаюсь передать в функцию задачу закрытия (паузы) скрипта в определенное время. Пытаюсь это сделать на в 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"
 
Игорь Б, Спасибо, работает!
узнать кол-во активных стоп-заявок в таблице "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
Наверх