Вопрос по обработке сделок

Вопрос по обработке сделок


Ситуация такая, стратегия отправляет заявки на биржу метод RegisterOrder(Order) и по таймауту или исполнению некого условия снимает через метод Trader.CancelOrder(Order). Учет закрытых позиций и цены происходит при событии появлении новой сделки order.NewTrades() (нужно для работы робота),
По событию снятия заявки .Order.Canceled() или её полного исполнения заявка считается закрытой.

В каждом событии стоит проверка - если статус заявки Done и количество учтенных роботом позиций равно ОбъемЗаявки - БалансЗаявки. То исключаем её из списка робота, и считаем что закрыта, т.е. робот считает что вся информация по заявке получена.
Учитывается ситуация если сделки пришли позже, чем заявка была снята/исполнена, так же есть обработка события неудачной отмены заявки. Код основательно перерыт и перепроверен.

Но иногда примерно с одной-двумя из 500 заявок возникает ситуация когда условие проверки выполняется заявка исключается, но Робот учитывает не все сделки прошедшие по заявке. Как вариант может быть такое, что в какой-то момент статус заявки Done, а баланс по ней ещё может изменится?
В чем может быть причина, может сталкивался кто-то? Уже просто не знаю что с этим делать.
Сейчас все работает на тестовом сервере РТС, Forts Plaza - II.

Tags:


Thanks:


< 1 2 3 
gazrvs_nur

Avatar
Date: 5/20/2012
Reply


Проблема в stocksharp-17079 (папка dev) та же

private void writecsv(IEnumerable<MyTrade> newMyTrades)
Ошибка 3 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

а не проще было бы сделать доступными свойства Strategy.MyTrades. ?
Thanks:

Alexander

Avatar
Date: 5/20/2012
Reply


gazrvs_nur
Проблема в stocksharp-17079 (папка dev) та же

private void writecsv(IEnumerable<MyTrade> newMyTrades)
Ошибка 3 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

а не проще было бы сделать доступными свойства Strategy.MyTrades. ?


Они все доступны.

У вас проблема в том, что не подключены либо библиотеки нужные, либо using.

Следующий код без проблем компилируется у меня:

Code
namespace Test
{
	using System.Collections.Generic;
	using StockSharp.Algo.Strategies;
	using StockSharp.BusinessEntities;

	public class MyStategy : Strategy
	{
		protected override void OnStarting()
		{
			base.OnStarting();

			this.WhenNewMyTrades().Do(writecsv);
		}

		void writecsv(IEnumerable<MyTrade> newMyTrades)
		{
		}
	}
}


Собираю под .Net Framework 4.0
Thanks: gazrvs_nur

gazrvs_nur

Avatar
Date: 5/20/2012
Reply


Спасибо Александр,
вся проблема была в using System.Collections.Generic;
я использовал using System.Collections;
странно конечно .Generic должен входить в System.Collections по умолчанию, но видимо не обязан.

вот только проблема была не в вызове процедуры с передаче туда MyTrades,
а в том, чтобы получить дату, время, цену и направление последней сделки из this.MyTrades.

пока вытащить из IEnumerable<MyTrade> это данные неполучается.

добавить что то вроде this.MyTrades.Last() тоже нельзя.

в цикле foreach (IEnumerable<MyTrade> value in newMyTrades) получить какое либо значение(дату, время) "value." также не идет.
Thanks:

gazrvs_nur

Avatar
Date: 5/21/2012
Reply


Может кому понадобится.
Извернулся в вышеуказанном случае следующим образом:
private void writecsv(IEnumerable<MyTrade> newMyTrades)
{
var Tradeneed = new List<MyTrade>(newMyTrades);
decimal ClosedVolumeneed = Tradeneed[0].ClosedVolume;
decimal Volumeneed = Tradeneed[0].Trade.Volume;
DateTime Timeneed = Tradeneed[0].Trade.Time;
string Securityneed = Tradeneed[0].Trade.Security.ToString();
decimal Priceneed = Tradeneed[0].Trade.Price;
string Directionneed = Tradeneed[0].Trade.OrderDirection.ToString();
long Idneed = Tradeneed[0].Trade.Id;
}
Thanks:

Alexander

Avatar
Date: 5/22/2012
Reply


gazrvs_nur
вот только проблема была не в вызове процедуры с передаче туда MyTrades,
а в том, чтобы получить дату, время, цену и направление последней сделки из this.MyTrades.

пока вытащить из IEnumerable<MyTrade> это данные неполучается.

добавить что то вроде this.MyTrades.Last() тоже нельзя.

в цикле foreach (IEnumerable<MyTrade> value in newMyTrades) получить какое либо значение(дату, время) "value." также не идет.


К сожалению, лишь сейчас увидел это добавление к сообщению.
На будущее просьба писать новые сообщения, а не редактировать предыдущие :)
А то они через RSS не идут. Я уже вроде как прочитал, а потом оказывается что там половина нового была.

Так можно и без ответа остаться :)


Очень странно что не работает через MyTrades.Last()

MyTrades - это обычный IEnumerable<T>
Идём в MSDN, ищем метод Last у интерфейса.
Видим - необходимо объявить using System.Linq; и подключить reference System.Core.dll
Thanks:

gazrvs_nur

Avatar
Date: 5/25/2012
Reply


Да я уже понял, что что не так,
System.Linq объявлял, но вот до reference System.Core.dll уже не дошел,
будем нарабатывать опыт.
Thanks:

Александр (ПАА)

Avatar
Date: 5/25/2012
Reply


Добрый день, после перехода на 4.1 опять та же проблема (с изменением баланса после изменения статуса заявки на Done) возникает, правда намного реже...
Thanks:

Alexander

Avatar
Date: 5/25/2012
Reply


Александр (ПАА)
Добрый день, после перехода на 4.1 опять та же проблема (с изменением баланса после изменения статуса заявки на Done) возникает, правда намного реже...



приведите лог, укажите шлюз
лучше в соответствующем подфоруме
Thanks:
< 1 2 3 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy