Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,461+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,461+ Tradern und Entwicklern✦
не совсем правильно объяснила =) сначала заявка снимается, потом проверяется, точно ли была снята. Узнаем, что да, была снята. Как уже после её снятия, когда она неактивна, узнать, сколько контрактов оставалось в заявке до её снятия?
D_Alex:
не совсем правильно объяснила =) сначала заявка снимается, потом проверяется, точно ли была снята. Узнаем, что да, была снята. Как уже после её снятия, когда она неактивна, узнать, сколько контрактов оставалось в заявке до её снятия?
Через Order.Balance. То, что он не показывает реальный остаток, говорит об ошибке в передаче данных (помогает ITrader.ProcessDataError). Или вы в программе не дождались того момента, как было получено подтверждение о снятии заявки.
хотя нет, на рабочем тоже был застигнут этот глюк, причем в одном и том же месте иногда определяет правильно, а иногда - нет О_о и это при одинаковых условиях
D_Alex:
хотя нет, на рабочем тоже был застигнут этот глюк, причем в одном и том же месте иногда определяет правильно, а иногда - нет О_о и это при одинаковых условиях
Mikhail Sukhov:
ITrader.ProcessDataError
Там чисто. Есть догадка, что определяется неверно, когда при попытке снятия заявки в тот момент она исполняется, буду проверять.
в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume
D_Alex:
в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume
Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.
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;
}
возможно, тут и в коде косяки - он индусский весьма 😊 но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно
D_Alex:
возможно, тут и в коде косяки - он индусский весьма 😊 но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно
Да уж. Я мало что понял в этих хитросплетениях. Выделите код в минимальный проект, где бы бага воспроизводилась. Сейчас в этом коде искать смысла нет баги - ошибка может быть в любом месте, вплоть до неправильного получения заявки (не та заявка).
Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи
Выложила сюда
После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин
D_Alex:
Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи
Выложила сюда
После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин
Попытался скомпилировать. Не получилось. Какая версия S#?
Обновилась, не помогло.
Помогло другое - поставила перед определением остатка sleep в одну секунду. Теперь определяет правильно =) странно, но ведь как раз перед этим определяется, что заявка точно уже снята/исполнена?
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (24)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Дождаться события OrdersChanged.
не совсем правильно объяснила =) сначала заявка снимается, потом проверяется, точно ли была снята. Узнаем, что да, была снята. Как уже после её снятия, когда она неактивна, узнать, сколько контрактов оставалось в заявке до её снятия?
Через Order.Balance. То, что он не показывает реальный остаток, говорит об ошибке в передаче данных (помогает ITrader.ProcessDataError). Или вы в программе не дождались того момента, как было получено подтверждение о снятии заявки.
показывает не остаток, а полное количество, то есть если было выставлено 10, а осталось 8, то выдает все 10. Хм, гляну ProcessDataError
Проверяйте сразу на Sample. Если он работает, а у вас нет, значит настройки таблиц в Квике правильные, и ошибка у вас в программе.
Чудеса, на моем рабочем компе все в порядке. Наверное на том действительно что-то с настройкой квика. Спасибо за помощь =)
хотя нет, на рабочем тоже был застигнут этот глюк, причем в одном и том же месте иногда определяет правильно, а иногда - нет О_о и это при одинаковых условиях
ITrader.ProcessDataError
в ITrader.ProcessDataError так ничего и не появилось, и вроде выяснили, что это происходит, когда при попытке снять заявку она исполняется частично, и остаток возвращается неправильно, не неисполненную часть, а Volume
Посмотрел в код, не увидел мест, которое может привести к подобному. Можно проверить. Какой объем у заявки стоит? Что за инструмент? Лучше еще будет, если приведете минимальный код ввиде проверки.
сама я этот момент не засекала, но видно по логу и списку сделок в Quik'e, что кусочек заявки исполнился =) инструмент - Сбербанк, все это в QuickJunior. Вот примерный код -
и код вспомогательных функций
возможно, тут и в коде косяки - он индусский весьма 😊 но в случаях, когда заявка нормально снимается или исполняется целиком - срабатывает верно
Да уж. Я мало что понял в этих хитросплетениях. Выделите код в минимальный проект, где бы бага воспроизводилась. Сейчас в этом коде искать смысла нет баги - ошибка может быть в любом месте, вплоть до неправильного получения заявки (не та заявка).
Хорошо, постараемся сделать минимальный проект =)
Получилось воспроизвести багу в тестовом проекте =) логики тут нет, но действия похожи Выложила сюда После старта просто нажать на "Тест", отправится заявка и запустится "реакция" =) Здесь скрин
Попытался скомпилировать. Не получилось. Какая версия S#?
а что говорит? 2.6
Обновитесь до последней версии. Если ошибка не уйдет, будем дальше смотреть.
Обновилась, не помогло. Помогло другое - поставила перед определением остатка sleep в одну секунду. Теперь определяет правильно =) странно, но ведь как раз перед этим определяется, что заявка точно уже снята/исполнена?
Код примера остался неизменный?
неизменный =) вообще ничего не меняла, закомпилилось сразу
Быть этого не может. Том стоит статус OrderStatus.Done, который теперь называется Accepted.
Странно О_о все dll в папке References поменяла на новые. Или там чего перелинковать надо?
MainWindow.xaml.cs Строка 265:
Описание OrderStatus.