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


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

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

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

Теги:


Спасибо:


< 1 2 3 
gazrvs_nur

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


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

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

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

Alexander

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


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

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

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


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

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

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

Код
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
Спасибо: gazrvs_nur

gazrvs_nur

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


Спасибо Александр,
вся проблема была в 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." также не идет.
Спасибо:

gazrvs_nur

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


Может кому понадобится.
Извернулся в вышеуказанном случае следующим образом:
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;
}
Спасибо:

Alexander

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


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
Спасибо:

gazrvs_nur

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


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

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

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


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

Alexander

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


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



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

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

loading
clippy