вывести выставление заявки из функции main в отдельную функцию

Страницы: 1
RSS
вывести выставление заявки из функции 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) 
 
Функция майн циклично не вызывается. В майне нужен бесконечный цикл, до тех пор пока скрипт включен. Когда вызываются функции обратного вызова сам не понимаю. Они прерывают выполнение майн и после выполнения передают майн - в теории. По поводу вызова OnOrder - уже спрашивали.
Код
function main()
while run==true do
end
end
function OnStop()
    run = false
end
 
Evgenii, Main зациклен, просто в выдержку кода не попало зацикливание. Спасибо все равно
 
Цитата
Duke2 написал:
Evgenii, Main зациклен, просто в выдержку кода не попало зацикливание. Спасибо все равно
дело в том что поток колбеков и поток Main - это разные потоки.
Если функция выставления заявки будет работать в майн,
то это ничего не даст, кроме лучшей читаемости текста программы.
--------------------------
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
а в цикле  майн проверять завершение работы этой функции.
-----------------
Если есть желание это сделать,
то рекомендую почитать книгу Дж.Рихтер Создание эффективных WIN-32 приложений с учетом специфики 64-разрядной версии Windows
 
Цитата
nikolz написал:
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
А как это ускорит работу?
 
Цитата
Imersio Arrigo написал:
Цитата
nikolz написал:
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
А как это ускорит работу?
Никак
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Цитата
Imersio Arrigo написал:
 
Цитата
nikolz  написал:
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
 А как это ускорит работу?
Никак
Ну если не можете запустить выставление заявки в отдельном потоке, то запустите все остальное в другом потоке.
Например , можно в отдельных потоках запускать алгоритмы принятия решений роботом для различных рынков (бумаг)
можно в отдельных потоках запускать любые функции, которые не связаны с основным потоком КВИК.
В отдельных потоках дополнительно к main можно запускать любые действия внутри колбеков и тем самым ускорять их исполнение.
-----------------  
Так как узким местом териминала КВИК является его хранилище, то, чтобы обеспечить параллельную работу потоков,
надо всю информацию, поступающую в терминал квик, дублировать в свои таблицы и файлы
и работать не с хранилищем терминала, а со своей базой данных.
--------------------
 
Цитата
nikolz написал:
Цитата
Duke2 написал:
Evgenii , Main зациклен, просто в выдержку кода не попало зацикливание. Спасибо все равно
дело в том что поток колбеков и поток Main - это разные потоки.
Если функция выставления заявки будет работать в майн,
то это ничего не даст, кроме лучшей читаемости текста программы.
--------------------------
Чтобы ускорить работу надо функцию выставления заявки запускать в отдельном потоке,
а в цикле  майн проверять завершение работы этой функции.
-----------------
Если есть желание это сделать,
то рекомендую почитать книгу Дж.Рихтер Создание эффективных WIN-32 приложений с учетом специфики 64-разрядной версии Windows
Спасибо. Я правильно понимаю, что независимо от того  выставляется заявка в функции main или другой функции это никак не повлияет на взаимоотношение этой заявки и колбек функций (колбеки будут отрабатывать в любом случае)? Я просто опасаюсь, что колбек функции могут быть заточены именно для работы с заявками которые заходят из функции main...
Страницы: 1
Читают тему
Наверх