Функция обратного вызова OnFuturesClientHolding

Страницы: 1
RSS
Функция обратного вызова OnFuturesClientHolding
 
* Функция вызывается терминалом QUIK при изменении позиции по срочному рынку. *

Кто-нибудь сталкивался с проблемой, когда данная функция срабатывает несколько раз подряд при 1 изменение позиции. Грубо говоря у меня счетчик изменения позиций (1,2,3,4), на 4 раз должен сработать весь готовый код, но бывает такое, что я изменяю позицию, счетчик перескакивает на 3, а потом через секунд 5-10, случайным образом, снова срабатывает функция обратного вызова без изменения мною позиции и счетчик доходит до 4 и получается полная ересь. С чем это может быть связано?
Спасибо.
 
1) С ошибкой в скрипте.
2) С ошибкой в понимании того, что запрограммировано.
 
Скорее я не понимаю, как работает данная функция обратного вызова. Скрипт я пишу сам, поэтому в нем я разбираюсь.
Нашел на форуме подобный ответ на мой вопрос.

Можно спросить совета программистов, как лучше реализовать данный алгоритм.
Необходимо после 5 изменений позиции по срочному рынку в течение 1 минуты выключить quik и закрыть все позиции.
Как я понимаю, здесь необходимо использовать функцию обратного вызова изменения позиции по срочному рынку OnFuturesClientHolding, при каждому обращении увеличивать счетчик на 1 и при равном 5 получать объем позиции и закрыть квик.
Все это у меня получается за исключением срабатываний функции обратного вызова. Можете подсказать пожалуйста, как можно решить данную проблему. Спасибо
Цитата
* Этот колбек срабатывает не на сделку, на какие-то изменения в портфеле срочного рынка. Эти изменения могут быть вам видны глазом в экранной таблице квика, а могут быть и не видны.

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

Для установления факта сделки существует колбек onTrade. *
 
Еще 1 замечание по поводу функции обратного вызова, кто может на это ответить.
Код самый простой
Код
Run = true;

function main()
   while Run do 
         sleep(10); 
   end; 
end;

 
function OnStop()
   Run = false;
end;

function OnFuturesClientHolding(fut_pos)
   message("Текущие чистые позиции "..tostring(fut_pos.totalnet));-- NUMBER
end
Функция обратного вызова срабатывает как надо, но, почему-то, каждую минуту в 18 секунд еще срабатывает функция еще раз, что дает ложный вызов при изменении позиции в данный момент времени.
 
 
Я понял, каждую минуту начисляется Вариационная Маржа и поэтому вызывается данная функция обратного вызова еще раз. Поэтому просто при условии, если не изменяется позиция, а функция вызывается, мы выходим return'ом;)
 
Цитата
Я понял, каждую минуту начисляется Вариационная Маржа
Бинго!
Откройте таблицу Позиций по клиентским счетам (фьючерсы). Там много всяких параметров. Так вот OnFuturesClientHolding будет вызываться при изменении любого параметра (даже если никакая позиция не открыта): поставили вы заявку на покупку/продажу - получите колбэк, заяка исполнилась - ещё колбэк, вариационка - ещё колбэк и т.д.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх