Beispiel #1
0
        private void HandleSellExecution(ParentOrder parentOrder, TradeExecution execution)
        {
            TradeOrder order = parentOrder.GetChildOrderByID(execution.OrderID);

            if (order == null)
            {
                Log.Error(string.Format("Cannot find trade order, orderID: {0}", execution.OrderID));
            }
            else
            {
                if (string.IsNullOrWhiteSpace(order.Notes))
                {
                    Log.Warn("HandleSellExecution error. Cannot resolve execution level due to emtpy order notes");
                }
                else
                {
                    int exeLevel = int.Parse(order.Notes);
                    TradeMap[exeLevel].CurrentQty -= execution.Shares;

                    if (TradeMap[exeLevel].CurrentQty < 0)
                    {
                        //should not hit here
                        Log.Error(string.Format("Negative CurrentQty detected. level: {0}, qty: {1}", exeLevel, TradeMap[exeLevel].CurrentQty));
                    }

                    if (TradeMap[exeLevel].CurrentQty <= 0)
                    {
                        if (TradeMap.ContainsKey(CurrentLevel))
                        {
                            TradeMap[CurrentLevel].WasFilledSellOnPartial = false;
                            TradeMap[CurrentLevel].LastBuyPrice           = 0;
                        }
                        CurrentLevel--;

                        //TradeMap.Remove(CurrentLevel);

                        //for (int i = CurrentLevel + 1; i <= ScaleLevel; i++)
                        //{
                        //    if (TradeMap.ContainsKey(i)) TradeMap.Remove(i);
                        //}

                        //if (CurrentLevel >= 0)
                        //{
                        //    GenerateTradeMapNextLevel(TradeMap[CurrentLevel].LastBuyPrice);
                        //}
                    }
                }
                Log.Info("After sld execution." + Util.PrintTradeMapCurrLvl(this));
            }
        }
Beispiel #2
0
        private void HandleBuyExecution(ParentOrder parentOrder, TradeExecution execution)
        {
            /*
             * check if buy execution create new tradeMap entry
             * 1.curr level =-1;
             * 2. Curre level filled and next level exist
             * 3. curr level partial filled but wasfilled and next level exist
             * 4. curr level is zero and partial filled and buyback enabled
             *
             * */


            TradeOrder order = parentOrder.GetChildOrderByID(execution.OrderID);

            if (order == null)
            {
                Log.Error(string.Format("Cannot find trade order, orderID: {0}", execution.OrderID));
            }
            else
            {
                int exeLevel = int.Parse(order.Notes);
                TradeMap[exeLevel].CurrentQty += execution.Shares;
                if (TradeMap[exeLevel].CurrentQty > TradeMap[exeLevel].TargetQty)
                {
                    //should not hit here
                    Log.Error(string.Format("Overbot Qty detected. level: {0}, qty: {1}, target qty: {2}",
                                            exeLevel, TradeMap[exeLevel].CurrentQty, TradeMap[exeLevel].TargetQty));
                }


                TradeMap[exeLevel].LastBuyPrice = execution.Price;
                //TradeMap[exeLevel].TargetSellPrice = (exeLevel == 0) ? int.MaxValue : TradeMap[exeLevel - 1].LastBuyPrice;

                CurrentLevel = Math.Max(CurrentLevel, exeLevel);

                if (TradeMap[CurrentLevel].Filled)
                {
                    TradeMap[CurrentLevel].WasFilledSellOnPartial = true;
                    //GenerateTradeMapNextLevel(TradeMap[CurrentLevel].LastBuyPrice);
                }

                Log.Info("After bot execution." + Util.PrintTradeMapCurrLvl(this));
            }
        }