Exemplo n.º 1
0
        public static string ParseTopicStrings(Array strings)
        {
            string topicStr = null;

            if (strings != null)
            {
                foreach (string s in strings)
                {
                    if (topicStr == null && s.ToLower().IndexOf(TwsRtdServerData.QT) >= 0)
                    {
                        // parse string like "qt=Bid"
                        // "qt" string should have priority than topic specified at other places
                        topicStr = s.Substring(TwsRtdServerData.QT.Length, s.Length - TwsRtdServerData.QT.Length).ToUpper();

                        if (Array.IndexOf(TwsRtdServerData.AllowedTopics(), topicStr) >= 0)
                        {
                            return(topicStr);
                        }
                        else
                        {
                            // if invalid "qt" is specified
                            return(null);
                        }
                    }

                    if (topicStr == null && !s.ToLower().Contains(TwsRtdServerData.LOCALSYMBOL_STR) && s.ToLower().Contains(TwsRtdServerData.CHAR_SPACE.ToString()))
                    {
                        // pasre string like "IBM Bid" or "BRK B Bid"
                        topicStr = s.Substring(s.LastIndexOf(TwsRtdServerData.CHAR_SPACE) + 1, s.Length - 1 - s.LastIndexOf(TwsRtdServerData.CHAR_SPACE)).ToUpper();

                        if (Array.IndexOf(TwsRtdServerData.AllowedTopics(), topicStr) >= 0)
                        {
                            return(topicStr);
                        }
                        else
                        {
                            topicStr = null;
                            continue;
                        }
                    }

                    if (topicStr == null)
                    {
                        // pasre string like "Bid"
                        topicStr = s.ToUpper();

                        if (Array.IndexOf(TwsRtdServerData.AllowedTopics(), topicStr) >= 0)
                        {
                            return(topicStr);
                        }
                        else
                        {
                            topicStr = null;
                            continue;
                        }
                    }
                }
            }

            if (topicStr == null)
            {
                // topic not found, use default
                topicStr = TwsRtdServerData.LAST;
            }

            return(topicStr);
        }
Exemplo n.º 2
0
        public static string ParseMktDataRequestStrings(Array strings)
        {
            string mktDataRequestStr = null;

            // contract
            string symbolStr               = null;
            string exchStr                 = null;
            string primExchStr             = null;
            string secTypeStr              = null;
            string expirationStr           = null;
            string rightStr                = null;
            string strikeStr               = null;
            string currencyStr             = null;
            string multiplierStr           = null;
            string localSymbolStr          = null;
            string conIdStr                = null;
            string tradingClassStr         = null;
            string comboStr                = null;
            string deltaNeutralContractStr = null;
            string optionsStr              = null;
            string genTicksStr             = null;

            if (strings != null)
            {
                // simple syntax: first string should represent ticker
                if (strings.Length > 0)
                {
                    string tickerStr = (string)strings.GetValue(0);
                    if (tickerStr.IndexOf(TwsRtdServerData.CHAR_EQUAL) < 0)
                    {
                        if (tickerStr.IndexOf(TwsRtdServerData.CHAR_SPACE) >= 0)
                        {
                            // parse ticker string like IBM@SMART Bid, BRK B@SMART Bid, where the topic is specified within the ticker string itself
                            string lastStr = tickerStr.Substring(tickerStr.LastIndexOf(TwsRtdServerData.CHAR_SPACE) + 1, tickerStr.Length - 1 - tickerStr.LastIndexOf(TwsRtdServerData.CHAR_SPACE)).ToUpper();

                            if (Array.IndexOf(TwsRtdServerData.AllowedTopics(), lastStr) >= 0)
                            {
                                tickerStr = tickerStr.ToUpper().Substring(0, tickerStr.LastIndexOf(TwsRtdServerData.CHAR_SPACE));
                            }
                        }

                        if (tickerStr.IndexOf(TwsRtdServerData.CHAR_DOT) >= 0 && tickerStr.ToLower().IndexOf(TwsRtdServerData.HOST_STR) < 0 &&
                            tickerStr.ToLower().IndexOf(TwsRtdServerData.DELTANEUTRALCONTRACT_STR) < 0 && tickerStr.ToUpper().IndexOf(TwsRtdServerData.CHAR_SLASH + TwsRtdServerData.CASH_STR) >= 0)
                        {
                            // parse string like "EUR.USD/CASH"
                            string[] contractStrings = tickerStr.ToUpper().Split(TwsRtdServerData.CHAR_SLASH);
                            if (contractStrings.Length >= 2)
                            {
                                secTypeStr = contractStrings[1].ToUpper();
                            }
                            // "EUR.USD"
                            string symbolAndCashStr = contractStrings[0].ToUpper();
                            symbolStr   = symbolAndCashStr.Substring(0, symbolAndCashStr.IndexOf(TwsRtdServerData.CHAR_DOT));
                            currencyStr = symbolAndCashStr.Substring(symbolAndCashStr.IndexOf(TwsRtdServerData.CHAR_DOT) + 1, symbolAndCashStr.Length - symbolAndCashStr.IndexOf(TwsRtdServerData.CHAR_DOT) - 1);
                            exchStr     = TwsRtdServerData.DEFAULT_CASH_EXCHANGE;
                            //break;
                        }
                        else if (tickerStr.IndexOf(TwsRtdServerData.CHAR_SLASH) >= 0)
                        {
                            // parse string like "IBM@SMART/NYSE/OPT/201701/C/90/USD"
                            string[] contractStrings = tickerStr.ToUpper().Split(TwsRtdServerData.CHAR_SLASH);
                            if (contractStrings.Length >= 7)
                            {
                                currencyStr = contractStrings[6].ToUpper();
                            }
                            if (contractStrings.Length >= 6)
                            {
                                strikeStr = contractStrings[5].ToUpper();
                            }
                            if (contractStrings.Length >= 5)
                            {
                                rightStr = contractStrings[4].ToUpper();
                            }
                            if (contractStrings.Length >= 4)
                            {
                                expirationStr = contractStrings[3].ToUpper();
                            }
                            if (contractStrings.Length >= 3)
                            {
                                secTypeStr = contractStrings[2].ToUpper();
                            }
                            if (contractStrings.Length >= 2)
                            {
                                primExchStr = contractStrings[1].ToUpper();
                            }
                            string symbolAndExchStr = contractStrings[0].ToUpper();
                            if (symbolAndExchStr.IndexOf(TwsRtdServerData.CHAR_AT) >= 0)
                            {
                                // symbol can contain dot (".") and case sensitive
                                symbolStr = symbolAndExchStr.Substring(0, symbolAndExchStr.IndexOf(TwsRtdServerData.CHAR_AT));
                                exchStr   = symbolAndExchStr.Substring(symbolAndExchStr.IndexOf(TwsRtdServerData.CHAR_AT) + 1, symbolAndExchStr.Length - symbolAndExchStr.IndexOf(TwsRtdServerData.CHAR_AT) - 1);
                            }
                            else
                            {
                                symbolStr = symbolAndExchStr;
                                exchStr   = TwsRtdServerData.DEFAULT_EXCHANGE;
                            }
                            //break;
                        }
                        else if (tickerStr.IndexOf(TwsRtdServerData.CHAR_AT) >= 0)
                        {
                            // parse string like "IBM@ARCA"
                            symbolStr = tickerStr.ToUpper().Substring(0, tickerStr.IndexOf(TwsRtdServerData.CHAR_AT));
                            exchStr   = tickerStr.ToUpper().Substring(tickerStr.IndexOf(TwsRtdServerData.CHAR_AT) + 1, tickerStr.Length - tickerStr.IndexOf(TwsRtdServerData.CHAR_AT) - 1);
                            //break;
                        }
                        else
                        {
                            // parse string like "IBM"
                            symbolStr = tickerStr.ToUpper();
                        }
                    }
                }


                // complex syntax
                foreach (string s in strings)
                {
                    if (symbolStr == null && s.ToLower().IndexOf(TwsRtdServerData.SYMBOL_STR) >= 0)
                    {
                        // parse string like "sym=IBM"
                        symbolStr = s.Substring(TwsRtdServerData.SYMBOL_STR.Length, s.Length - TwsRtdServerData.SYMBOL_STR.Length);
                    }
                    if (secTypeStr == null && s.ToLower().IndexOf(TwsRtdServerData.SECTYPE_STR) >= 0)
                    {
                        // parse string like "sec=OPT"
                        secTypeStr = s.Substring(TwsRtdServerData.SECTYPE_STR.Length, s.Length - TwsRtdServerData.SECTYPE_STR.Length).ToUpper();
                    }
                    if (expirationStr == null && s.ToLower().IndexOf(TwsRtdServerData.EXPIRATION_STR) >= 0)
                    {
                        // parse string like "exp=20170101"
                        expirationStr = s.Substring(TwsRtdServerData.EXPIRATION_STR.Length, s.Length - TwsRtdServerData.EXPIRATION_STR.Length).ToUpper();
                    }
                    if (strikeStr == null && s.ToLower().IndexOf(TwsRtdServerData.STRIKE_STR) >= 0)
                    {
                        // parse string like "strike=90"
                        strikeStr = s.Substring(TwsRtdServerData.STRIKE_STR.Length, s.Length - TwsRtdServerData.STRIKE_STR.Length).ToUpper();
                    }
                    if (rightStr == null && s.ToLower().IndexOf(TwsRtdServerData.RIGHT_STR) >= 0)
                    {
                        // parse string like "right=C"
                        rightStr = s.Substring(TwsRtdServerData.RIGHT_STR.Length, s.Length - TwsRtdServerData.RIGHT_STR.Length).ToUpper();
                    }
                    if (multiplierStr == null && s.ToLower().IndexOf(TwsRtdServerData.MULTIPLIER_STR) >= 0)
                    {
                        // parse string like "mult=100"
                        multiplierStr = s.Substring(TwsRtdServerData.MULTIPLIER_STR.Length, s.Length - TwsRtdServerData.MULTIPLIER_STR.Length).ToUpper();
                    }
                    if (exchStr == null && s.ToLower().IndexOf(TwsRtdServerData.EXCHANGE_STR) >= 0)
                    {
                        // parse string like "exch=SMART"
                        exchStr = s.Substring(TwsRtdServerData.EXCHANGE_STR.Length, s.Length - TwsRtdServerData.EXCHANGE_STR.Length).ToUpper();
                    }
                    if (primExchStr == null && s.ToLower().IndexOf(TwsRtdServerData.PRIMARYEXCH_STR) >= 0)
                    {
                        // parse string like "prim=NYSE"
                        primExchStr = s.Substring(TwsRtdServerData.PRIMARYEXCH_STR.Length, s.Length - TwsRtdServerData.PRIMARYEXCH_STR.Length).ToUpper();
                    }
                    if (currencyStr == null && s.ToLower().IndexOf(TwsRtdServerData.CURRENCY_STR) >= 0)
                    {
                        // parse string like "cur=USD"
                        currencyStr = s.Substring(TwsRtdServerData.CURRENCY_STR.Length, s.Length - TwsRtdServerData.CURRENCY_STR.Length).ToUpper();
                    }
                    if (conIdStr == null && s.ToLower().IndexOf(TwsRtdServerData.CONID_STR) >= 0)
                    {
                        // parse string like "conid=8314"
                        conIdStr = s.Substring(TwsRtdServerData.CONID_STR.Length, s.Length - TwsRtdServerData.CONID_STR.Length).ToUpper();
                    }
                    if (localSymbolStr == null && s.ToLower().IndexOf(TwsRtdServerData.LOCALSYMBOL_STR) >= 0)
                    {
                        // parse string like "loc=IBM1DM7"
                        localSymbolStr = s.Substring(TwsRtdServerData.LOCALSYMBOL_STR.Length, s.Length - TwsRtdServerData.LOCALSYMBOL_STR.Length);
                    }
                    if (tradingClassStr == null && s.ToLower().IndexOf(TwsRtdServerData.TRADINGCLASS_STR) >= 0)
                    {
                        // parse string like "tc=IBM1D"
                        tradingClassStr = s.Substring(TwsRtdServerData.TRADINGCLASS_STR.Length, s.Length - TwsRtdServerData.TRADINGCLASS_STR.Length).ToUpper();
                    }
                    if (comboStr == null && s.ToLower().IndexOf(TwsRtdServerData.COMBO_STR) >= 0)
                    {
                        // parse string like "cmb=..."
                        comboStr = s.Substring(TwsRtdServerData.COMBO_STR.Length, s.Length - TwsRtdServerData.COMBO_STR.Length).ToUpper();
                    }
                    if (deltaNeutralContractStr == null && s.ToLower().IndexOf(TwsRtdServerData.DELTANEUTRALCONTRACT_STR) >= 0)
                    {
                        // parse string like "und=..."
                        deltaNeutralContractStr = s.Substring(TwsRtdServerData.DELTANEUTRALCONTRACT_STR.Length, s.Length - TwsRtdServerData.DELTANEUTRALCONTRACT_STR.Length).ToUpper();
                    }
                    if (optionsStr == null && s.ToLower().IndexOf(TwsRtdServerData.OPTIONS_STR) >= 0)
                    {
                        // parse string like "opt=..."
                        optionsStr = s.Substring(TwsRtdServerData.OPTIONS_STR.Length, s.Length - TwsRtdServerData.OPTIONS_STR.Length).ToUpper();
                    }
                    if (genTicksStr == null && s.ToLower().IndexOf(TwsRtdServerData.GENTICKS_STR) >= 0)
                    {
                        // parse string like "genticks=..."
                        genTicksStr = s.Substring(TwsRtdServerData.GENTICKS_STR.Length, s.Length - TwsRtdServerData.GENTICKS_STR.Length).ToUpper();
                    }
                }
            }

            // defaults
            if (localSymbolStr == null || localSymbolStr.Length <= 0)
            {
                if ((secTypeStr == null || secTypeStr.Length <= 0) && conIdStr == null)
                {
                    secTypeStr = TwsRtdServerData.DEFAULT_SECTYPE;
                }
                if (exchStr == null || exchStr.Length <= 0)
                {
                    exchStr = TwsRtdServerData.DEFAULT_EXCHANGE;
                }
                if ((currencyStr == null || currencyStr.Length <= 0) && conIdStr == null)
                {
                    currencyStr = TwsRtdServerData.DEFAULT_CURRENCY;
                }
            }

            mktDataRequestStr = conIdStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                symbolStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                secTypeStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                expirationStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                strikeStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                rightStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                multiplierStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                exchStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                primExchStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                currencyStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                localSymbolStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                tradingClassStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                comboStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                deltaNeutralContractStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                optionsStr + TwsRtdServerData.CHAR_UNDERSCORE +
                                genTicksStr;

            return(mktDataRequestStr);
        }