Gegenseitig ausschließende Regeln
Gegenseitig ausschließende Regeln sind Regeln, die nach der Aktivierung einer dieser Regeln entfernt werden. Dazu wird die Methode MarketRuleHelper.Exclusive(StockSharp.Algo.IMarketRule rule1, StockSharp.Algo.IMarketRule rule2 ) aufgerufen und die Regel an sie übergeben. Diese Regel wird nach ihrer Aktivierung entfernt.
Beispielsweise werden zwei Regeln registriert: eine für erfolgreiche Orderregistrierung und eine für fehlgeschlagene Orderregistrierung. Eine von ihnen muss entfernt werden, wenn die andere aktiviert wird:
var order = this.CreateOrder(direction, (decimal) Security.GetCurrentPrice(direction), Volume);
var ruleReg = order.WhenRegistered();
var ruleRegFailed = order.WhenRegisterFailed();
ruleReg
.Do(() => this.AddInfoLog("Order erfolgreich registriert."))
.Once()
.Apply(this)
.Exclusive(ruleRegFailed);
ruleRegFailed
.Do(() => this.AddInfoLog("Order wurde vom Broker nicht akzeptiert."))
.Once()
.Apply(this)
.Exclusive(ruleReg);
// Order registrieren
RegisterOrder(order);
Gegenseitig ausschließende Regeln können auch durch Hinzufügen zu IMarketRule.ExclusiveRules erstellt werden:
var order = this.CreateOrder(direction, (decimal) Security.GetCurrentPrice(direction), Volume);
var ruleReg = order.WhenRegistered(Connector);
var ruleRegFailed = order.WhenRegisterFailed(Connector);
ruleReg.ExclusiveRules.Add(ruleRegFailed);
ruleRegFailed.ExclusiveRules.Add(ruleReg);
ruleReg
.Do(() => this.AddInfoLog("Order erfolgreich registriert."))
.Once()
.Apply(this);
ruleRegFailed
.Do(() => this.AddInfoLog("Order wurde vom Broker nicht akzeptiert."))
.Once()
.Apply(this);
// Order registrieren
RegisterOrder(order);