StringBuilder ClosingLogicHTMLReport()
{
StringBuilder sb = new StringBuilder();
int closingSlotNmb = Data.Strategy.CloseSlot;
string indicatorName = Data.Strategy.Slot[closingSlotNmb].IndicatorName;
Indicator indClose = Indicator_Store.ConstructIndicator(indicatorName, SlotTypes.Close);
indClose.IndParam = Data.Strategy.Slot[closingSlotNmb].IndParam;
indClose.SetDescription(SlotTypes.Close);
bool isGroups = false;
List<string> closegroups = new List<string>();
if (Data.Strategy.CloseFilters > 0)
foreach (IndicatorSlot slot in Data.Strategy.Slot)
{
if (slot.SlotType == SlotTypes.CloseFilter)
{
if (slot.LogicalGroup == "all" && Data.Strategy.CloseFilters > 1)
isGroups = true;
if (closegroups.Contains(slot.LogicalGroup))
isGroups = true;
else if (slot.LogicalGroup != "all")
closegroups.Add(slot.LogicalGroup);
}
}
if (closegroups.Count == 0 && Data.Strategy.CloseFilters > 0)
closegroups.Add("all"); // If all the slots are in "all" group, adds "all" to the list.
// Long position
string closeLong = "<p>" + Language.T("Close an existing long position") + " " + indClose.ExitPointLongDescription;
if (Data.Strategy.CloseFilters == 0)
closeLong += ".</p>";
else if (Data.Strategy.CloseFilters == 1)
closeLong += " " + Language.T("when the following logic condition is satisfied") + ":</p>";
else if (isGroups)
closeLong += " " + Language.T("when") + ":</p>";
else
closeLong += " " + Language.T("when at least one of the following logic conditions is satisfied") + ":</p>";
sb.AppendLine(closeLong);
// Close Filters
if (Data.Strategy.CloseFilters > 0)
{
int groupnumb = 1;
sb.AppendLine("<ul>");
foreach (string group in closegroups)
{
if (isGroups)
{
sb.AppendLine("<li>" + (groupnumb == 1 ? "" : Language.T("or") + " ") + Language.T("logical group [#] is satisfied").Replace("#", group) + ":");
sb.AppendLine("<ul>");
groupnumb++;
}
int indInGroup = 0;
for (int slot = closingSlotNmb + 1; slot < Data.Strategy.Slots; slot++)
if (Data.Strategy.Slot[slot].LogicalGroup == group || Data.Strategy.Slot[slot].LogicalGroup == "all")
indInGroup++;
int indnumb = 1;
for (int slot = closingSlotNmb + 1; slot < Data.Strategy.Slots; slot++)
{
if (Data.Strategy.Slot[slot].LogicalGroup != group && Data.Strategy.Slot[slot].LogicalGroup != "all")
continue;
Indicator indCloseFilter = Indicator_Store.ConstructIndicator(Data.Strategy.Slot[slot].IndicatorName, SlotTypes.CloseFilter);
indCloseFilter.IndParam = Data.Strategy.Slot[slot].IndParam;
indCloseFilter.SetDescription(SlotTypes.CloseFilter);
if (isGroups)
{
if (indnumb < indInGroup)
sb.AppendLine("<li>" + indCloseFilter.ExitFilterLongDescription + "; " + Language.T("and") + "</li>");
else
sb.AppendLine("<li>" + indCloseFilter.ExitFilterLongDescription + ".</li>");
}
else
{
if (slot < Data.Strategy.Slots - 1)
sb.AppendLine("<li>" + indCloseFilter.ExitFilterLongDescription + "; " + Language.T("or") + "</li>");
else
sb.AppendLine("<li>" + indCloseFilter.ExitFilterLongDescription + ".</li>");
}
indnumb++;
}
if (isGroups)
{
sb.AppendLine("</ul>");
sb.AppendLine("</li>");
}
}
sb.AppendLine("</ul>");
}
// Short position
string closeShort = "<p>" + Language.T("Close an existing short position") + " " + indClose.ExitPointShortDescription;
if (Data.Strategy.CloseFilters == 0)
closeShort += ".</p>";
else if (Data.Strategy.CloseFilters == 1)
closeShort += " " + Language.T("when the following logic condition is satisfied") + ":</p>";
else if (isGroups)
closeShort += " " + Language.T("when") + ":</p>";
else
closeShort += " " + Language.T("when at least one of the following logic conditions is satisfied") + ":</p>";
sb.AppendLine(closeShort);
// Close Filters
if (Data.Strategy.CloseFilters > 0)
{
int groupnumb = 1;
sb.AppendLine("<ul>");
foreach (string group in closegroups)
{
if (isGroups)
{
sb.AppendLine("<li>" + (groupnumb == 1 ? "" : Language.T("or") + " ") + Language.T("logical group [#] is satisfied").Replace("#", group) + ":");
sb.AppendLine("<ul>");
groupnumb++;
}
int indInGroup = 0;
for (int slot = closingSlotNmb + 1; slot < Data.Strategy.Slots; slot++)
if (Data.Strategy.Slot[slot].LogicalGroup == group || Data.Strategy.Slot[slot].LogicalGroup == "all")
indInGroup++;
int indnumb = 1;
for (int slot = closingSlotNmb + 1; slot < Data.Strategy.Slots; slot++)
{
if (Data.Strategy.Slot[slot].LogicalGroup != group && Data.Strategy.Slot[slot].LogicalGroup != "all")
continue;
Indicator indCloseFilter = Indicator_Store.ConstructIndicator(Data.Strategy.Slot[slot].IndicatorName, SlotTypes.CloseFilter);
indCloseFilter.IndParam = Data.Strategy.Slot[slot].IndParam;
indCloseFilter.SetDescription(SlotTypes.CloseFilter);
if (isGroups)
{
if (indnumb < indInGroup)
sb.AppendLine("<li>" + indCloseFilter.ExitFilterShortDescription + "; " + Language.T("and") + "</li>");
else
sb.AppendLine("<li>" + indCloseFilter.ExitFilterShortDescription + ".</li>");
}
else
{
if (slot < Data.Strategy.Slots - 1)
sb.AppendLine("<li>" + indCloseFilter.ExitFilterShortDescription + "; " + Language.T("or") + "</li>");
else
sb.AppendLine("<li>" + indCloseFilter.ExitFilterShortDescription + ".</li>");
}
indnumb++;
}
if (isGroups)
{
sb.AppendLine("</ul>");
sb.AppendLine("</li>");
}
}
sb.AppendLine("</ul>");
}
return sb;
}