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); } } }
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); } }