public static PositionManagerOutput GetFuturesButterflyPosition(string alias, DateTime asOfDate, MySqlConnection conn)
        {
            DataTable StrategyPosition = TA.Strategy.GetNetPosition(alias: alias, conn: conn, asOfDate: asOfDate);
            StrategyUtilities.PositionManagerOutput PositionManagerOut = new StrategyUtilities.PositionManagerOutput();

            if (StrategyPosition.Rows.Count == 0)
            {
                return PositionManagerOut;
            }

            StrategyPosition.Columns.Add("TickerHead", typeof(string));
            StrategyPosition.Columns.Add("SortIndex", typeof(int));

            foreach (DataRow Row in StrategyPosition.Rows)
            {
                ContractUtilities.ContractSpecs Cs = ContractUtilities.ContractMetaInfo.GetContractSpecs(ticker: Row.Field<string>("Ticker"));
                Row["TickerHead"] = Cs.tickerHead;
                Row["SortIndex"] = Cs.contINDX;
            }

            StrategyPosition = DataAnalysis.DataTableFunctions.Sort(dataTableInput: StrategyPosition, columnList: new string[] { "SortIndex" });
            bool CorrectPositionQ = false;

            if ((StrategyPosition.Rows.Count == 3) &&
                (Math.Sign(StrategyPosition.Rows[0].Field<double>("Qty"))) == Math.Sign(StrategyPosition.Rows[2].Field<double>("Qty")) &&
                (StrategyPosition.AsEnumerable().Sum(x => x.Field<double>("Qty")) == 0))
            {
                CorrectPositionQ = true;
            }

            PositionManagerOut.SortedPosition = StrategyPosition;
            PositionManagerOut.Scale = StrategyPosition.Rows[0].Field<double>("Qty");
            PositionManagerOut.CorrectPositionQ = CorrectPositionQ;
            return PositionManagerOut;
        }
Example #2
0
        public static PositionManagerOutput GetIfsPosition(string alias, DateTime asOfDate, MySqlConnection conn)
        {
            DataTable StrategyPosition = TA.Strategy.GetNetPosition(alias: alias, conn: conn, asOfDate: asOfDate);

            StrategyUtilities.PositionManagerOutput PositionManagerOut = new StrategyUtilities.PositionManagerOutput();

            if (StrategyPosition.Rows.Count == 0)
            {
                return(PositionManagerOut);
            }

            StrategyPosition.Columns.Add("TickerHead", typeof(string));
            StrategyPosition.Columns.Add("SortIndex", typeof(int));

            foreach (DataRow Row in StrategyPosition.Rows)
            {
                Row["TickerHead"] = ContractUtilities.ContractMetaInfo.GetContractSpecs(ticker: Row.Field <string>("Ticker")).tickerHead;
            }

            List <string> TickerHeadList   = DataAnalysis.DataTableFunctions.GetColumnAsList <string>(dataTableInput: StrategyPosition, columnName: "TickerHead");
            List <string> TickerList       = new List <string>();
            List <double> QtyList          = new List <double>();
            List <double> ScaleList        = new List <double>();
            bool          CorrectPositionQ = false;

            Dictionary <string, List <decimal> > WeightDictionary = StrategyUtilities.SpreadDefinitions.WeightDictionary;

            foreach (KeyValuePair <string, List <decimal> > entry in WeightDictionary)
            {
                List <string> TickerHeadListFromDefinition = entry.Key.Split('_').ToList();

                if (new HashSet <string>(TickerHeadListFromDefinition).SetEquals(TickerHeadList))
                {
                    CorrectPositionQ = true;
                    for (int i = 0; i < TickerHeadList.Count; i++)
                    {
                        int RowIndex = TickerHeadListFromDefinition.IndexOf(TickerHeadList[i]);
                        StrategyPosition.Rows[i]["SortIndex"] = RowIndex;

                        ScaleList.Add(StrategyPosition.Rows[i].Field <double>("Qty") / (double)entry.Value[RowIndex]);
                    }

                    for (int i = 1; i < ScaleList.Count; i++)
                    {
                        if (Math.Abs(ScaleList[i] - ScaleList[1]) > 0.1)
                        {
                            CorrectPositionQ = false;
                        }
                    }
                    break;
                }
            }

            StrategyPosition = DataAnalysis.DataTableFunctions.Sort(dataTableInput: StrategyPosition, columnList: new string[] { "SortIndex" });

            PositionManagerOut.SortedPosition   = StrategyPosition;
            PositionManagerOut.Scale            = ScaleList[0];
            PositionManagerOut.CorrectPositionQ = CorrectPositionQ;
            return(PositionManagerOut);
        }
        public static PositionManagerOutput GetIfsPosition(string alias, DateTime asOfDate,MySqlConnection conn)
        {
            DataTable StrategyPosition = TA.Strategy.GetNetPosition(alias: alias, conn: conn, asOfDate: asOfDate);
            StrategyUtilities.PositionManagerOutput PositionManagerOut = new StrategyUtilities.PositionManagerOutput();

            if (StrategyPosition.Rows.Count==0)
            {
                return PositionManagerOut;
            }

            StrategyPosition.Columns.Add("TickerHead", typeof(string));
            StrategyPosition.Columns.Add("SortIndex", typeof(int));

            foreach (DataRow Row in StrategyPosition.Rows)
            {
                Row["TickerHead"] = ContractUtilities.ContractMetaInfo.GetContractSpecs(ticker: Row.Field<string>("Ticker")).tickerHead;
            }

            List<string> TickerHeadList = DataAnalysis.DataTableFunctions.GetColumnAsList<string>(dataTableInput: StrategyPosition, columnName: "TickerHead");
            List<string> TickerList = new List<string>();
            List<double> QtyList = new List<double>();
            List<double> ScaleList = new List<double>();
            bool CorrectPositionQ = false;

            Dictionary<string, List<decimal>> WeightDictionary = StrategyUtilities.SpreadDefinitions.WeightDictionary;

            foreach (KeyValuePair<string, List<decimal>> entry in WeightDictionary)
            {
                List<string> TickerHeadListFromDefinition = entry.Key.Split('_').ToList();

                if (new HashSet<string>(TickerHeadListFromDefinition).SetEquals(TickerHeadList))
                {
                    CorrectPositionQ = true;
                    for (int i = 0; i < TickerHeadList.Count; i++)
                    {
                        int RowIndex = TickerHeadListFromDefinition.IndexOf(TickerHeadList[i]);
                        StrategyPosition.Rows[i]["SortIndex"] = RowIndex;

                        ScaleList.Add(StrategyPosition.Rows[i].Field<double>("Qty")/(double)entry.Value[RowIndex]);
                    }

                    for (int i = 1; i < ScaleList.Count; i++)
                    {
                        if (Math.Abs(ScaleList[i] - ScaleList[1]) > 0.1)
                        {
                            CorrectPositionQ = false;
                        }
                    }
                    break;
                }
            }

            StrategyPosition = DataAnalysis.DataTableFunctions.Sort(dataTableInput: StrategyPosition, columnList:new string[] { "SortIndex" });

            PositionManagerOut.SortedPosition = StrategyPosition;
            PositionManagerOut.Scale = ScaleList[0];
            PositionManagerOut.CorrectPositionQ = CorrectPositionQ;
            return PositionManagerOut;

        }
        public static PositionManagerOutput GetFuturesButterflyPosition(string alias, DateTime asOfDate, MySqlConnection conn)
        {
            DataTable StrategyPosition = TA.Strategy.GetNetPosition(alias: alias, conn: conn, asOfDate: asOfDate);

            StrategyUtilities.PositionManagerOutput PositionManagerOut = new StrategyUtilities.PositionManagerOutput();

            if (StrategyPosition.Rows.Count == 0)
            {
                return(PositionManagerOut);
            }

            StrategyPosition.Columns.Add("TickerHead", typeof(string));
            StrategyPosition.Columns.Add("SortIndex", typeof(int));

            foreach (DataRow Row in StrategyPosition.Rows)
            {
                ContractUtilities.ContractSpecs Cs = ContractUtilities.ContractMetaInfo.GetContractSpecs(ticker: Row.Field <string>("Ticker"));
                Row["TickerHead"] = Cs.tickerHead;
                Row["SortIndex"]  = Cs.contINDX;
            }

            StrategyPosition = DataAnalysis.DataTableFunctions.Sort(dataTableInput: StrategyPosition, columnList: new string[] { "SortIndex" });
            bool CorrectPositionQ = false;

            if ((StrategyPosition.Rows.Count == 3) &&
                (Math.Sign(StrategyPosition.Rows[0].Field <double>("Qty"))) == Math.Sign(StrategyPosition.Rows[2].Field <double>("Qty")) &&
                (StrategyPosition.AsEnumerable().Sum(x => x.Field <double>("Qty")) == 0))
            {
                CorrectPositionQ = true;
            }

            PositionManagerOut.SortedPosition   = StrategyPosition;
            PositionManagerOut.Scale            = StrategyPosition.Rows[0].Field <double>("Qty");
            PositionManagerOut.CorrectPositionQ = CorrectPositionQ;
            return(PositionManagerOut);
        }