OnFuturesClientHolding

Страницы: 1
RSS
OnFuturesClientHolding, как работает данный коллбэк
 
Добрый день.
Подскажите как работает данный коллбэк. У меня он срабатывает несколько раз при изменении позиции. Код приведен ниже.

Код
require"QL"
log="log.log"
is_run = true
function OnStop(s)
  is_run = false
  toLog(log,'OnStop. Script finished manually')
  message ("auto_stop finished manually", 2)
end

function OnFuturesClientHolding(fut_pos)
    message("Произошла сделка по инструменту "..fut_pos.sec_code,3)
end

function main()
    log=getScriptPath()..'\\'..log
    toLog(log,"Start main")    
    while is_run do
    sleep(5000)
    end
    toLog(log,"Main ended")
end
 
Цитата
Eugene Korno пишет:
Добрый день.
Подскажите как работает данный коллбэк. У меня он срабатывает несколько раз при изменении позиции. Код приведен ниже.
Код
 require"QL"
log="log.log"
is_run = true
function OnStop(s)
  is_run = false
  toLog(log,'OnStop. Script finished manually')
  message ("auto_stop finished manually", 2)
end

function OnFuturesClientHolding(fut_pos)
    message("Произошла сделка по инструменту "..fut_pos.sec_code,3)
end

function main()
    log=getScriptPath()..'\\'..log
    toLog(log,"Start main")    
    while is_run do
    sleep(5000)
    end
    toLog(log,"Main ended")
end 
Евгений. Этот колбек срабатывает не на сделку,  на какие-то изменения в портфеле срочного рынка. Эти изменения могут быть вам видны глазом в экранной таблице квика, а могут быть и не видны.

Нет никакой гарантии, что сделка по инструменту вызовет только один колбек, и точно также нет никакой гарантии, что этот колбек будет срабатывать только про исполнению сделок (причин для изменений в таблице позиций срочного рынка много разных)

Для установления факта сделки существует колбек onTrade.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
require"QL"
подскажите где мне найти эту библиотеку? у меня в терминале при загрузки программы вызывает ошибку так как не находит эту библиотеку.
 
Цитата
Evgeny Grizli написал:
require"QL"
подскажите где мне найти эту библиотеку? у меня в терминале при загрузки программы вызывает ошибку так как не находит эту библиотеку.

Это сторонняя библиотека которая не имеет отношения к нашей компании.
Если она Вам необходима, попробуйте поискать в интернете.

Для того чтобы приведенный выше код работал, библиотека не обязательна.
Можно упростить его до такого
Код
is_run = true
function OnStop(s)
  is_run = false
  message ("auto_stop finished manually", 2)
end

function OnFuturesClientHolding(fut_pos)
    message("Произошла сделка по инструменту "..fut_pos.sec_code,3)
end

function main()
    while is_run do
    sleep(5000)
    end
end 
 
Вот эту функцию выполняет эта библиотека? Или я не понял?
 
Цитата
Evgeny Grizli написал:
Вот эту функцию выполняет эта библиотека? Или я не понял?

Какую именно функцию?
 
вы упростили программу и там отсутствует запись в файл log.log или в библиотеке была функция создания файла для наполнения его. ну это не важно.
я предположил, что эта библиотека как-то связана с этим.
это так?
 
Evgeny Grizli,
Еще раз, данная библиотека никакого отношения к нашей компании не имеет, ее разработали посторонние люди с которыми мы не знакомы.
Что делает эта библиотека нам не известно.
И как уже было сказано, для того чтобы приведенный код работал, эта библиотека не нужна, в случае если удалить все лишнее, что и было сделано.
Иными словами, может быть эта библиотека действительно содержит функцию "toLog" а может и нет, это следует уточнить у авторов библиотеки, а не у нас.
Если Вам нужна функция записи в лог файл, Вы можете ее реализовать самостоятельно через стандартные функции (см описание функции io.open).
 
спасибо. Вам.
 
Уважаемые форумчане, подскажите пожалуйста еще информацию по поводу OnFuturesClientHolding.
Есть код:

Код
TotalVol    = 0 -- Количество имеющихся лотов totalnet(NUMBER)
SellVolAct  = 0 -- Количество лотов в заявках на продажу (NUMBER)
BuyVolAct   = 0 -- Количество лотов в заявках на продажу (NUMBER)

function main()
    while is_run do
        message("TotalNet="..(tostring(TotalVol)).." || ".."SellVolAct="..(tostring(SellVolAct)).." || ".."BuyVolAct="..(tostring(BuyVolAct))) 
        sleep(5000)
    end
end

function OnStop()
    message("Stoped", 2)
    is_run = false
    return 5000

end

function OnFuturesClientHolding(fut_pos)
    TotalVol = fut_pos.totalnet
    SellVolAct = fut_pos.opensells
    BuyVolAct = fut_pos.openbuys
end
По задумке должен отображать в виде сообщения информацию о наличии позиций, а так же о заявках на покупку или продажу. Важна именно информация, что заявка есть и какое количество лотов в заявке.
На сколько я понял мануал по этому коллбеку, строки fut_pos.opensells и fut_pos.openbuys как раз и должны эту информацию предоставлять.
Вот только если строка TotalVol = fut_pos.totalnet работает и например при покупке 1 лота в сообщении пишет TotalNet=1, то две нижних строки не реагируют совершенно. Есть ли заявки на покупку/продажу - всё равно стоят ноли.
Куда копать, что исправлять?  
 
Евгений, добрый день.

Для того, чтобы данный скрипт работал сообразно Вашим задачам,
Цитата
По задумке должен отображать в виде сообщения информацию о наличии позиций, а так же о заявках на покупку или продажу.
необходимо вызывать mesage() в колбеке OnFuturesClientHolding:
Код
TotalVol    = 0 -- Количество имеющихся лотов totalnet(NUMBER)
SellVolAct  = 0 -- Количество лотов в заявках на продажу (NUMBER)
BuyVolAct   = 0 -- Количество лотов в заявках на продажу (NUMBER)

function main()
    while is_run do
        sleep(5000)
    end
end

function OnStop()
    message("Stoped", 2)
    is_run = false
    return 5000

end

function OnFuturesClientHolding(fut_pos)
    TotalVol = fut_pos.totalnet
    SellVolAct = fut_pos.opensells
    BuyVolAct = fut_pos.openbuys
    message("TotalNet="..(tostring(TotalVol)).." || ".."SellVolAct="..(tostring(SellVolAct)).." || ".."BuyVolAct="..(tostring(BuyVolAct))) 

end
В таком виде программа при изменении позиции по Срочному рынку будет выводить количество контрактов в открытых позициях на текущий момент, количество контрактов в активных заявках на продажу и количество контрактов в активных заявках на покупку.
    Если TotalNet=1 появилось после выставления заявки, значит она     исполнилась и openbuys и opensells ничего не покажут, так как они     предназначены для активных, а не исполненных, заявок.
Страницы: 1
Читают тему
Наверх