Exemple #1
0
        void doqueues(object obj)
        {
            while (_bwgo)
            {
                bool newsym = false;
                while (!_newsyms.isEmpty)
                {
                    _newsyms.Read();
                    newsym = true;
                }
                if (newsym)
                {
                    // get symbols
                    Basket b   = BasketImpl.FromString(_newsymlist);
                    object err = null;
                    foreach (Security s in b)
                    {
                        try
                        {
                            string se = string.Empty;
                            if (vret == null)
                            {
                                vret = _cc.VBRediCache.Submit("L1", "true", ref err);
                                checkerror(ref err, "submit");
                            }
                            _cc.VBRediCache.AddWatch(0, s.Symbol, string.Empty, ref err);
                            checkerror(ref err, "watch");
                        }
                        catch (Exception ex)
                        {
                            debug(s.Symbol + " error subscribing: " + ex.Message + ex.StackTrace);
                        }
                    }
                    debug("registered: " + _newsymlist);
                }
                while (!_neworders.isEmpty)
                {
                    Order o = _neworders.Read();
                    v("received order: " + o.ToString());
                    if (o.Account == string.Empty)
                    {
                        o.Account = Account;
                    }

                    if (isPaperTradeEnabled)
                    {
                        ptt.sendorder(o);
                    }
                    else
                    {
                        RediLib.ORDER rediOrder = new RediLib.ORDERClass();


                        // get any current position in symbol
                        Position p = pt[o.symbol];
                        // determine if a sell order should be a long exit or a short entry
                        string side = !o.side && !p.isLong ? "Sell Short" : (o.side ? "Buy" : "Sell");

                        rediOrder.Account  = o.Account;
                        rediOrder.UserID   = _userid;
                        rediOrder.Password = _pwd;

                        rediOrder.TIF    = gettiftype(o);
                        rediOrder.Side   = side;
                        rediOrder.Symbol = o.symbol;
                        if (o.ex == string.Empty)
                        {
                            o.ex = o.symbol.Length > 3 ? "ARCA" : "NYSE";
                        }
                        rediOrder.Exchange  = o.ex;
                        rediOrder.Quantity  = o.UnsignedSize;
                        rediOrder.Price     = o.price.ToString();
                        rediOrder.PriceType = getpricetype(o);

                        rediOrder.StopPrice = o.stopp;
                        rediOrder.Memo      = o.comment;
                        rediOrder.Warning   = false;
                        object err          = null;
                        object transId      = null;
                        bool   IsSuccessful = rediOrder.Submit2(ref transId, ref err);
                        if (IsSuccessful)
                        {
                            v("successfully sent order: " + o.ToString());
                            object err1 = null;
                            _messageCache.VBRediCache.AddWatch(1, o.symbol, "", ref err1);

                            if (!(err1 == null))
                            {
                                debug("FAILED open of Table! Table : Message  Error:" + err1.ToString());
                            }
                            else
                            {
                                v("successfully watching symbol: " + o.symbol);
                            }
                        }
                        else
                        {
                            v("error sending order: " + o.ToString());
                            if (!(err == null))
                            {
                                debug("order submission was not successful: " + err.ToString());
                            }
                        }
                    }
                }
                while (!_newcancel.isEmpty)
                {
                    long id = _newcancel.Read();
                    v("received cancel request: " + id);
                    if (isPaperTradeEnabled)
                    {
                        ptt.sendcancel(id);
                    }
                    else
                    {
                        object err = null;
                        _messageCache.VBRediCache.Cancel(id, ref err);
                        if (err != null)
                        {
                            v("error canceling id: " + id);
                        }
                        else
                        {
                            v("cancel request sent for: " + id);
                        }
                    }
                }
                if (_newcancel.isEmpty && _neworders.isEmpty && _newsyms.isEmpty)
                {
                    Thread.Sleep(_SLEEP);
                }
            }
        }
Exemple #2
0
        void doqueues(object obj)
        {
            while (_bwgo)
            {
                bool newsym = false;
                while (!_newsyms.isEmpty)
                {
                    _newsyms.Read();
                    newsym = true;
                }
                if (newsym)
                {
                    // get symbols
                    Basket b = BasketImpl.FromString(_newsymlist);
                    object err = null;
                    foreach (Security s in b)
                    {
                        try
                        {
                            string se= string.Empty;
                            if (vret == null)
                            {
                                vret = _cc.VBRediCache.Submit("L1", "true", ref err);
                                checkerror(ref err, "submit");
                            }
                            _cc.VBRediCache.AddWatch(0, s.Symbol, string.Empty, ref err);
                            checkerror(ref err,"watch");
                        }
                        catch (Exception ex)
                        {
                            debug(s.Symbol + " error subscribing: " + ex.Message + ex.StackTrace);
                        }
                    }
                    debug("registered: " + _newsymlist);
                }
                while (!_neworders.isEmpty)
                {
                    Order o = _neworders.Read();
                    v("received order: " + o.ToString());
                    if (o.Account == string.Empty)
                        o.Account = Account;

                    if (isPaperTradeEnabled)
                    {
                        ptt.sendorder(o);
                    }
                    else
                    {
                        RediLib.ORDER rediOrder = new RediLib.ORDERClass();

                        // get any current position in symbol
                        Position p = pt[o.symbol];
                        // determine if a sell order should be a long exit or a short entry
                        string side = !o.side && !p.isLong ? "Sell Short" : (o.side ? "Buy" : "Sell");

                        rediOrder.Account = o.Account;
                        rediOrder.UserID = _userid;
                        rediOrder.Password = _pwd;

                        rediOrder.TIF = gettiftype(o);
                        rediOrder.Side = side;
                        rediOrder.Symbol = o.symbol;
                        if (o.ex == string.Empty)
                            o.ex = o.symbol.Length > 3 ? "ARCA" : "NYSE";
                        rediOrder.Exchange = o.ex;
                        rediOrder.Quantity = o.UnsignedSize;
                        rediOrder.Price = o.price.ToString();
                        rediOrder.PriceType = getpricetype(o);

                        rediOrder.StopPrice = o.stopp;
                        rediOrder.Memo = "none";
                        rediOrder.Warning = false;
                        object err = null;
                        object transId = null;
                        bool IsSuccessful = rediOrder.Submit2(ref transId, ref err);
                        if (IsSuccessful)
                        {
                            v("successfully sent order: " + o.ToString());
                            object err1 = null;
                            _messageCache.VBRediCache.AddWatch(1, o.symbol, "", ref err1);

                            if (!(err1 == null))
                                debug("FAILED open of Table! Table : Message  Error:" + err1.ToString());
                            else
                                v("successfully watching symbol: " + o.symbol);

                        }
                        else
                        {
                            v("error sending order: " + o.ToString());
                            if (!(err == null))
                                debug("order submission was not successful: " + err.ToString());
                        }
                    }
                }
                while (!_newcancel.isEmpty)
                {
                    long id = _newcancel.Read();
                    v("received cancel request: " + id);
                    if (isPaperTradeEnabled)
                    {
                        ptt.sendcancel(id);
                    }
                    else
                    {
                        object err = null;
                        _messageCache.VBRediCache.Cancel(id, ref err);
                        if (err != null)
                            v("error canceling id: " + id);
                        else
                            v("cancel request sent for: " + id);
                    }
                }
                if (_newcancel.isEmpty && _neworders.isEmpty && _newsyms.isEmpty)
                    Thread.Sleep(_SLEEP);
            }
        }