Потому, что в промежуток времени между созданием заявки и ее исполнением приходят тики, а позиция в этот промежуток еще не поменялась. Я сделал такой вариант:
cantrade = false;
// создаем рыночную заявку (так как на FORTS нет такого понятия как рыночная заявка, то будет использована встречная цена в стакане)
_order = this.CreateOrder(_dir, (decimal)Security.GetCurrentPrice(_dir), Volume);
this.AddInfoLog("Ордер {0}: цена {1} направление {2} кол-во {3}".Put(_order.Id, _order.Price, _order.Direction, _order.Volume));
_order
.WhenCanceled()
.Do(() =>
{
this.AddInfoLog("Заявка успешно отменена");
cantrade = true;
})
.Once()
.Apply(this)
.Name = "WhenCanceled";
_order
.WhenRegistered()
.Do((rule, o) =>
{
this.AddInfoLog("Заявка успешно зарегестрирована");
})
.Once()
.Apply(this)
.Name = "WhenRegistered";
_order
.WhenRegisterFailed()
.Do(() =>
{
this.AddInfoLog("Заявка не принята биржей");
cantrade = true;
})
.Once()
.Apply(this)
.Name = "WhenRegisterFailed";
_order
.WhenMatched()
.Do((rule, o) =>
{
cantrade = true;
this.AddInfoLog("Заявка полностью исполнена");
this.AddInfoLog("Удаляем все правила связанные с заявкой.");
// удаление всех правил связанных с order
Rules.RemoveRulesByToken(rule.Token, rule);
})
.Once()
.Apply(this)
.Name = "WhenMatched";
// отправляем на регистрацию
RegisterOrder(_order);
но все равно периодически срабатывает два раза подряд, пока не понял почему.
Комментарии (7)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Посмотрите примеры, там всё это есть.
Вот как раз ответов не нашел, если не трудно, в каких конкретно примерах?
SampleSMA, например
1)можно так:
через трейдер:
2)```csharp
var order = new Order() ;
_trader.RegisterOrder(order);
Бесконечно открывает сделки, но первое условие явно должно ограничить, т.е. один раз открылся и все.
Потому, что в промежуток времени между созданием заявки и ее исполнением приходят тики, а позиция в этот промежуток еще не поменялась. Я сделал такой вариант:
но все равно периодически срабатывает два раза подряд, пока не понял почему.
Дык я пробовал делать просто флаг вначале, не связанный с биржей. Тож самое.
Возможно, у вас код, который обрабатывает событие не успевает обработать прошлое и запускается еще раз, поэтому 2 заявки летит.