Trouble: "PositionGet" that works on HEDGE account but not in NETTING

 

Hi coders,

This code is to get the TP, SL and Gain/Risk ratio from opened Positions. It works in Hedge but not in Netting accounts.

Can anybody help me?

Thank you in advance!


int pos_total = PositionsTotal();
if (pos_total > 0)

for(int pos = pos_total - 1; pos >= 0; pos--)

ulong PosTicket = PositionGetTicket(pos);

if(PositionSelectByTicket(PosTicket) && PositionGetString(POSITION_SYMBOL) == _Symbol) 
{

long PosType = PositionGetInteger(POSITION_TYPE);
double PosSL = PositionGetDouble(POSITION_SL);
double PosTP = PositionGetDouble(POSITION_TP);
PosOpenPrice = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);

if(PosType == POSITION_TYPE_BUY)
{
GainRisk = (PosTP - PosOpenPrice) / (PosOpenPrice - PosSL);
TP = PosTP;
SL = PosSL;
}
...

 
Daniel Arges:

Hi coders,

This code is to get the TP, SL and Gain/Risk ratio from opened Positions. It works in Hedge but not in Netting accounts.

Can anybody help me?

Thank you in advance!


int pos_total = PositionsTotal();
if (pos_total > 0)

for(int pos = pos_total - 1; pos >= 0; pos--)

ulong PosTicket = PositionGetTicket(pos);

if(PositionSelectByTicket(PosTicket) && PositionGetString(POSITION_SYMBOL) == _Symbol) 
{

long PosType = PositionGetInteger(POSITION_TYPE);
double PosSL = PositionGetDouble(POSITION_SL);
double PosTP = PositionGetDouble(POSITION_TP);
PosOpenPrice = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);

if(PosType == POSITION_TYPE_BUY)
{
GainRisk = (PosTP - PosOpenPrice) / (PosOpenPrice - PosSL);
TP = PosTP;
SL = PosSL;
}
...


Try it:

   int pos_total=PositionsTotal();
   if(pos_total>0)
     {
      for(int pos=pos_total-1; pos>=0; pos--)
        {
/*ulong PosTicket=*/PositionGetTicket(pos);

         if(/*PositionSelectByTicket(PosTicket) && */PositionGetString(POSITION_SYMBOL)==_Symbol)
           {
            long PosType = PositionGetInteger(POSITION_TYPE);
            double PosSL = PositionGetDouble(POSITION_SL);
            double PosTP = PositionGetDouble(POSITION_TP);
            PosOpenPrice = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);

            if(PosType==POSITION_TYPE_BUY)
              {
               GainRisk=(PosTP-PosOpenPrice)/(PosOpenPrice-PosSL);
               TP = PosTP;
               SL = PosSL;
              }
           }
        }
     }
Reason: