void IStringifiable.AddSubElement(IStringifiable subElement) { base.AddSubElement(subElement); Type type = subElement.GetType(); if (type == typeof(PriceLeg)) { m_PriceLeg = (PriceLeg)subElement; this.m_EngineName = string.Format("QuoterLeg:{0}", m_PriceLeg.InstrumentName.ToString()); // set our name. } else if (type == typeof(Hedger)) { m_Hedger = (Hedger)subElement; m_Hedger.m_SpreaderLeg = this; // give pointer to ourself } else if (type == typeof(HedgeRuleManager)) { m_HedgeRuleManager = (HedgeRuleManager)subElement; m_HedgeRuleManager.m_QuoterLeg = this; } }
// // protected override void SetupInitialize(IEngineHub myEngineHub, IEngineContainer engineContainer, int engineID, bool setupGui) { this.m_EngineName = string.Format("HedgeRuleManager:{0}", m_QuoterLeg.m_PriceLeg.InstrumentName); base.SetupInitialize(myEngineHub, engineContainer, engineID, setupGui); m_Hedger = m_QuoterLeg.m_Hedger; m_Log = ((ExecutionHub)myEngineHub).Log; ThreadContainer execContainer = (ThreadContainer)engineContainer; m_HedgeRules.OrderBy(x => x.RuleNumber); // sort our list by the rule number, so they get called in order! foreach (HedgeRule rule in m_HedgeRules) // check that they are all unique, and add them to our container { if (!m_PriorityToRule.ContainsKey(rule.RuleNumber)) { m_PriorityToRule.Add(rule.RuleNumber, rule); execContainer.TryAddEngine((Engine)rule); // add my sub engines to the container. } else { m_Log.NewEntry(LogLevel.Error, "HedgeRuleManager: Failed to find unique hedge rules"); throw new Exception("HedgeRuleManager: Failed to find unique hedge rules"); } } }