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