public void RemoveItem(BondStructureDefinition def_, bool deleteFromUnderlyingCache_ = false) { if (Items.Contains(def_)) { if (deleteFromUnderlyingCache_) { Singleton<BondStructureDefinitionCache>.Instance.RemoveDefinition(def_); } else { Items.Remove(def_); OnFolderContentsChanged(new BondStructureFolderChangedArgs( folder_: this, addedOrRemovedDefinition_: def_, action_: CacheAction.StructureRemoved)); // if the folder has become empty, then delete it if (MarkedForRemoval && Items.Count == 0 && SubFolders.Count == 0 && Parent != null) { Parent.OnFolderContentsChanged(new BondStructureFolderChangedArgs(Parent, this, CacheAction.FolderRemoved)); } } } }
public StructureNode(BondStructureDefinition def_) { Text = def_.Name; LeftImages.Add(BSAResources.share_icon_16black); m_def = def_; }
public BondStructure(BondStructureDefinition def_) : base(def_.Name) { foreach (var comp in def_.Items) { var item = new BondStructureComponent() { Bond = BondAnalysisLineHelper.FindBondFromDefinition(comp), Multiplier = comp.Multiplier }; Add(item); } setPriorValue(); SetNameSortingDate(); recalculateLive(true); }
public async void SaveDefinitionToCache(string name_, string[] folderPath_=null) { if (!IsDefinitionComplete()) { Logger.Error(string.Format("Attempt to save {0} structure that isn't complete. I'm not doing it", name_), typeof (BondStructure)); return; } var def = new BondStructureDefinition() { Name = name_, Owner = SymmetryEnvironment.UserName, FolderTree=folderPath_ }; foreach (var comp in Components) def.Items.Add(new BondStructureDefinitionItem() { Multiplier = comp.Multiplier, Market = comp.Bond.ParentSource.Market, Month = comp.Bond.UnderlyingBond.Maturity.Month, Year = comp.Bond.UnderlyingBond.Maturity.Year, Coupon = comp.Bond.UnderlyingBond.Coupon }); await Singleton<BondStructureDefinitionCache>.Instance.AddOrUpdateDefinition(def); }
public override void Dispose() { m_def = null; base.Dispose(); }
public StructureClickedArgs(BondStructureDefinition def_, MouseButtons buttons_) { Structure = def_; Buttons = buttons_; }
/// <summary> /// Place Item within this /// </summary> /// <param name="def_"></param> public async void PlaceItemWithinYou(BondStructureDefinition def_, bool addToUnderlyingCache_=true) { var currentFolder = BondStructureFolder.RootFolder.getSubFolder( folders_: def_.FolderTree, createIfNotThere_: false); var path = fullPathToThisFolder; bool pathAlreadySetCorrectly = false; if (def_.FolderTree!=null && path.Length == def_.FolderTree.Length) { pathAlreadySetCorrectly = !path.Where((t, i) => !t.Equals(def_.FolderTree[i])).Any(); } if (currentFolder != null && !pathAlreadySetCorrectly) currentFolder.RemoveItem(def_, false); // set the path def_.FolderTree = (path == null || path.Length == 0) ? null : path; // update the cache (will delete the old version) if (addToUnderlyingCache_) { await Singleton<BondStructureDefinitionCache>.Instance.AddOrUpdateDefinition(def_); } else { if (pathAlreadySetCorrectly && Items.Any(x => x.Name.Equals(def_.Name))) return; // insert item Items.Add(def_); OnFolderContentsChanged(new BondStructureFolderChangedArgs( folder_: this, addedOrRemovedDefinition_: def_, action_: CacheAction.StructureAdded)); } }
internal void applyStructure(BondStructureDefinition structure_) { if (structure_ == null) return; SetNumberOfComponents((uint)structure_.Items.Count); for (int i = 0; i < structure_.Items.Count; ++i) { InternalStructure.Components[i].Bond = BondAnalysisLineHelper.FindBondFromDefinition(structure_.Items[i]); InternalStructure.Components[i].Multiplier = structure_.Items[i].Multiplier; } m_loadedName = structure_.Name; m_loadedPath = structure_.FolderTree; tbQuickEntry.Text = string.Empty; OnGoClicked(EventArgs.Empty); }
public static async void CreateIntraCountryMaturityGapBondFlies(string[] folderPath_, BondMarket market_, uint unitGap_, MaturityGapUnit unitType_, BondFlyWeightMode mode_) { var source = CountryBondSource.GetInstance(market_); var newDefinitions = new List<BondStructureDefinition>(); foreach (var bond in source.Lines) { var idealPriorDate = (unitType_ == MaturityGapUnit.Years) ? bond.Maturity.AddYears(-(int) unitGap_) : bond.Maturity.AddMonths(-(int) unitGap_); var priorBond = findBestBond(bond, idealPriorDate, source.Lines, mode_, (int) unitGap_, unitType_); if (priorBond == null) continue; var idealLatterDate = (unitType_ == MaturityGapUnit.Years) ? bond.Maturity.AddYears((int) unitGap_) : bond.Maturity.AddMonths((int) unitGap_); var latterBond = findBestBond(bond, idealLatterDate, source.Lines, mode_, (int) unitGap_, unitType_); if (latterBond == null) continue; var priorWeighting = StructureWeightings.Bfly_Wing; var latterWeighting = StructureWeightings.Bfly_Wing; if (mode_ == BondFlyWeightMode.WithinAThirdWeighted) { var priorLevel = priorBond.GetValue(BondField.YieldLive); var level = bond.GetValue(BondField.YieldLive); var latterLevel = latterBond.GetValue(BondField.YieldLive); { var yieldDiff = level - priorLevel; var maturityDiff = (bond.Maturity - priorBond.Maturity).TotalDays / 365.25d; var desiredLevel = level - (maturityDiff / Convert.ToDouble(unitGap_) * yieldDiff); var levelAdjustment = desiredLevel / priorLevel; priorWeighting *= levelAdjustment; } { var yieldDiff = latterLevel - level; var maturityDiff = (latterBond.Maturity - bond.Maturity).TotalDays / 365.25d; var desiredLevel = level + (maturityDiff / Convert.ToDouble(unitGap_) * yieldDiff); var levelAdjustment = desiredLevel / latterLevel; latterWeighting *= levelAdjustment; } } var newDef = new BondStructureDefinition() { FolderTree = folderPath_, Items = new System.ComponentModel.BindingList<BondStructureDefinitionItem>( new[] { BondStructureDefinitionItem.GetDefinition(priorBond, priorWeighting), BondStructureDefinitionItem.GetDefinition(bond, StructureWeightings.Bfly_Belly), BondStructureDefinitionItem.GetDefinition(latterBond, latterWeighting) }.ToList()), Name = string.Format("{0} {1} {2} {3}{4}", market_, priorBond.Maturity.ToString("MM/yy"), bond.Maturity.ToString("MM/yy"), latterBond.Maturity.ToString("MM/yy"), mode_ == BondFlyWeightMode.WithinAThirdWeighted ? " (w)" : string.Empty), Owner = SymmetryEnvironment.UserName }; if (!newDefinitions.Any(x => x.Name.Equals(newDef.Name))) newDefinitions.Add(newDef); } await Singleton<BondStructureDefinitionCache>.Instance.AddOrUpdateDefinitions(newDefinitions); }