MicroTrendsLtd / NinjaTrader8

NinjaTrader8 Components Strategies and Trading tools
MIT License
72 stars 17 forks source link

isPositionCloseModeLimitExecuted is missing in MarketPosition.Short #44

Closed Sidlercom closed 3 years ago

Sidlercom commented 3 years ago

isPositionCloseModeLimitExecuted missing in MarketPosition.Short

` public virtual void PositionClose(bool isPositionCloseModeLimit = false) { if (Position.MarketPosition == MarketPosition.Long) { if (tracing) Print("PositionClose() > MarketPosition.Long");

            if (isPositionCloseModeLimit)
            {
                isPositionCloseModeLimitExecuted = false;

                List<Order> ordersProfitTarget;
                lock (OrdersProfitTarget)
                    ordersProfitTarget = OrdersProfitTarget.Where(o => IsOrderIsActive(o)).ToList<Order>();

                bool canDoCloseProfitOrders = (ordersProfitTarget.Count() > 0);

                if (canDoCloseProfitOrders)
                    canDoCloseProfitOrders = (Position.Quantity == ordersProfitTarget.Sum(o => o.Quantity));

                if (canDoCloseProfitOrders)
                {
                    if (tracing)
                        Print("PositionClose() > CloseWithProfitOrders");

                    foreach (Order profitOrder in ordersProfitTarget)
                    {
                        if (tracing)
                            Print("PositionClose() > profitOrder " + profitOrder.Name);

                        ChangeOrder(profitOrder, profitOrder.Quantity, GetCurrentBid(0) - PositionCloseModeTicksOffset * TickSize, 0);

                        isPositionCloseModeLimitExecuted = true;
                    }
                    //return if success
                    return;
                }
            }

            if (tracing)
                Print("PositionClose() > UseCloseOrder");

            string orderEntryName = orderEntry != null ? orderEntry.Name.Replace(arrowUp, string.Empty) : "Long";
            orderEntryName = orderEntryName.Substring(3);
            string signalName = arrowDown + closeOrderName + orderEntryName;
            orderClose = null;

            orderClose = SubmitOrderUnmanaged(0, OrderAction.Sell, OrderType.Market, Position.Quantity, 0, 0, string.Empty, signalName);

        }
        else if (Position.MarketPosition == MarketPosition.Short)
        {
            if (tracing)
                Print("PositionClose() > MarketPosition.Short");

            if (isPositionCloseModeLimit)
            {

                List<Order> ordersProfitTarget;
                lock (OrdersProfitTarget)
                    ordersProfitTarget = OrdersProfitTarget.Where(o => IsOrderIsActive(o)).ToList<Order>();

                bool canDoCloseProfitOrders = (ordersProfitTarget.Count() > 0);

                if (canDoCloseProfitOrders)
                    canDoCloseProfitOrders = (Position.Quantity == ordersProfitTarget.Sum(o => o.Quantity));

                if (canDoCloseProfitOrders)
                {
                    if (tracing)
                        Print("PositionClose() > CloseWithProfitOrders");

                    foreach (Order profitOrder in ordersProfitTarget)
                    {
                        if (tracing)
                            Print("PositionClose() > profitOrder " + profitOrder.Name);

                        ChangeOrder(profitOrder, profitOrder.Quantity, GetCurrentAsk(0) + PositionCloseModeTicksOffset * TickSize, 0);
                    }
                    //return if success
                    return;
                }
            }

            string orderEntryName = orderEntry != null ? orderEntry.Name.Replace(arrowDown, string.Empty) : "Short";
            orderEntryName = orderEntryName.Substring(3);
            string signalName = arrowUp + closeOrderName + orderEntryName;
            orderClose = null;

            orderClose = SubmitOrderUnmanaged(0, OrderAction.BuyToCover, OrderType.Market, Position.Quantity, 0, 0, string.Empty, signalName);
        }
        else if (Position.Quantity != 0)
        {
            if (tracing)
                Print("PositionClose() > Position.Quantity != 0");

            Position.Close();
        }
    }`
MicroTrendsTom commented 3 years ago

isPositionCloseModeLimitExecuted is deprecated as the last release so do not use that etc The related public properties are now hidden not usable. So there should be no impact.

Are you trying to use that mode? What is the error you are seeing Is that the latest release etc?

MicroTrendsTom commented 3 years ago

deprecated/shelved for later perhaps but added refactor

Sidlercom commented 3 years ago

i saw this by chance when looking through the code. i have not used this function. my version is this: 2021.2.23.2