static void AnalysePermanentTPExit(int bar)
{
double deltaStop = Strategy.PermanentTP * InstrProperties.Point;
// If there is a position, sends a Stop Order for it
if (session[bar].Summary.PosDir == PosDirection.Long)
{ // Sets Permanent T/P for a Long Position
int ifOrder = 0;
int toPos = session[bar].Summary.PosNumb;
double lots = session[bar].Summary.PosLots;
double stop = Strategy.PermanentTPType == PermanentProtectionType.Absolute ? session[bar].Summary.AbsoluteTP : session[bar].Summary.FormOrdPrice + deltaStop;
string note = Language.T("Permanent T/P to position") + " " + (toPos + 1);
if (Open[bar] > stop && stop > Close[bar - 1])
OrdSellMarket(bar, ifOrder, toPos, lots, Open[bar], OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
else
OrdSellStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
}
else if (session[bar].Summary.PosDir == PosDirection.Short)
{ // Sets Permanent T/P for a Short Position
int ifOrder = 0;
int toPos = session[bar].Summary.PosNumb;
double lots = session[bar].Summary.PosLots;
double stop = Strategy.PermanentTPType == PermanentProtectionType.Absolute ? session[bar].Summary.AbsoluteTP : session[bar].Summary.FormOrdPrice - deltaStop;
string note = Language.T("Permanent T/P to position") + " " + (toPos + 1);
if (Close[bar - 1] > stop && stop > Open[bar])
OrdBuyMarket(bar, ifOrder, toPos, lots, Open[bar], OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
else
OrdBuyStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
}
// If there are Entry orders, sends an IfOrder stop for each of them.
for (int iOrd = 0; iOrd < session[bar].Orders; iOrd++)
{
Order entryOrder = session[bar].Order[iOrd];
if (entryOrder.OrdSender == OrderSender.Open && entryOrder.OrdStatus == OrderStatus.Confirmed)
{
int ifOrder = entryOrder.OrdNumb;
int toPos = 0;
double lots = entryOrder.OrdLots;
double stop = entryOrder.OrdPrice;
string note = Language.T("Permanent T/P to order") + " " + (ifOrder + 1);
if (entryOrder.OrdDir == OrderDirection.Buy)
{
stop += deltaStop;
OrdSellStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
}
else
{
stop -= deltaStop;
OrdBuyStop(bar, ifOrder, toPos, lots, stop, OrderSender.Close, OrderOrigin.PermanentTakeProfit, note);
}
}
}
return;
}