обнаружил такую вещь. Примерно в 10% случаев в список Strategy.MyTrades не попадают сделки. Полностью это заметил в таком коде
private void WaitMyTradesComplement()
{
while(true){
if(IsLastTradeByOrderInList()){
break;
}
Thread.Sleep(1000);
}
}
private bool IsLastTradeByOrderInList()
{
if(MyTrades.Count > 0
&& MyTrades[MyTrades.Count-1].Order.Id == _order.Id
&& MyTrades[MyTrades.Count-1].Order.IsMatched()){
//MessageBox.Show("true");
return true;
}
string ids = "";
foreach(MyTrade p in MyTrades){
ids += p.Trade.Id.ToString() + " ";
}
int a = 0;
a++;
MessageBox.Show(ids);
return false;
}
Этот метод перезапускается до тех пор ,пока не вернёт true. Время от времени он выдает что список пуст, это происходит после первой сделки т.е. правило When(StrategyRuleConditionHelper.Matched(_order)) сработало, а список не пополнился. Метод вызывается с задержкой в 1 секунду , и в случае бажного поведения из цикла не выходит и выдает пустые MessageBox. ProcessDataError ничего не выдает.
Comments (11)
Login or Create account, Log in or register to leave a comment
у вас ведь не бесконечно он мессаджбоксы выводит - а один-два раза на ордер? если так, то я думаю это значит что в 10% случаев сначала происходит событие StrategyRuleConditionHelper.Matched(_order) и только потом через некоторое время прилетают трейды.
Если он выводит мессаджбоксы один-два раза на ордер ,то алгоритм отрабатывается нормально, а в 10% случаев у него бесконечный поток мессаджбоксов и алгоритм стопорится.
поставьте брекпоинт и посмотрите какое условие не выполняется. или у вас _order уже сменился или ордер полностью не выполнился или ваш трейд прилетел не относящийся к этому ордеру или еще чтонибудь :)
Я посмотрю в отладчике ,но боюсь что проблема так не разрешится. До этого у меня был код ,который следил за размером списка и проблемы были такие же.
К сожадению эта проблема в 3.2.6 продолжается. часто бывает так ,что после первой сделки список сделок остается совершенно пустым.
Какой коннектор?
Если эта ошибка, то проблема скорее всего не в S# и новые версии вряд ли исправят.
Взял пример SampleSMA, заменил стратегию СМА на свою. Ошибка осталась. Время от времени сделки не попадают в список. что посоветуете проверить?
Логика у меня очень простая, и я невижу в ней ошибок, тем более ,что она в болшем числе случаев работает правильно. Но я понимаю ,что возможно ошибка в ней.
Посмотрите ,пожалуйста, может быть взгляд со стороны что-нибудь увидит
vader, 1.поставьте брекпоинт перед выводом мессаджбокса и поизучайте что у вас в списке ордеров и что в списке трейдов 2.сделайте вывод логов а не мессадж-бокса - если они у вас выледают один-за-другим то сомневаюсь что вы успеваете изучить отладочную информацию из них - а тогда какой в них толк?