public static LegVM Load(XElement xmlElement) { LegVM leg = new LegVM(); XAttribute attr = xmlElement.Attribute("symbol"); if (attr != null) { leg.Symbol = attr.Value; } attr = xmlElement.Attribute("ratio"); if (attr != null) { leg.Ratio = int.Parse(attr.Value); } attr = xmlElement.Attribute("side"); if (attr != null) { leg.Side = (PosiDirectionType)Enum.Parse(typeof(PosiDirectionType), attr.Value); } attr = xmlElement.Attribute("isPreferred"); if (attr != null) { leg.IsPreferred = bool.Parse(attr.Value); } return(leg); }
void OnModifyPreferredLeg(LegVM leg, bool obj) { if (this._accountVm.IsConnected) { this._accountVm.Host.PortfSetPreferredLeg(this.Id, leg.Name); } _accountVm.PublishChanged(); }
public void To(PortfolioVM portf) { portf.Quantity = this.Quantity; portf.MaxPosition = this.MaxQuantity; if (Leg1) { LegVM leg; if (portf.LegCount < 1) { leg = new LegVM(); portf.AddLeg(leg); } else { leg = portf.GetLeg(0); } leg.Symbol = Symbol1; leg.Side = Side1; leg.Ratio = Ratio1; leg.SetIsPreferred(PreferLeg1); } if (Leg2 || StrategyName == StrategySetting.ChangePositionStrategyName) { LegVM leg; if (portf.LegCount < 2) { leg = new LegVM(); portf.AddLeg(leg); } else { leg = portf.GetLeg(1); } leg.Symbol = Symbol2; leg.Side = Side2; leg.Ratio = Ratio2; leg.IsPreferred = PreferLeg2; } portf.StrategySetting = StrategySetting.Create(StrategyName); if (StrategyName == StrategySetting.ChangePositionStrategyName) { portf.AutoOpen = true; portf.AutoStopGain = false; portf.AutoStopLoss = false; portf.EnablePrefer = true; portf.AutoTracking = true; ChangePositionSetting setting = (ChangePositionSetting)portf.StrategySetting; setting.CloseLeg = Symbol1; setting.CloseLegSide = Side1; } else if (StrategyName == StrategySetting.ScalperStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { ScalperSetting setting = (ScalperSetting)portf.StrategySetting; setting.PriceTick = this.PriceTick; setting.Threshold = this.Threshold; } } }
public static PortfolioVM Load(AccountVM acct, XElement xmlElement) { PortfolioVM portf = new PortfolioVM(acct); portf.IsLoading = true; XAttribute attr = xmlElement.Attribute("id"); if (attr != null) { portf.Id = attr.Value; } attr = xmlElement.Attribute("quantity"); if (attr != null) { portf.Quantity = int.Parse(attr.Value); } attr = xmlElement.Attribute("currentPosition"); if (attr != null) { int currPos = int.Parse(attr.Value); portf.Position = currPos; portf.OpenTimes = currPos; } attr = xmlElement.Attribute("avgCost"); if (attr != null) { double avgCost = double.Parse(attr.Value); portf.AvgCost = avgCost; } attr = xmlElement.Attribute("maxPosition"); if (attr != null) { portf.MaxPosition = int.Parse(attr.Value); } attr = xmlElement.Attribute("autoOpen"); if (attr != null) { portf.AutoOpen = attr.Value == bool.TrueString; } attr = xmlElement.Attribute("autoStopGain"); if (attr != null) { portf.AutoStopGain = attr.Value == bool.TrueString; } attr = xmlElement.Attribute("autoStopLoss"); if (attr != null) { portf.AutoStopLoss = attr.Value == bool.TrueString; } attr = xmlElement.Attribute("autoTracking"); if (attr != null) { portf.AutoTracking = attr.Value == bool.TrueString; } attr = xmlElement.Attribute("enablePrefer"); if (attr != null) { portf.EnablePrefer = attr.Value == bool.TrueString; } foreach (var legElem in xmlElement.Element("legs").Elements("leg")) { LegVM legVm = LegVM.Load(legElem); portf.AddLeg(legVm); } XElement xmlSetting = xmlElement.Element("setting"); string strategyName = xmlSetting.Attribute("name").Value; string strategyXmlText = xmlSetting.Value; portf.StrategySetting = StrategySetting.Load(strategyName, strategyXmlText); portf.IsLoading = false; return(portf); }
public void AddLeg(LegVM leg) { _legs.Add(leg); leg.PortfolioId = Id; leg.OnIsPreferredChanged += new Action <LegVM, bool>(OnModifyPreferredLeg); }
public void To(PortfolioVM portf) { portf.Quantity = this.Quantity; portf.TotalOpenLimit = this.TotalOpenLimit; portf.MaxCancel = this.MaxCancelVol; portf.MaxOpenPerStart = this.MaxOpenPerStart; portf.EndTimePointsExpr = this.EndTimePointsExpr; if (Leg1) { LegVM leg; if (portf.LegCount < 1) { leg = new LegVM(); portf.AddLeg(leg); } else { leg = portf.GetLeg(0); } leg.Symbol = Symbol1; leg.Side = Side1; leg.Ratio = Ratio1; leg.SetIsPreferred(PreferLeg1); } if (Leg2 || StrategyName == StrategySetting.ChangePositionStrategyName) { LegVM leg; if (portf.LegCount < 2) { leg = new LegVM(); portf.AddLeg(leg); } else { leg = portf.GetLeg(1); } leg.Symbol = Symbol2; leg.Side = Side2; leg.Ratio = Ratio2; leg.IsPreferred = PreferLeg2; } portf.StrategySetting = StrategySetting.Create(StrategyName); if (StrategyName == StrategySetting.ArbitrageStrategyName) { ArbitrageStrategySetting setting = (ArbitrageStrategySetting)portf.StrategySetting; setting.BollPeriod = AR_BollPeriod; setting.StdDevMultiplier = AR_StdDevMultiplier; setting.TimeFrame = 60; setting.FirstLegSymbol = Symbol1; setting.SecondLegSymbol = Symbol2; foreach (var l in portf.Legs) { l.MinPriceChange = PriceTick; } } else if (StrategyName == StrategySetting.ChangePositionStrategyName) { portf.AutoOpen = true; portf.AutoStopGain = false; portf.AutoStopLoss = false; portf.EnablePrefer = true; portf.AutoTracking = true; ChangePositionSetting setting = (ChangePositionSetting)portf.StrategySetting; setting.CloseLeg = Symbol1; setting.CloseLegSide = Side1; } else if (StrategyName == StrategySetting.ScalperStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { ScalperSetting setting = (ScalperSetting)portf.StrategySetting; setting.PriceTick = this.PriceTick; setting.Threshold = this.Threshold; } } else if (StrategyName == StrategySetting.MACDHistSlopeStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { MACDHistSlopeStrategySetting setting = (MACDHistSlopeStrategySetting)portf.StrategySetting; setting.Symbol = Symbol1; setting.MACD_Short = 12; setting.MACD_Long = 26; setting.MACD_M = 9; setting.FastPeriod = this.FastPeriod; setting.SlowPeriod = this.SlowPeriod; setting.FastStdDiff = this.FastStdDiff; setting.SlowStdDiff = this.SlowStdDiff; setting.FastAngleThreshold = 45; setting.SlowAngleThreshold = 30; setting.TrailingStopValue = this.TrailingStop; } } else if (StrategyName == StrategySetting.WMATrendStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { WMATrendStrategySettings setting = (WMATrendStrategySettings)portf.StrategySetting; setting.Symbol = Symbol1; setting.Period = WT_Period; setting.WMA_Param = WMA_Param; setting.MA_N = MA_N; //setting.TrailingStopValue = this.TrailingStop; } } else if (StrategyName == StrategySetting.LinerRegressionStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { LinerRegStrategySettings setting = (LinerRegStrategySettings)portf.StrategySetting; setting.Symbol = Symbol1; setting.Period = LR_Period; setting.Number = LR_Number; setting.OpenThreshold = LR_OpenThreshold; setting.CloseThreshold = LR_CloseThreshold; } } else if (StrategyName == StrategySetting.ASCTrendStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { ASCTrendStrategySettings setting = (ASCTrendStrategySettings)portf.StrategySetting; setting.Symbol = Symbol1; setting.Period = AS_Period; setting.Risk = AS_Risk; setting.AvergatePeriod = AS_AveragePeriod; setting.BreakoutLength = AS_BreakoutLength; } } else if (StrategyName == StrategySetting.RangeTrendStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { RangeTrendStrategySettings setting = (RangeTrendStrategySettings)portf.StrategySetting; setting.Symbol = Symbol1; setting.Period = RT_TimeFrame; setting.OpenPeriod = RT_OpenPeriod; setting.ClosePeriod = RT_ClosePeriod; setting.StopLossFactor = RT_StopLossFactor; setting.TrendFactor = RT_TrendFactor; } } else if (StrategyName == StrategySetting.ManualStrategyName) { if (!string.IsNullOrEmpty(Symbol1)) { ManualStrategySetting setting = (ManualStrategySetting)portf.StrategySetting; setting.RetryTimes = RetryTimes; } } }