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;
}