Forex_Strategy_Builder.Backtester.AnalysePermanentSLExit C# (CSharp) Метод

AnalysePermanentSLExit() статический приватный Метод

Sets Permanent Stop Loss close orders for the indicated bar
static private AnalysePermanentSLExit ( int bar ) : void
bar int
Результат void
        static void AnalysePermanentSLExit(int bar)
        {
            double deltaStop = Strategy.PermanentSL * InstrProperties.Point;

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

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

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

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

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

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

            return;
        }