Forex_Strategy_Builder.Strategy.OpeningLogicHTMLReport C# (CSharp) Метод

OpeningLogicHTMLReport() приватный Метод

Generates a HTML report about the opening logic.
private OpeningLogicHTMLReport ( ) : StringBuilder
Результат StringBuilder
        StringBuilder OpeningLogicHTMLReport()
        {
            StringBuilder sb = new StringBuilder();
            string indicatorName = Data.Strategy.Slot[0].IndicatorName;

            Indicator indOpen = Indicator_Store.ConstructIndicator(indicatorName, SlotTypes.Open);
            indOpen.IndParam  = Data.Strategy.Slot[0].IndParam;
            indOpen.SetDescription(SlotTypes.Open);

            // Logical groups of the opening conditions.
            List<string> opengroups = new List<string>();
            for (int slot = 1; slot <= Data.Strategy.OpenFilters; slot++)
            {
                string group = Data.Strategy.Slot[slot].LogicalGroup;
                if (!opengroups.Contains(group) && group != "All")
                    opengroups.Add(group); // Adds all groups except "All"
            }
            if (opengroups.Count == 0 && Data.Strategy.OpenFilters > 0)
                opengroups.Add("All"); // If all the slots are in "All" group, adds "All" to the list.

            // Long position
            string openLong = "<p>";

            if (Data.Strategy.sameDirSignal == SameDirSignalAction.Add)
                openLong = Language.T("Open a new long position or add to an existing position");
            else if (Data.Strategy.sameDirSignal == SameDirSignalAction.Winner)
                openLong = Language.T("Open a new long position or add to a winning position");
            else if (Data.Strategy.sameDirSignal == SameDirSignalAction.Nothing)
                openLong = Language.T("Open a new long position");

            if (OppSignalAction == OppositeDirSignalAction.Close)
                openLong += " " + Language.T("or close a short position");
            else if (OppSignalAction == OppositeDirSignalAction.Reduce)
                openLong += " " + Language.T("or reduce a short position");
            else if (OppSignalAction == OppositeDirSignalAction.Reverse)
                openLong += " " + Language.T("or reverse a short position");
            else if (OppSignalAction == OppositeDirSignalAction.Nothing)
                openLong += "";

            openLong += " " + indOpen.EntryPointLongDescription;

            if (Data.Strategy.OpenFilters == 0)
                openLong += ".</p>";
            else if (Data.Strategy.OpenFilters == 1)
                openLong += " " + Language.T("when the following logic condition is satisfied") + ":</p>";
            else if (opengroups.Count > 1)
                openLong += " " + Language.T("when") + ":</p>";
            else
                openLong += " " + Language.T("when all the following logic conditions are satisfied") + ":</p>";

            sb.AppendLine(openLong);

            // Open Filters
            if (Data.Strategy.OpenFilters > 0)
            {
                int groupnumb = 1;
                if (opengroups.Count > 1)
                    sb.AppendLine("<ul>");

                foreach (string group in opengroups)
                {
                    if (opengroups.Count > 1)
                    {
                        sb.AppendLine("<li>" + (groupnumb == 1 ? "" : Language.T("or") + " ") + Language.T("logical group [#] is satisfied").Replace("#", group) + ":");
                        groupnumb++;
                    }

                    sb.AppendLine("<ul>");
                    int indInGroup = 0;
                    for (int slot = 1; slot <= Data.Strategy.OpenFilters; slot++)
                        if (Data.Strategy.Slot[slot].LogicalGroup == group || Data.Strategy.Slot[slot].LogicalGroup == "All")
                            indInGroup++;

                    int indnumb = 1;
                    for (int slot = 1; slot <= Data.Strategy.OpenFilters; slot++)
                    {
                        if (Data.Strategy.Slot[slot].LogicalGroup != group && Data.Strategy.Slot[slot].LogicalGroup != "All")
                            continue;

                        Indicator indOpenFilter = Indicator_Store.ConstructIndicator(Data.Strategy.Slot[slot].IndicatorName, SlotTypes.OpenFilter);
                        indOpenFilter.IndParam = Data.Strategy.Slot[slot].IndParam;
                        indOpenFilter.SetDescription(SlotTypes.OpenFilter);

                        if (indnumb < indInGroup)
                            sb.AppendLine("<li>" + indOpenFilter.EntryFilterLongDescription + "; " + Language.T("and") + "</li>");
                        else
                            sb.AppendLine("<li>" + indOpenFilter.EntryFilterLongDescription + ".</li>");

                        indnumb++;
                    }
                    sb.AppendLine("</ul>");

                    if (opengroups.Count > 1)
                        sb.AppendLine("</li>");
                }

                if (opengroups.Count > 1)
                    sb.AppendLine("</ul>");
            }

            // Short position
            string openShort = "<p>";

            if (Data.Strategy.sameDirSignal == SameDirSignalAction.Add)
                openShort = Language.T("Open a new short position or add to an existing position");
            else if (Data.Strategy.sameDirSignal == SameDirSignalAction.Winner)
                openShort = Language.T("Open a new short position or add to a winning position");
            else if (Data.Strategy.sameDirSignal == SameDirSignalAction.Nothing)
                openShort = Language.T("Open a new short position");

            if (OppSignalAction == OppositeDirSignalAction.Close)
                openShort += " " + Language.T("or close a long position");
            else if (OppSignalAction == OppositeDirSignalAction.Reduce)
                openShort += " " + Language.T("or reduce a long position");
            else if (OppSignalAction == OppositeDirSignalAction.Reverse)
                openShort += " " + Language.T("or reverse a long position");
            else if (OppSignalAction == OppositeDirSignalAction.Nothing)
                openShort += "";

            openShort += " " + indOpen.EntryPointShortDescription;

            if (Data.Strategy.OpenFilters == 0)
                openShort += ".</p>";
            else if (Data.Strategy.OpenFilters == 1)
                openShort += " " + Language.T("when the following logic condition is satisfied") + ":</p>";
            else if (opengroups.Count > 1)
                openShort += " " + Language.T("when") + ":</p>";
            else
                openShort += " " + Language.T("when all the following logic conditions are satisfied") + ":</p>";

            sb.AppendLine(openShort);

            // Open Filters
            if (Data.Strategy.OpenFilters > 0)
            {
                int groupnumb = 1;
                if (opengroups.Count > 1)
                    sb.AppendLine("<ul>");

                foreach (string group in opengroups)
                {
                    if (opengroups.Count > 1)
                    {
                        sb.AppendLine("<li>" + (groupnumb == 1 ? "" : Language.T("or") + " ") + Language.T("logical group [#] is satisfied").Replace("#", group) + ":");
                        groupnumb++;
                    }

                    sb.AppendLine("<ul>");
                    int indInGroup = 0;
                    for (int slot = 1; slot <= Data.Strategy.OpenFilters; slot++)
                        if (Data.Strategy.Slot[slot].LogicalGroup == group || Data.Strategy.Slot[slot].LogicalGroup == "All")
                            indInGroup++;

                    int indnumb = 1;
                    for (int slot = 1; slot <= Data.Strategy.OpenFilters; slot++)
                    {
                        if (Data.Strategy.Slot[slot].LogicalGroup != group && Data.Strategy.Slot[slot].LogicalGroup != "All")
                            continue;

                        Indicator indOpenFilter = Indicator_Store.ConstructIndicator(Data.Strategy.Slot[slot].IndicatorName, SlotTypes.OpenFilter);
                        indOpenFilter.IndParam = Data.Strategy.Slot[slot].IndParam;
                        indOpenFilter.SetDescription(SlotTypes.OpenFilter);

                        if (indnumb < indInGroup)
                            sb.AppendLine("<li>" + indOpenFilter.EntryFilterShortDescription + "; " + Language.T("and") + "</li>");
                        else
                            sb.AppendLine("<li>" + indOpenFilter.EntryFilterShortDescription + ".</li>");

                        indnumb++;
                    }
                    sb.AppendLine("</ul>");

                    if (opengroups.Count > 1)
                        sb.AppendLine("</li>");
                }
                if (opengroups.Count > 1)
                    sb.AppendLine("</ul>");
            }

            return sb;
        }