Если были мои сделки внутри дня, то видимо покажет верное значение.
А если купля - вчера, продажа - сегодня, то показывает отрицательную
позицию.
Как быть?
При клике по клиентскому портфелю в квике, открывается таблица с
информацией об остатках, лимитам на покупку, продажу.
Вы не работаете с этой таблицей?
тут еще может быть ситуация подобная интересная: например за прошлый
день было сделано 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;
}
да, получается деревянно, но зато работает и не глючит))
У меня квик реал, но тоже иногда запоминает часть сделок с прошлого
дня
Проблемы если фактический баланс равен нулю могут быть следующие.
У меня например робот смотрит баланс таким образом
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
ит.д...тоже могут быть проблемы если отслеживается время открытия
сделок.
...я не прошу решения этого вопроса, я просто поделился наблюдениями и
мыслями какие теоретически могут быть ошибки.
Небольшое замечание по коду. В TraderHelper есть метод GetPosition,
который делает тоже самое, что и Ваш цикл. Только Вы его использовать
сразу не сможете, потому что у Вас собственные типы введены. Как совет
следуйте Бритве Оккамы.
Мы используем куки для обеспечения лучшего опыта на нашем сайте. Продолжая использовать наш сайт, вы соглашаетесь на использование куки.
Комментарии (9)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
SecurityPositionManager
Если были мои сделки внутри дня, то видимо покажет верное значение. А если купля - вчера, продажа - сегодня, то показывает отрицательную позицию. Как быть?
Квик не хранит историю. Так что, сохраняйте свои сделки в файл.
При клике по клиентскому портфелю в квике, открывается таблица с информацией об остатках, лимитам на покупку, продажу. Вы не работаете с этой таблицей?
Нет. Но как экспортировать портфель я показал в примере Sample
тут еще может быть ситуация подобная интересная: например за прошлый день было сделано 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;
А потом чтобы получить суммарную позицию считаю вот так 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; }
да, получается деревянно, но зато работает и не глючит))
Заметил, что Квик запоминает сделки и заявки на демо счете. Но там и сессия длится 23 часа, начиная с 3-ех ночи.
Только все равно не понял, какие проблемы, если баланс все равно 0?
У меня квик реал, но тоже иногда запоминает часть сделок с прошлого дня Проблемы если фактический баланс равен нулю могут быть следующие. У меня например робот смотрит баланс таким образом 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 ит.д...тоже могут быть проблемы если отслеживается время открытия сделок.
...я не прошу решения этого вопроса, я просто поделился наблюдениями и мыслями какие теоретически могут быть ошибки.
Да, теперь понятно, спасибо.
Небольшое замечание по коду. В TraderHelper есть метод GetPosition, который делает тоже самое, что и Ваш цикл. Только Вы его использовать сразу не сможете, потому что у Вас собственные типы введены. Как совет