Я выше писал. Но наверно нить диалога потерялась и запуталась.
Напишу суть еще разок.
Глобальная проблемаГлобальная проблема заключается в том, что при покупке моя программа покупает или продает больше лотов, чем это необходимо.
Делает это она не всегда. На глаз могу сказать, что одна заявка из пяти выполняется некорректно.
Причина этого — заявка получила статус Done, программа учла сколько было реализовано в заявке бумаг, а после этого пришли дополнительные сделки.
То есть, косяк в том, что заявка изменяется после того, как она получила статус Done.
В частности это можно наблюдать в логах OrdersChanged, которые я приводил в этом комментарии:
http://stocksharp.com/posts/m/7659/
Собрать полноценный лог (с данными по DDE) по этой ошибке в рабочем Квике пока не получается. Над этим работаю.
Повторить эту ошибку на тестовом Квике у меня не получается.
Возможно зависит от того, что тестовый Квик и рабочий ведут себя по разному.
В процессе анализа проблемы на тестовом Квике я заметил две ошибки, которые возможно связаны с глобальной проблемой.
И решив эти ошибки решится и глобальная. А может и нет.
Промежуточная ошибка номер Раз — неверное время Order.Time «0001-01-01 00:00:00.0000000»В экселе «44300176 and 44300177.xls» можно посмотреть данные по заявке 44300177.
В первой записи , в которой Order.State поменялся на Done, Order.Time равно «0001-01-01 00:00:00.0000000».
Code2011-04-26 12:20:33.4339766 OrdersChanged TransactionId: 44300177 Balance: 0 Volume: 39 State: Done CancelTime: Status: Accepted
В файлике свойства Order.Time не видно. Но это точно так, потому что как только заявка становится Done, она у меня
логируется в SQL. И в SQL Order.Time для этой заявки равно «0001-01-01 00:00:00.0000000».
Позже я исправил это упущение и в коде, который я привел раньше, Order.Time логируется в Debug.
Но, к сожалению, на момент создания эксель файликов этого изменения еще не было.
Итак, основная мысль, что на момент, когда заявка становится Done время заявки Order.Time некорректно.
Эта же ошибка уже встречалась здесь:
http://stocksharp.com/fo...et-00-00-00-0001-ghoda/
Заявка 44300176 в экселике имеет корректное свойство Order.Time.
Сравнивая DDE данные для заявок 44300177 и 44300176 я обнаружил, что перед первым событием OrdersChanged когда статус становиться равным Done для заявки 44300176 данные по DDE пришли, а для 44300177 нет. То есть заявка 44300177 произвольно поменяла значение статуса на Done. Это мои предположения, возможно они не верны.
Элемент данных DDE для 44300177, когда статус стал Done, а соответствующих данных DDE нет:
Code
2011-04-26 12:20:33.3871010 PreProcessDdeData String: мои сделки
2011-04-26 12:20:33.3871010 PreProcessDdeData Row: 0
2011-04-26 12:20:33.3871010 PreProcessDdeData Column: 0 Object: 127278
2011-04-26 12:20:33.3871010 PreProcessDdeData Column: 1 Object: 12:20:33
2011-04-26 12:20:33.3871010 PreProcessDdeData Column: 2 Object: SBER03
2011-04-26 12:20:33.3871010 PreProcessDdeData Column: 3 Object: EQBR
2011-04-26 12:20:33.4027262 PreProcessDdeData Column: 4 Object: 102.19
2011-04-26 12:20:33.4027262 PreProcessDdeData Column: 5 Object: 39
2011-04-26 12:20:33.4027262 PreProcessDdeData Column: 6 Object: 259356
2011-04-26 12:20:33.4027262 PreProcessDdeData Column: 7 Object: 26.04.2011
2011-04-26 12:20:33.4027262 PreProcessDdeData Column: 8 Object: BUY
2011-04-26 12:20:33.4183514 PreProcessDdeData String: все сделки
2011-04-26 12:20:33.4183514 PreProcessDdeData Row: 0
2011-04-26 12:20:33.4183514 PreProcessDdeData Column: 0 Object: 127273
2011-04-26 12:20:33.4183514 PreProcessDdeData Column: 1 Object: 12:20:32
2011-04-26 12:20:33.4183514 PreProcessDdeData Column: 2 Object: SBER03
2011-04-26 12:20:33.4339766 PreProcessDdeData Column: 3 Object: EQBR
2011-04-26 12:20:33.4339766 PreProcessDdeData Column: 4 Object: 102.19
2011-04-26 12:20:33.4339766 OrdersChanged TransactionId: 44300177 Balance: 0 Volume: 39 State: Done CancelTime: Status: Accepted
Элемент данных DDE для 44300176, когда статус стал Done, но соответствующие данные DDE есть:
Code
2011-04-26 12:20:32.2777118 PreProcessDdeData String: заявки
2011-04-26 12:20:32.2777118 PreProcessDdeData Row: 0
2011-04-26 12:20:32.2933370 PreProcessDdeData Column: 0 Object: 259271
2011-04-26 12:20:32.2933370 PreProcessDdeData Column: 1 Object: SBER03
2011-04-26 12:20:32.3089622 PreProcessDdeData Column: 2 Object: EQBR
2011-04-26 12:20:32.3089622 PreProcessDdeData Column: 3 Object: 102.22
2011-04-26 12:20:32.3089622 PreProcessDdeData Column: 4 Object: 39
2011-04-26 12:20:32.3245874 PreProcessDdeData Column: 5 Object: 0
2011-04-26 12:20:32.3245874 PreProcessDdeData Column: 6 Object: B
2011-04-26 12:20:32.3402126 PreProcessDdeData Column: 7 Object: FILLED
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 8 Object: 12:20:31
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 9 Object:
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 10 Object: L01-00000F00
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 11 Object: LSW
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 12 Object: 6014//S#
2011-04-26 12:20:32.3558378 PreProcessDdeData Column: 13 Object: 44300176
2011-04-26 12:20:32.3714630 PreProcessDdeData Column: 14 Object: 26.04.2011
2011-04-26 12:20:32.3714630 PreProcessDdeData Column: 15 Object: 6014
2011-04-26 12:20:32.3714630 PreProcessDdeData String: [стакан]SBER03-EQBR
2011-04-26 12:20:32.3714630 PreProcessDdeData Row: 0
2011-04-26 12:20:32.3870882 PreProcessDdeData Column: 0 Object: 0
2011-04-26 12:20:32.3870882 PreProcessDdeData Column: 1 Object: 101.66
2011-04-26 12:20:32.3870882 PreProcessDdeData Column: 2 Object: 40
2011-04-26 12:20:32.3870882 PreProcessDdeData Row: 1
2011-04-26 12:20:32.3870882 PreProcessDdeData Column: 0 Object: 0
2011-04-26 12:20:32.3870882 PreProcessDdeData Column: 1 Object: 102.03
2011-04-26 12:20:32.4027134 PreProcessDdeData Column: 2 Object: 94
2011-04-26 12:20:32.4027134 OrdersChanged TransactionId: 44300176 Balance: 0 Volume: 39 State: Done CancelTime: Status: Accepted
Промежуточная ошибка номер Два — время Order.CancelTime отсутствует, а должно быть.В экселе «44300189 and 44300190.xls» можно посмотреть данные по заявке 44300190.
Когда пришло первое событие OrdersChanged для этой заявки с статусом Done, свойство Order.CancelTime было пустым.
В следующем событии это время уже не пустое.
Code
Date Message
2011-04-26 12:21:39.4660718 OrdersChanged TransactionId: 44300190 Balance: 1 Volume: 1 State: Active CancelTime: Status: Accepted
2011-04-26 12:21:39.5754482 OrdersChanged TransactionId: 44300190 Balance: 1 Volume: 1 State: Active CancelTime: Status: Accepted
2011-04-26 12:21:44.5286366 OrdersChanged TransactionId: 44300190 Balance: 1 Volume: 1 State: Done CancelTime: Status: Accepted
2011-04-26 12:21:45.1848950 OrdersChanged TransactionId: 44300190 Balance: 1 Volume: 1 State: Done CancelTime: 26.04.2011 12:21:44 Status: Accepted
Аналогично предыдущему случаю, если посмотреть данные DDE то перед третьим событием OrdersChanged данные DDE для заявки не приходят. Из чего я делаю вывод, что заявка меняет статус на Done самопроизвольно:
Code
2011-04-26 12:21:43.8567530 PreProcessDdeData String: все сделки
2011-04-26 12:21:43.8567530 PreProcessDdeData Row: 0
2011-04-26 12:21:43.8567530 PreProcessDdeData Column: 0 Object: 128200
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 1 Object: 12:21:43
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 2 Object: SBER03
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 3 Object: EQBR
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 4 Object: 102.12
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 5 Object: 10
2011-04-26 12:21:43.8723782 PreProcessDdeData Column: 6 Object: BUY
2011-04-26 12:21:43.8880034 PreProcessDdeData Column: 7 Object: 26.04.2011
2011-04-26 12:21:43.8880034 PreProcessDdeData String: все сделки
2011-04-26 12:21:43.8880034 PreProcessDdeData Row: 0
2011-04-26 12:21:43.8880034 PreProcessDdeData Column: 0 Object: 128201
2011-04-26 12:21:43.9036286 PreProcessDdeData Column: 1 Object: 12:21:43
2011-04-26 12:21:43.9036286 PreProcessDdeData Column: 2 Object: SBER03
2011-04-26 12:21:43.9036286 PreProcessDdeData Column: 3 Object: EQBR
2011-04-26 12:21:43.9036286 PreProcessDdeData Column: 4 Object: 102.12
2011-04-26 12:21:43.9036286 PreProcessDdeData Column: 5 Object: 2
2011-04-26 12:21:43.9192538 PreProcessDdeData Column: 6 Object: BUY
2011-04-26 12:21:43.9192538 PreProcessDdeData Column: 7 Object: 26.04.2011
2011-04-26 12:21:44.5286366 OrdersChanged TransactionId: 44300190 Balance: 1 Volume: 1 State: Done CancelTime: Status: Accepted
ИтогВ этих двух локальных ошибках, на мой взгляд, есть общая черта — заявка изменяется после того, как статус стал Done.
Возможно эти ошибки связаны с глобальной ошибкой, а возможно нет.