[Bug] запаздывание обновления Strategy.MyTrades
Atom Ответить
02.08.2011


Обнаружил что, MyTrades хоть и является синхоронизированной, но обновляется с опозданием.
у меня стратегия содержит такое правило
Код

this
				.When(StrategyRuleConditionHelper.StrategyNewMyTrades(this) )
				.Do(RegisterNext);

в методе происходит проверка того, что заявка исполнена полностью(т.к. большие заявки исполняются обычно за несколько сделок)
Код

private void RegisterNext()
		{
			if(TraderHelper.IsMatched(this.MyTrades[this.MyTrades.Count-1].Order)){
				_curLotBuySellNow += this.MyTrades[this.MyTrades.Count-1].Order.Volume;

часто происходит так, что он проверяет одну и туже сделку, т.е. остальные ещё не попали в список.
Как с этим быть?

Теги:


Спасибо:




6 Ответов
President

Фотография
Благотворитель
Дата: 02.08.2011
Ответить


1.
в событие NewMyTrades должны передаваться трейды - у вас же в RegisterNext ничего не передается.
Не знаю как эту конструкцию описать через .When.Do
я делаю по старинке:
в конструкторе стратегии: this.NewMyTrades += new Action<IEnumerable<MyTrade>>(OnNewMyTrades);

void OnNewMyTrades(IEnumerable<MyTrade> myTrades)
{
foreach (MyTrade myTrade in myTrades)
{
...

2.
вам судя по вашему примеру нужны не сами трейды, а изменение состояния ордера - а тогда вы можете ловить именно это событие
this.OrderChanged += new Action<Order>(OnOrderChanged);
void OnOrderChanged(Order obj)
{
if(obj.IsMatched()) { ....

Спасибо:

vader

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


Какой именно ордер передается в void OnOrderChanged(Order obj) ?
Автор топика
Спасибо:

President

Фотография
Благотворитель
Дата: 03.08.2011
Ответить


vader Перейти
Какой именно ордер передается в void OnOrderChanged(Order obj) ?

тот у которого что-то изменилось
Спасибо: vader

vader

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


Скажите, может ли оредер изменятся, после того, как он был исполнен?
У меня поулчается что метод вызывается для одного исполненного ордера несколько раз.
Код

void OnOrderChanged(Order obj)
		{
			if(obj.IsMatched()) {
				_listOfIdOrders.Add(obj.Id);
			}
		}

Как этого избежать?
Автор топика
Спасибо:

MSH

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


У нас такая же проблема - найдено ли решение?
Спасибо:

Alexander

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


Такая же - это какая?
Если про несколько раз изменяется после Done - да, такое может быть.

Пример для плазы2:
1) вам приходит событие об исполнении ордера по ответу на транзакцию.
2) Далее - вы получаете событие об изменении вашего ордера по ордер логу.

Как избежать - локально в стратегии.
Спасибо:


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

loading
clippy