Order.Balance после снятия заявки
Atom Ответить
23.03.2011


Нужно получить нереализованный объем заявки после ее снятия. Order.Balance показывает полный объем, как узнать именно нереализованный?

Теги:


Спасибо:




24 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.03.2011
Ответить


D_Alex Перейти
Нужно получить нереализованный объем заявки после ее снятия. Order.Balance показывает полный объем, как узнать именно нереализованный?


Дождаться события OrdersChanged.
Спасибо:

a.dobryn

Фотография
Дата: 24.03.2011
Ответить


не совсем правильно объяснила =) сначала заявка снимается, потом проверяется, точно ли была снята. Узнаем, что да, была снята. Как уже после её снятия, когда она неактивна, узнать, сколько контрактов оставалось в заявке до её снятия?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.03.2011
Ответить


D_Alex Перейти
не совсем правильно объяснила =) сначала заявка снимается, потом проверяется, точно ли была снята. Узнаем, что да, была снята. Как уже после её снятия, когда она неактивна, узнать, сколько контрактов оставалось в заявке до её снятия?


Через Order.Balance. То, что он не показывает реальный остаток, говорит об ошибке в передаче данных (помогает ITrader.ProcessDataError). Или вы в программе не дождались того момента, как было получено подтверждение о снятии заявки.
Спасибо: a.dobryn

a.dobryn

Фотография
Дата: 24.03.2011
Ответить


показывает не остаток, а полное количество, то есть если было выставлено 10, а осталось 8, то выдает все 10. Хм, гляну ProcessDataError
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.03.2011
Ответить


D_Alex Перейти
показывает не остаток, а полное количество, то есть если было выставлено 10, а осталось 8, то выдает все 10. Хм, гляну ProcessDataError


Проверяйте сразу на Sample. Если он работает, а у вас нет, значит настройки таблиц в Квике правильные, и ошибка у вас в программе.
Спасибо: a.dobryn

a.dobryn

Фотография
Дата: 25.03.2011
Ответить


Чудеса, на моем рабочем компе все в порядке. Наверное на том действительно что-то с настройкой квика. Спасибо за помощь =)
Автор топика
Спасибо:

a.dobryn

Фотография
Дата: 25.03.2011
Ответить


хотя нет, на рабочем тоже был застигнут этот глюк, причем в одном и том же месте иногда определяет правильно, а иногда - нет О_о и это при одинаковых условиях
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 25.03.2011
Ответить


D_Alex Перейти
хотя нет, на рабочем тоже был застигнут этот глюк, причем в одном и том же месте иногда определяет правильно, а иногда - нет О_о и это при одинаковых условиях


ITrader.ProcessDataError
Спасибо:

a.dobryn

Фотография
Дата: 28.03.2011
Ответить


Mikhail Sukhov Перейти

ITrader.ProcessDataError

Там чисто. Есть догадка, что определяется неверно, когда при попытке снятия заявки в тот момент она исполняется, буду проверять.
Автор топика
Спасибо:

a.dobryn

Фотография
Дата: 29.03.2011
Ответить


в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 29.03.2011
Ответить


D_Alex Перейти
в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume


Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.
Спасибо:

a.dobryn

Фотография
Дата: 29.03.2011
Ответить


Mikhail Sukhov Перейти
D_Alex Перейти
в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume


Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.


сама я этот момент не засекала, но видно по логу и списку сделок в Quik'e, что кусочек заявки исполнился =)
инструмент - Сбербанк, все это в QuickJunior.
Вот примерный код -

Код

bool b = true;

while(b)
{                            
    CancelOrder(Cnum + 1);
    if (IsOrderCanceled(Cnum + 1) == false)
    {
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\log.txt", true))
        {
            file.WriteLine("Заявка со страйком {0} не снята", StrikesTableR2[Cnum + 1].Strike);
        }
    }    
    if (IsOrderDone(Cnum + 1))
        b = false;        
                            
}

int n = GetOrderBalance(Cnum + 1); //вот здесь бывает неверное определение



и код вспомогательных функций
Код

void CancelOrder(int num)
{
    MainWindow.Instance.CancelOrder(MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)]);
}

bool IsOrderDone(int num)
{
    return MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)].State == OrderStates.Done;
}

bool IsOrderCanceled(int num)
{
return MainWindow.Instance._ordersWindow.Orders[GetOrderNum(StrikesTableR2[num].Strike)].IsCanceled();
}

int GetOrderNum(double price)
{
    int i;
    for (i = MainWindow.Instance._ordersWindow.Orders.Count() - 1; i >= 0; i--)
        if (MainWindow.Instance._ordersWindow.Orders[i].Price == price)
            return i;
}



возможно, тут и в коде косяки - он индусский весьма Blushing но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 30.03.2011
Ответить


D_Alex Перейти
возможно, тут и в коде косяки - он индусский весьма Blushing но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно


Да уж. Я мало что понял в этих хитросплетениях. Выделите код в минимальный проект, где бы бага воспроизводилась. Сейчас в этом коде искать смысла нет баги - ошибка может быть в любом месте, вплоть до неправильного получения заявки (не та заявка).
Спасибо: a.dobryn

a.dobryn

Фотография
Дата: 31.03.2011
Ответить


Хорошо, постараемся сделать минимальный проект =)
Автор топика
Спасибо:

a.dobryn

Фотография
Дата: 04.04.2011
Ответить


Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи
Выложила сюда
После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.04.2011
Ответить


D_Alex Перейти
Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи
Выложила сюда
После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин


Попытался скомпилировать. Не получилось. Какая версия S#?
Спасибо:

a.dobryn

Фотография
Дата: 04.04.2011
Ответить


а что говорит? 2.6
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.04.2011
Ответить


D_Alex Перейти
а что говорит? 2.6


Обновитесь до последней версии. Если ошибка не уйдет, будем дальше смотреть.
Спасибо:

a.dobryn

Фотография
Дата: 04.04.2011
Ответить


Обновилась, не помогло.
Помогло другое - поставила перед определением остатка sleep в одну секунду. Теперь определяет правильно =) странно, но ведь как раз перед этим определяется, что заявка точно уже снята/исполнена?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.04.2011
Ответить


D_Alex Перейти
Обновилась, не помогло.


Код примера остался неизменный?
Спасибо:

a.dobryn

Фотография
Дата: 04.04.2011
Ответить


Mikhail Sukhov Перейти
D_Alex Перейти
Обновилась, не помогло.


Код примера остался неизменный?


неизменный =) вообще ничего не меняла, закомпилилось сразу
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 04.04.2011
Ответить


D_Alex Перейти
Mikhail Sukhov Перейти
D_Alex Перейти
Обновилась, не помогло.


Код примера остался неизменный?


неизменный =) вообще ничего не меняла, закомпилилось сразу


Быть этого не может. Том стоит статус OrderStatus.Done, который теперь называется Accepted.
Спасибо:

a.dobryn

Фотография
Дата: 05.04.2011
Ответить


Mikhail Sukhov Перейти
D_Alex Перейти
Mikhail Sukhov Перейти
D_Alex Перейти
Обновилась, не помогло.


Код примера остался неизменный?


неизменный =) вообще ничего не меняла, закомпилилось сразу


Быть этого не может. Том стоит статус OrderStatus.Done, который теперь называется Accepted.


Странно О_о все dll в папке References поменяла на новые. Или там чего перелинковать надо?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 05.04.2011
Ответить


D_Alex Перейти
Странно О_о все dll в папке References поменяла на новые. Или там чего перелинковать надо?


MainWindow.xaml.cs Строка 265:

Код
if (order.Status == OrderStatus.Done)


Описание OrderStatus.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy