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


Ситуация такая, стратегия отправляет заявки на биржу метод 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 newMyTrades) Ошибка 3 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

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

Спасибо:

Alexander

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


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

private void writecsv(IEnumerable 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 это данные неполучается.

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

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

Спасибо:

gazrvs_nur

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


Может кому понадобится. Извернулся в вышеуказанном случае следующим образом: private void writecsv(IEnumerable newMyTrades) { var Tradeneed = new List(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 это данные неполучается.

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

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

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

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

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

MyTrades - это обычный IEnumerable Идём в 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