Forex_Strategy_Builder.Backtester.Calculation C# (CSharp) Method

Calculation() public static method

The main calculating cycle
public static Calculation ( ) : void
return void
        public static void Calculation()
        {
            ResetStart();

            if (closeStrPriceType == StrategyPriceType.CloseAndReverce)
            {   // Close and Reverse.
                if (openStrPriceType == StrategyPriceType.Open)
                {   // Opening price - Close and Reverse
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        ExecuteEntryAtOpeningPrice(bar);
                        CancelNoexecutedEntryOrders(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        CancelNoexecutedExitOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
                else if (openStrPriceType == StrategyPriceType.Close)
                {   // Closing price - Close and Reverse
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        AnalyseEntry(bar);
                        ExecuteEntryAtClosingPrice(bar);
                        CancelInvalidOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
                else
                {   // Indicator - Close and Reverse
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        CancelInvalidOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }

                ResetStop();

                return;
            }

            if (openStrPriceType == StrategyPriceType.Open)
            {
                if (closeStrPriceType == StrategyPriceType.Close)
                {   // Opening price - Closing price
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        ExecuteEntryAtOpeningPrice(bar);
                        CancelNoexecutedEntryOrders(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        CancelNoexecutedExitOrders(bar);
                        AnalyseExit(bar);
                        ExecuteExitAtClosingPrice(bar);
                        CancelNoexecutedExitOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
                else
                {   // Opening price - Indicator
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        ExecuteEntryAtOpeningPrice(bar);
                        CancelNoexecutedEntryOrders(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        AnalyseExit(bar);
                        BarInterpolation(bar);
                        CancelInvalidOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
            }
            else if (openStrPriceType == StrategyPriceType.Close)
            {
                if (closeStrPriceType == StrategyPriceType.Close)
                {   // Closing price - Closing price
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        AnalyseEntry(bar - 1);
                        ExecuteEntryAtClosingPrice(bar - 1);
                        CancelNoexecutedEntryOrders(bar - 1);
                        MarginCallCheckAtBarClosing(bar - 1);
                        session[bar - 1].SetWayPoint(Close[bar - 1], WayPointType.Close);
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        CancelNoexecutedExitOrders(bar);
                        AnalyseExit(bar);
                        ExecuteExitAtClosingPrice(bar);
                        CancelNoexecutedExitOrders(bar);
                    }
                }
                else
                {   // Closing price - Indicator
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        AnalyseEntry(bar - 1);
                        ExecuteEntryAtClosingPrice(bar - 1);
                        CancelNoexecutedEntryOrders(bar - 1);
                        MarginCallCheckAtBarClosing(bar - 1);
                        session[bar - 1].SetWayPoint(Close[bar - 1], WayPointType.Close);
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        AnalyseExit(bar);
                        BarInterpolation(bar);
                        CancelInvalidOrders(bar);
                    }
                }
            }
            else
            {
                if (closeStrPriceType == StrategyPriceType.Close)
                {   // Indicator - Closing price
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        BarInterpolation(bar);
                        CancelInvalidOrders(bar);
                        AnalyseExit(bar);
                        ExecuteExitAtClosingPrice(bar);
                        CancelNoexecutedExitOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
                else
                {   // Indicator - Indicator
                    for (int bar = FirstBar; bar < Bars; bar++)
                    {
                        TransferFromPreviousBar(bar);
                        if (FastCalculating(bar)) break;
                        session[bar].SetWayPoint(Open[bar], WayPointType.Open);
                        AnalyseEntry(bar);
                        if (Strategy.UsePermanentSL)
                            AnalysePermanentSLExit(bar);
                        if (Strategy.UsePermanentTP)
                            AnalysePermanentTPExit(bar);
                        AnalyseExit(bar);
                        BarInterpolation(bar);
                        CancelInvalidOrders(bar);
                        MarginCallCheckAtBarClosing(bar);
                        session[bar].SetWayPoint(Close[bar], WayPointType.Close);
                    }
                }
            }

            return;
        }