Что я делаю неправильно с формой заявки?

Страницы: 1
RSS
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
 
Всем привет!

Учусь кодить заявки на покупку/продажу и сделал такой код
Код
local stopped = false                                                                                                -- переменная управляющая основным циклом скрипта если значение false цикл работает, если true цикл останавливается и выполнение скрипта заканчивается.
function OnStop()                                                                                                   -- функция обратного вызова OnStop() вызывается терминалом QUIK в случае нажатия кнопки "Остановить" в окне "Доступные скрипты"
   stopped = true                                                                                                   -- изменение значения переменной stopped на true, для остановки основного цикла скрипта
   return 2000
end

function main()

   while stopped == false do
      local ID_B_Order
      local OrderSell = {
                     ["ACTION"]="NEW_ORDER",
                     ["ACCOUNT"]= "SPBFUT*****",
                            ["OPERATION"] = "B",
                     ["CLASSCODE"]="SPBFUT",
                            ["SECCODE"] = "LKU0",
                            ["PRICE"] = "0",
                     ["QUANTITY"] = tostring(1),
                     ["TRANS_ID"] = tostring(ID_B_Order),
                     ["TYPE"] = "M",
                     }
            message(Err_Order)
            local Err_Order = sendTransaction(OrderSell)

            while Status_B_Order == nil and Err_Order == "" do
               sleep(10)
            end
   end

end

При запуске Квик не реагирует вообще.
Может быть что-то не дописал или в Квике должна быть открыта какая-нибудь таблица?

Спасибо за подсказку )
 
Цитата
Leonid написал:
При запуске Квик не реагирует вообще.
Потому что Вы выводите сообщение с ошибкой ДО того как отправляется транзакция.
переместите message(Err_Order)
после вызова sendTransaction

тогда увидите ошибку:


Она означает что вы неверно передали параметр TRANS_ID
У Вас в коде он задается через переменную ID_B_Order которая является пустой
укажите там хоть какое-нибудь значение
     local ID_B_Order = 123
 
Sergey Gorokhov, большое спасибо.

Код доработал, и все заработало.
Не поможете еще с одним вопросом?
Я задал условие, что покупка возможна тогда когда количество бумаг в портфеле равно 0
Выражение if portfolio=0 системе не понравилось, и когда я заменил на if portfolio=="0", то ошибка исчезла, но код не работает
В чем может быть проблема?

Заранее спасибо!
Код
local stopped = false                                                                                                -- переменная управляющая основным циклом скрипта если значение false цикл работает, если true цикл останавливается и выполнение скрипта заканчивается.
function OnStop()                                                                                                   -- функция обратного вызова OnStop() вызывается терминалом QUIK в случае нажатия кнопки "Остановить" в окне "Доступные скрипты"
   stopped = true                                                                                                   -- изменение значения переменной stopped на true, для остановки основного цикла скрипта
   return 2000
end

function main()

   while stopped == false do

      local portfolio = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet

      if portfolio=="0" then
         local ID_B_Order=10
         local OrderSell = {
                     ["ACTION"]="NEW_ORDER",
                     ["ACCOUNT"]= "SPBFUT***",
                            ["OPERATION"] = "B",
                     ["CLASSCODE"]="SPBFUT",
                            ["SECCODE"] = "LKU0",
                            ["PRICE"] = "0",
                     ["QUANTITY"] = tostring(1),
                     ["TRANS_ID"] = tostring(ID_B_Order),
                     ["TYPE"] = "M",
                     }
               message(Err_Order)
            local Err_Order = sendTransaction(OrderSell)


            while Status_B_Order == nil and Err_Order == "" do
               sleep(10)
            end
            ID_B_Order = ID_B_Order + 1
      end

      sleep(1000)
   end

end
 
Цитата
Leonid написал:
Выражение if portfolio=0 системе не понравилось,
Потому что знак сравнения это двойное равенство "=="

Цитата
Leonid написал:
В чем может быть проблема?
Вы сравниваете число со строкой.
Правильно так:
if portfolio==0 then
 
Sergey Gorokhov, большое спасибо за помощь.

Честно говоря, я удивился, что getFuturesHolding возвращает STRING.
Если выполнить код ниже, то он почему-то дает NUMBER...
Код
function main()
local portfolio = getFuturesHolding("SPBFUT", "SPBFUT****","LKU0",0).totalnet

      message(type(portfolio))
end
 
Цитата
Leonid написал:
Честно говоря, я удивился, что getFuturesHolding возвращает STRING.
Где это сказано? От куда информация?
Вроде бы я такого не говорил. Да и в документации сказано NUMBER
Просьба не дезинформировать людей на форуме
 
Sergey Gorokhov, вы не могли по возможности глянуть мой вопрос от 14.07.2020 в 10:37?
Заранее спасибо!
Страницы: 1
Читают тему
Наверх