public OrderLimit PlaceOrderLimit(Symbol symbol, OrderSide side, decimal quantity, decimal price,
                                          Action <OrderBase> orderStatusHandler = null, Action <OrderBase, ErrorCodes> errorHandler = null)
        {
            OrderLimit order = new OrderLimit(side, quantity, price, symbol, this);

            return(_sender.PlaceOrderLimit(order, orderStatusHandler, errorHandler));
        }
Esempio n. 2
0
        public void Lower_limit_by_actual_sum()
        {
            var supplier = TestSupplier.CreateNaked(session);
            var price    = supplier.Prices[0];

            supplier.CreateSampleCore(session);
            price.Costs[0].PriceItem.PriceDate = DateTime.Now.AddDays(-10);
            session.Save(supplier);
            supplier.Maintain(session);

            var address = session.Load <Address>(user.AvaliableAddresses[0].Id);
            var limit   = new OrderLimit(session.Load <Supplier>(supplier.Id), 1000)
            {
                Today = 500
            };

            address.OrderLimits.Add(limit);

            var settings = session.Load <ClientSettings>(user.Client.Id);

            settings.AllowDelayOfPayment = true;

            var offer       = price.Core[0];
            var clientOrder = ToClientOrder(offer);

            clientOrder.Orders[0].Items[0].ResultCost = 150;
            session.Flush();
            PostOrder(clientOrder);

            session.Refresh(limit);
            Assert.AreEqual(900, limit.Value);
            Assert.AreEqual(500, limit.Today);
        }
Esempio n. 3
0
        internal OrderLimit PlaceOrderLimit(OrderLimit order, Action <OrderBase> orderStatusHandler = null, Action <OrderBase, ErrorCodes> errorHandler = null)
        {
            if (!_connection.IsControlConnected())
            {
                return(null);
            }
            order.OrderStatusChanged += orderStatusHandler;
            order.ErrorEvent         += errorHandler;
            _ordersLock.EnterWriteLock();
            try
            { _orders.Add(order.ClientId, order); }
            finally
            { _ordersLock.ExitWriteLock(); }
            bool result = _connection.PlaceOrder(order);

            if (!result)
            {
                _ordersLock.EnterWriteLock();
                try
                {
                    order.Dispose();
                    _orders.Remove(order.ClientId);
                }
                finally
                { _ordersLock.ExitWriteLock(); }
                order = null;
            }
            return(order);
        }
 public PendingLimitLog(RequestLog request, OrderLimit limit, Tuple <decimal, decimal> values)
 {
     Request = request;
     Limit   = limit;
     Value   = values.Item1;
     ToDay   = values.Item2;
 }
Esempio n. 5
0
        public LeverageData(Message message)
        {
            if (message.KontentCase != Message.KontentOneofCase.LeverageMsg)
            {
                throw new ArgumentException($"Error: Message containis KontentCase {message.KontentCase} " +
                                            $" instead of LeverageMsg.");
            }
            Symbol          symbol          = SymbolsContainer.GetSymbol(message.MarketId);
            LeverageMessage leverageMessage = message.LeverageMsg;

            DWConverter.FromProtoDecimal(leverageMessage.AccumQuantity);
            BuyOrderMargin     = DWConverter.FromProtoDecimal(leverageMessage.BuyOrderMargin);
            BuyOrderQuantity   = DWConverter.FromProtoDecimal(leverageMessage.BuyOrderQuantity);
            LastTradePrice     = DWConverter.FromProtoDecimal(leverageMessage.LastTradePrice);
            LastTradeQuantity  = DWConverter.FromProtoDecimal(leverageMessage.LastTradeQuantity);
            LastTradeTimestamp = DWConverter.FromLongDateTime(leverageMessage.LastTradeTimestamp);
            Leverage           = leverageMessage.Leverage;
            OrderMargin        = DWConverter.FromProtoDecimal(leverageMessage.OrderMargin);

            Orders = new List <OrderBase>();
            foreach (OrderMessage orderMessage in leverageMessage.Orders)
            {
                OrderBase order = new OrderLimit(orderMessage, symbol);
                Orders.Add(order);
            }

            Pnl = DWConverter.FromProtoDecimal(leverageMessage.Pnl);
            PositionBankruptcyVolume  = DWConverter.FromProtoDecimal(leverageMessage.PositionBankruptcyVolume);
            PositionContracts         = DWConverter.FromProtoDecimal(leverageMessage.PositionContracts);
            PositionLiquidationVolume = DWConverter.FromProtoDecimal(leverageMessage.PositionLiquidationVolume);
            PositionMargin            = DWConverter.FromProtoDecimal(leverageMessage.PositionMargin);
            PositionType      = leverageMessage.PositionType;
            PositionVolume    = DWConverter.FromProtoDecimal(leverageMessage.PositionVolume);
            SellOrderMargin   = DWConverter.FromProtoDecimal(leverageMessage.SellOrderMargin);
            SellOrderQuantity = DWConverter.FromProtoDecimal(leverageMessage.SellOrderQuantity);
            TraderBalance     = DWConverter.FromProtoDecimal(leverageMessage.TraderBalance);

            Trades = new List <Trade>();
            foreach (TradeMessage tradeMessage in leverageMessage.Trades)
            {
                Trade trade = new Trade(tradeMessage, symbol);
                Trades.Add(trade);
            }

            Upnl = DWConverter.FromProtoDecimal(leverageMessage.Upnl);
        }
Esempio n. 6
0
        public static void SetLimit(ISession session)
        {
            Console.Write("Поставщик:");
            var supplierId = Convert.ToUInt32(Console.ReadLine());

            Console.Write("Лимит:");
            var value   = Convert.ToDecimal(Console.ReadLine());
            var user    = ServerFixture.User(session);
            var address = session.Load <Common.Models.Address>(user.AvaliableAddresses[0].Id);
            var limit   = address.OrderLimits.FirstOrDefault(l => l.Supplier.Id == supplierId);

            if (limit == null)
            {
                limit = new OrderLimit(session.Load <Common.Models.Supplier>(supplierId), value);
                address.OrderLimits.Add(limit);
            }
            limit.Value = value;
            session.Save(address);
        }
Esempio n. 7
0
        private void MakeOrder(OrderType orderType, OrderAction orderAction)
        {
            Contract contract = new Contract();

            IBApi.Order order = new IBApi.Order();

            switch (orderType)
            {
            case OrderType.MTL:

                // AUC
                contract.Symbol   = "IBKR";
                contract.SecType  = "STK";
                contract.Currency = "USD";
                contract.Exchange = "SMART";

                OrderAuction orderAuction = new OrderAuction();
                orderAuction.Action     = orderAction;
                orderAuction.LimitPrice = 10;
                orderAuction.Quantity   = 1;

                order = orderAuction.GetOrder;

                break;

            case OrderType.MKT:


                contract.Symbol   = "IBKR";
                contract.SecType  = "STK";
                contract.Currency = "USD";
                contract.Exchange = "SMART";

                OrderMarket orderMarket = new OrderMarket();
                orderMarket.Action      = orderAction;
                orderMarket.Quantity    = 1;
                orderMarket.TimeInForce = OrderTimeInForce.GTC;

                order = orderMarket.GetOrder;

                break;

            case OrderType.LMT:

                contract.Symbol   = "IBKR";
                contract.SecType  = "STK";
                contract.Currency = "USD";
                contract.Exchange = "SMART";

                OrderLimit orderLimit = new OrderLimit();

                orderLimit.Action      = orderAction;
                orderLimit.LimitPrice  = 10;
                orderLimit.Quantity    = 1;
                orderLimit.TimeInForce = OrderTimeInForce.GTC;

                order = orderLimit.GetOrder;

                break;
            }

            manager.SubmitOrder(contract, order);
        }
Esempio n. 8
0
        /// <summary>
        /// Call for starting parsing by the contained rules, using provided crude information html content string.
        /// </summary>
        public PageParseResult Parse(string relativeUri = null)
        {
            if (fastWeb == null)
            {
                fastWeb = new FastWeb2(Domain);
            }

            var rawHtml = fastWeb.Get(relativeUri);

            //PreprocessPlan
            string processedHtml = PagePreprocess == null ? rawHtml : rawHtml.Mold(PagePreprocess);

            //interpret as document node
            HtmlDocument document = new HtmlDocument();

            document.LoadHtml(processedHtml);
            HtmlNode entireDocumentNode = document.DocumentNode;

            var pageParseResult = new PageParseResult
            {
                Title = Title.ExtractSingle(node: entireDocumentNode)
            };

            if (Subtitle != null)
            {
                pageParseResult.Title += " " + Subtitle.ExtractSingleFromNode(node: entireDocumentNode);
            }

            if (Thumbnail != null)
            {
                pageParseResult.ThumbPath = Thumbnail.ExtractSingleFromNode(node: entireDocumentNode);
            }

            //Parsing Actual Options
            if (DefaultOptionMode != DefaultOptionMode.Single)
            {
                try
                {
                    bool isRegex = OptionsList.SelectMethod == SelectMethod.Regex;

                    IEnumerable <object> crudeOptions;

                    if (isRegex)
                    {
                        crudeOptions = OptionsList.ExtractList(entireDocumentNode.InnerHtml);
                    }
                    else
                    {
                        crudeOptions = OptionsList.ExtractList(entireDocumentNode);
                    }

                    foreach (var entry in crudeOptions)
                    {
                        var optionParseResult = isRegex ? ActualOption.Parse(entry as string) : ActualOption.Parse(entry as HtmlNode);

                        if (optionParseResult.Price.Amount == 0 && PriceMode != PriceMode.Add)
                        {
                            continue;
                        }

                        pageParseResult.OptionParseResults.Add(optionParseResult);
                    }
                }
                catch (NullReferenceException nrex) when(DefaultOptionMode == DefaultOptionMode.Alongside || DefaultOptionMode == DefaultOptionMode.Alternative)
                {
                    //swallow when actual options absence allowed
                    Logger.Log(nrex.Message + " @ PageParsing of " + relativeUri);
                }
            }

            //Default Option Logic
            if (DefaultOptionMode != DefaultOptionMode.Ignore)
            {
                if (DefaultOptionMode == DefaultOptionMode.Single)
                {
                    Logger.Log(Domain + " has 1 option per page setup. Add all options separately.");
                }

                OptionParseResult defaultOption;

                try
                {
                    defaultOption           = DefaultOption.Parse(entireDocumentNode);
                    defaultOption.PropertyA = defaultOption.Code = DefaultOptionMode.ToString();
                }
                catch (NullReferenceException nrex)
                {
                    Logger.Log(nrex.Message + " @ PageParsing of " + relativeUri);
                    throw;
                }

                //Prices correction according to Price Mode Setting
                if (PriceMode == PriceMode.Add)
                {
                    foreach (OptionParseResult optParseRes in pageParseResult.OptionParseResults)
                    {
                        optParseRes.Price.Amount += defaultOption.Price.Amount;
                    }
                }

                //Adding default option to the options list, if necessary
                if (DefaultOptionMode == DefaultOptionMode.Alongside ||
                    DefaultOptionMode == DefaultOptionMode.Single ||
                    (DefaultOptionMode == DefaultOptionMode.Alternative && pageParseResult.OptionParseResults.Count == 0))
                {
                    pageParseResult.OptionParseResults.Add(defaultOption);
                }
            }

            //Prices correction according to the Main Currency & Shop Ordering Rules
            foreach (OptionParseResult optParseRes in pageParseResult.OptionParseResults)
            {
                optParseRes.Price = optParseRes.Price.AsMainCurrency();
                var value = optParseRes.Price.Amount;

                value /= 1 + OrderDeduction;

                if (OrderExtra != null && OrderLimit != null && OrderLimit.AsMainCurrency().Amount > 0)
                {
                    decimal limitValue      = OrderLimit.AsMainCurrency().Amount;
                    decimal orderExtraValue = OrderExtra.AsMainCurrency().Amount;
                    decimal piecesPerOrder  = limitValue / value;
                    decimal extraPerPiece   = orderExtraValue / piecesPerOrder;
                    value += extraPerPiece;
                }

                optParseRes.Price.Amount = value;
            }

            return(pageParseResult);
        }