Потому, что в промежуток времени между созданием заявки и ее исполнением приходят тики, а позиция в этот промежуток еще не поменялась. Я сделал такой вариант:
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);
но все равно периодически срабатывает два раза подряд, пока не понял почему.
Comments (7)
Login or Create account, Log in or register to leave a comment
Посмотрите примеры, там всё это есть.
Вот как раз ответов не нашел, если не трудно, в каких конкретно примерах?
SampleSMA, например
1)можно так:
через трейдер:
2)```csharp
var order = new Order() ;
_trader.RegisterOrder(order);
Бесконечно открывает сделки, но первое условие явно должно ограничить, т.е. один раз открылся и все.
Потому, что в промежуток времени между созданием заявки и ее исполнением приходят тики, а позиция в этот промежуток еще не поменялась. Я сделал такой вариант:
но все равно периодически срабатывает два раза подряд, пока не понял почему.
Дык я пробовал делать просто флаг вначале, не связанный с биржей. Тож самое.
Возможно, у вас код, который обрабатывает событие не успевает обработать прошлое и запускается еще раз, поэтому 2 заявки летит.