нет события NewMyTrade
Atom Ответить
18.01.2012


Возможно я уже не первый. Но поиск как-то не выдал толковых результатов. Есть похожая тема https://stocksharp.ru/fo...momient-podkliuchieniia/
Смотрю в код:

Код
private void TableChanged(string tableName, string tableParams, object data, object fieldtypes)
{
	NewDataExported.SafeInvoke();

	switch (tableName)
	{
		case _marketDepthTable:
			ProcessQuotes.SafeInvoke(tableParams, (string)data);
			break;
		case _tradeTable:
			ProcessTrades.SafeInvoke(tableParams, (string)data);
			break;
		case _securityTable:
			ProcessSecurities.SafeInvoke((string)data, false);
			break;
		case _portfolioTable:
			ProcessPortfolios.SafeInvoke((string)data);
			ProcessPositions.SafeInvoke((string)data);
			break;
		case _orderTable:
			ProcessOrders.SafeInvoke((string)data);
			break;
//		case _positionsTable:
//			ProcessPositions.SafeInvoke((string)data);
//			break;
	}
}


И понимаю почему не работает событие NewMyTrade. Это так и задумано? Или досадное упущение? Я как бы смотрю, Но код для обработки MyTrades во враппере присутствует. Может быть не в полном объеме (не разбирался до конца) но есть. Так же есть код типо такого:
Код
public override void StartExport()
{
	this.AddInfoLog("StartExport()");

	if (IsExportStarted)
	{
		this.AddWarningLog("Export is already started");
		return;
	}

	base.StartExport();
	Wrapper.ReadPortfolios();
	Wrapper.ReadSecurities();

	Wrapper.ReadOrders();
	Wrapper.ReadMyTrades();

        Wrapper.StartExportOrders();
	Wrapper.StartExportPositions();
	Wrapper.StartExportMyTrades();
}

То есть старт экспорта наличиствует. Но в итоге ничего не работает. Реакции на изменение таблицы со своими сделками нет. Поправить не сложно, Но не хочется плодить свои сборки, ваши сборки итд. Надо уж както централизованно править чтоли.

Теги:


Спасибо:




7 Ответов
ra81

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


Добавил код во враппер и собрал либу. Запустил и проверил.
Код

case _myTradesTable:
    ProcessMyTrades.SafeInvoke((string)data);
    break;


но событие таки не вызывается. В Лог начало падать событие OnProcessMyTrades постоянно, таблица часто видимо изменяется по полю Прибыль/убыток.

Судя по ковыряниям в коде имеет смысл добавить вызов события типо RaiseNewMyTrades в BaseTrader класс. Поскольку хелпер метода типо GetMyTrade нет, то работа ведется через AddMyTrade, а в нем собственно нет ничего похожего на RaiseNewMyTrades. Ну поскольку код рефлектором смотрел, разобраться в том, что получилось не очень удалось. Приходится надеяться на вас Разработчиков. здоровья вам и терпения :).


В общем и целом можно не использовать MyTrades как класс и довольствоваться работой с OrderChanged, и считать что, при исполнении ордера сделка свершилась. Но хотелось мне продублировать одно другим. Да и вообще обидно, код есть а не работает. Печалька.Crying
Автор топика
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 18.01.2012
Ответить


ra81 Перейти
Добавил код во враппер и собрал либу. Запустил и проверил.
Код

case _myTradesTable:
    ProcessMyTrades.SafeInvoke((string)data);
    break;


но событие таки не вызывается. В Лог начало падать событие OnProcessMyTrades постоянно, таблица часто видимо изменяется по полю Прибыль/убыток.

Судя по ковыряниям в коде имеет смысл добавить вызов события типо RaiseNewMyTrades в BaseTrader класс. Поскольку хелпер метода типо GetMyTrade нет, то работа ведется через AddMyTrade, а в нем собственно нет ничего похожего на RaiseNewMyTrades. Ну поскольку код рефлектором смотрел, разобраться в том, что получилось не очень удалось. Приходится надеяться на вас Разработчиков. здоровья вам и терпения :).


В общем и целом можно не использовать MyTrades как класс и довольствоваться работой с OrderChanged, и считать что, при исполнении ордера сделка свершилась. Но хотелось мне продублировать одно другим. Да и вообще обидно, код есть а не работает. Печалька.Crying


Да, надо бы поправить. В BaseTrader из AddMyTrade вызывается RaiseNewMyTrades для новых сделок.
Спасибо:

ra81

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


Sergey Masyura Перейти

Да, надо бы поправить. В BaseTrader из AddMyTrade вызывается RaiseNewMyTrades для новых сделок.


Да нашел, через приватный метод. Вызывается в этом методе. Но видимо не вызывается таки. Уж не знаю как. Проверить сам не могу к сожалению. Событие в конце концов не приходит, подписывайся или не подписывайся. Обработка MyTrades таблицы у меня поехала, а событие фиг.

ВАЖНЫЙ момент: сделки я совершаю руками в терминале а не из кода. По идее библиотека должна брать данные из терминала и отрабатывать по ним.
Автор топика
Спасибо:

ra81

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


При создании ордеров через код событие NewMyTrade начинает вызываться. Но при условии что я использую свою либу которую правил.Правку выше я писал.

Опять же возникает вопрос - почему только при создании из кода?? Почему когда руками в терминале создаю событие не вызвается.
Автор топика
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 19.01.2012
Ответить


ra81 Перейти
При создании ордеров через код событие NewMyTrade начинает вызываться. Но при условии что я использую свою либу которую правил.Правку выше я писал.

Опять же возникает вопрос - почему только при создании из кода?? Почему когда руками в терминале создаю событие не вызвается.


MyTrade должна соотвествовать ордеру, ордер - который отправлен из терминала коннектор пропускает, т.к. использует комментарий чтобы определить transaction id. Можно было бы и эти ордера подхватывать, но альфа когда присылает апдейт о новом ордере (отправленным через Stock#) сперва показывает ордер без комментария, а потом уже присылает этот же ордер с комментарием. Соответственно, нет возможности различить откуда ордер - если ордер без комента пустить внутрь, то тогда все strategy rules для ордеров перестанут работ и нарушится целостность ссылок на ордера.. Все это выше к тому, что на все есть свои причины.

По поводу пропущенной обработки MyTrades - это бага, в чем причина и как исправить я писал (исправить, а точнее проверить, пока нет возможности - кормлю лосей на все ГО)
Спасибо: ra81

ra81

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


Sergey Masyura Перейти


MyTrade должна соотвествовать ордеру, ордер - который отправлен из терминала коннектор пропускает, т.к. использует комментарий чтобы определить transaction id. Можно было бы и эти ордера подхватывать, но альфа когда присылает апдейт о новом ордере (отправленным через Stock#) сперва показывает ордер без комментария, а потом уже присылает этот же ордер с комментарием. Соответственно, нет возможности различить откуда ордер - если ордер без комента пустить внутрь, то тогда все strategy rules для ордеров перестанут работ и нарушится целостность ссылок на ордера.. Все это выше к тому, что на все есть свои причины.

По поводу пропущенной обработки MyTrades - это бага


Ну вот спасибо за пояснение насчет - почему только ордера отправленные из кода. Я собственно и хотел узнать причину такой схемы. Понимал что где-то здесь собака порылась.

А MyTrades как я уже писал заработала у меня. Либу я поправил и собрал. Подключил к проекту все заработало. Там такая же была беда поначалу когда я руками создавал заявки из терминала. Событие NewMyTrades не вызывалось. Щас фишка понята и все работает.

Цитата:
исправить, а точнее проверить, пока нет возможности - кормлю лосей на все ГО

Это вы не совсем верно. Нафиг их кормить пусть дохнут с голода. Или лучше отдать их соседу.
Автор топика
Спасибо: Sergey Masyura

Sergey Masyura

Фотография
Автор статей
Дата: 19.01.2012
Ответить


ra81 Перейти
Sergey Masyura Перейти


MyTrade должна соотвествовать ордеру, ордер - который отправлен из терминала коннектор пропускает, т.к. использует комментарий чтобы определить transaction id. Можно было бы и эти ордера подхватывать, но альфа когда присылает апдейт о новом ордере (отправленным через Stock#) сперва показывает ордер без комментария, а потом уже присылает этот же ордер с комментарием. Соответственно, нет возможности различить откуда ордер - если ордер без комента пустить внутрь, то тогда все strategy rules для ордеров перестанут работ и нарушится целостность ссылок на ордера.. Все это выше к тому, что на все есть свои причины.

По поводу пропущенной обработки MyTrades - это бага


Ну вот спасибо за пояснение насчет - почему только ордера отправленные из кода. Я собственно и хотел узнать причину такой схемы. Понимал что где-то здесь собака порылась.

А MyTrades как я уже писал заработала у меня. Либу я поправил и собрал. Подключил к проекту все заработало. Там такая же была беда поначалу когда я руками создавал заявки из терминала. Событие NewMyTrades не вызывалось. Щас фишка понята и все работает.

Цитата:
исправить, а точнее проверить, пока нет возможности - кормлю лосей на все ГО

Это вы не совсем верно. Нафиг их кормить пусть дохнут с голода. Или лучше отдать их соседу.



Есть права записи на codeplex? Скиньте логин, добавлю в котрибьюторы.

Добавил фикс, который описали выше, про который я написал в предыдущем топике - событие приходит, но надо посмотреть успевает ли прийти информация об ордере до того, как придет событие о сделке )
Спасибо:


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

loading
clippy