Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 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;
                }
            }
        }