Forex_Strategy_Builder.Backtester.AnalysePermanentTPExit C# (CSharp) Method

AnalysePermanentTPExit() static private method

Sets Permanent Take Profit close orders for the indicated bar
static private AnalysePermanentTPExit ( int bar ) : void
bar int
return void
        static void AnalysePermanentTPExit(int bar)
        {
            double deltaStop = Strategy.PermanentTP * InstrProperties.Point;

            // If there is a position, sends a Stop Order for it
            if (session[bar].Summary.PosDir == PosDirection.Long)
            {   // Sets Permanent T/P for a Long Position
                int    ifOrder = 0;
                int    toPos   = session[bar].Summary.PosNumb;
                double lots    = session[bar].Summary.PosLots;
                double stop    = Strategy.PermanentTPType == PermanentProtectionType.Absolute ? session[bar].Summary.AbsoluteTP : session[bar].Summary.FormOrdPrice + deltaStop;
                string note    = Language.T("Permanent T/P to position") + " " + (toPos + 1);

                if (Open[bar] > stop && stop > Close[bar - 1])
                    OrdSellMarket(bar, ifOrder, toPos, lots, Open[bar], OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
                else
                    OrdSellStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
            }
            else if (session[bar].Summary.PosDir == PosDirection.Short)
            {   // Sets Permanent T/P for a Short Position
                int    ifOrder = 0;
                int    toPos   = session[bar].Summary.PosNumb;
                double lots    = session[bar].Summary.PosLots;
                double stop    = Strategy.PermanentTPType == PermanentProtectionType.Absolute ? session[bar].Summary.AbsoluteTP : session[bar].Summary.FormOrdPrice - deltaStop;
                string note    = Language.T("Permanent T/P to position") + " " + (toPos + 1);

                if (Close[bar - 1] > stop && stop > Open[bar])
                    OrdBuyMarket(bar, ifOrder, toPos, lots, Open[bar], OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
                else
                    OrdBuyStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
            }

            // If there are Entry orders, sends an IfOrder stop for each of them.
            for (int iOrd = 0; iOrd < session[bar].Orders; iOrd++)
            {
                Order entryOrder = session[bar].Order[iOrd];

                if (entryOrder.OrdSender == OrderSender.Open && entryOrder.OrdStatus == OrderStatus.Confirmed)
                {
                    int    ifOrder = entryOrder.OrdNumb;
                    int    toPos = 0;
                    double lots  = entryOrder.OrdLots;
                    double stop  = entryOrder.OrdPrice;
                    string note  = Language.T("Permanent T/P to order") + " " + (ifOrder + 1);

                    if (entryOrder.OrdDir == OrderDirection.Buy)
                    {
                        stop += deltaStop;
                        OrdSellStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
                    }
                    else
                    {
                        stop -= deltaStop;
                        OrdBuyStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
                    }
                }
            }

            return;
        }