← Назад

Как определить текущую позицию по инструменту?

Даже если мои сделки совершались в другой программе

Комментарии (9)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

SecurityPositionManager

Ilya Usenko
Ilya Usenko Автор

Если были мои сделки внутри дня, то видимо покажет верное значение. А если купля - вчера, продажа - сегодня, то показывает отрицательную позицию. Как быть?

Mikhail Sukhov
Mikhail Sukhov

Квик не хранит историю. Так что, сохраняйте свои сделки в файл.

Ilya Usenko
Ilya Usenko Автор

При клике по клиентскому портфелю в квике, открывается таблица с информацией об остатках, лимитам на покупку, продажу. Вы не работаете с этой таблицей?

Mikhail Sukhov
Mikhail Sukhov

Нет. Но как экспортировать портфель я показал в примере Sample

AndreiFX
AndreiFX

тут еще может быть ситуация подобная интересная: например за прошлый день было сделано n покупок=n продаж(т.е. в сумме 0). Иногда квик на следующий день запоминает часть из них и может быть такая ситуация,что на след. день с прошлого дня имеется например как бы несколько покупок или несколько продаж, хотя фактически баланс равен нулю. И из за этого могут быть проблемы. Я это решал вот так: у меня есть public ObservableCollection<MyOrderss> Trades { get; private set; } и в эту коллекцию с небольшими изменениями я заношу трэйды(но это к проблеме не относится) Далее когда трейды с истории получены и занесены в эту коллекцию делаю вот такую сортировку

int k = -1; for (int i = 0; i <= Trades.Count() - 2; i++) if (Trades.Time > Trades[i + 1].Time) k = i;

       if (k != -1)
        {
            for (int i = k; i >=0; i--)
                 Trades.Remove(Trades);
        }

А потом чтобы получить суммарную позицию считаю вот так count = 0; foreach (MyOrderss x in Trades) { if (x.Direction == OrderDirections.Buy) count += 1 * x.Volume; if (x.Direction == OrderDirections.Sell) count -= 1 * x.Volume; }

да, получается деревянно, но зато работает и не глючит))

Mikhail Sukhov
Mikhail Sukhov

Заметил, что Квик запоминает сделки и заявки на демо счете. Но там и сессия длится 23 часа, начиная с 3-ех ночи.

Только все равно не понял, какие проблемы, если баланс все равно 0?

AndreiFX
AndreiFX

У меня квик реал, но тоже иногда запоминает часть сделок с прошлого дня Проблемы если фактический баланс равен нулю могут быть следующие. У меня например робот смотрит баланс таким образом count = 0; foreach (MyOrderss x in Trades) { if (x.Direction == OrderDirections.Buy) count += 1 *x.Volume; if (x.Direction == OrderDirections.Sell) count -= 1 *x.Volume; }

И если count!=0 то он ничего не делает, т.е. дальше не торгует. И может возникнуть ситуация, когда фактический баланс равен нулю, но если посмотреть по трейдам вышеописанным образом, то он не будет равен нулю(т.к. тут учитывается часть сделок с прошлой сессии). Также если посмотреть на дату и время этих сделок, то получается что "вчерашние" сделки имеют сегодняшнюю дату, т.е. например текущее время 12 00, а у нас уже есть сделки как бы за сегодня со временем 18 00 ит.д...тоже могут быть проблемы если отслеживается время открытия сделок.

...я не прошу решения этого вопроса, я просто поделился наблюдениями и мыслями какие теоретически могут быть ошибки.

Mikhail Sukhov
Mikhail Sukhov

Да, теперь понятно, спасибо.

Небольшое замечание по коду. В TraderHelper есть метод GetPosition, который делает тоже самое, что и Ваш цикл. Только Вы его использовать сразу не сможете, потому что у Вас собственные типы введены. Как совет

  • следуйте Бритве Оккамы.