(QUIK Lua) Здравствуйте, я знаю что вас задолбали такие как я) но прошу помочь с кодом, конкретно нужен код для получения цены открытой позиции,цена нужна для выставления точного стоп ордера. Спасибо

  • обсудить на форуме:
  • Quik Lua
★2
ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.

Есть функция. Она бегает по «trades» циклом и ищет последнее значение. На вход функция получает SEC_CODE, например RIH8, SiH8. Возвращает она цену последней ВАШЕЙ сделки.

function getLastPrice(sec)
      for i = 0,getNumberOf(«trades») do
           local pr = getItem(«trades», i)
           if pr ~= nil and type(pr) == «table» then
                if pr.sec_code == sec and i == getNumberOf(«trades»)-1 then
                       return pr.price
                end
            end
      end
end



В вашей main функции создайте локальную переменную, которая в необходимый момент будет дергать эту функцию. Не забудьте передавать в параметрах код инструмента.

local lastPrice = getLastPrice(SEC_CODE)

Ну как-то так.

avatar
Сергей Кузьминов, а можно конкретный пример на моём коде? Пожалуйста, инструмент написан в коде
avatar

Здравствуйте, спасибо вам за ответ, я попробовал сделать как вы сказали, но что то пошло не так
подправьте пожалуйста где ошибка?

p_classcode=«SPBFUT» --Код класса
p_seccode=«RIH8» --Код инструмента
is_run = true

function getLastPrice(sec)
for i = 0,getNumberOf(«trades») do
local pr = getItem(«trades», i)
if pr ~= nil and type(pr) == «table» then
if pr.sec_code == sec and i == getNumberOf(«trades»)-1 then
return pr.price
message (pr.price)

end
end
end
end


function cb(index)

local t = ds:T(index)
local str = «свеча № »..tostring(index-1).." из "..tostring(ds:Size()).." open="..ds:O(index-1)
str = str.." close="..tostring(ds:C(index-1))
---high="..tostring(ds:H(index)).." low="..tostring(ds:L(index))
local lastPrice = getLastPrice(p_seccode)
message (lastPrice)

end — конец функции

function main()

ds=CreateDataSource(p_classcode, p_seccode, INTERVAL_M1)

ds:SetUpdateCallback(cb)

while is_run do

sleep(10)


end

end


function OnStop(stop_flag)

is_run=false

end

avatar
Alex Hell, попробуйте сделать так в функции main в цикле.

while is_run do
       local lastPrice = getLastPrice(p_seccode)
       message («Цена:»..lastPrice) 
sleep(10)

Если я правильно понимаю, cb получает на вход index, т.е. каждую свечу? По идее, каждую свечу вы должны получать значение цены последней вашей сделки. Но так как переменная локальная, функция main ничего про нее не знает и она видна только в функции cb.




avatar
Сергей Кузьминов, заработало) только теперь задудосила мне quik :D
так же можно вызвать из другой функции?
avatar
Сергей Кузьминов, Разобрался, спасибо большое за помощь!
avatar
Я ДИКО извиняюсь, ещё 1 вопрос, как получить текущую цену покупки и продажи? а то лоу хай опен и клоус я нашел а вот с этим трудности.
avatar
Alex Hell, не совсем понятен вопрос
avatar
Сергей Кузьминов, как получить текущую цену продажи и покупки, на данной картинке это покупка 126 270 а продажа 126 300

avatar
Alex Hell, не знаю, со стаканом не работал. Но можно получить цену последней сделки
local lPrice = tonumber(getParamEx(«SPBFUT»,SEC_CODE,«last»).param_value) 
avatar
Сергей Кузьминов, и на том спасибо) вы очень помогли, Хорошего вам дня и успехов в трейдинге!
avatar

Только зарегистрированные и авторизованные пользователи могут оставлять ответы.

Залогиниться

Зарегистрироваться

теги блога Alex Hell

....все тэги



UPDONW
Новый дизайн