Latest Position type

Peter Kaiza  

The code below correctly identifies the position type when there is only one trade opened, however if there are more than one position opened, the code does not return the latest position

type. How does i modify it to identify the position type of the LATEST opened trade if there are more than one trade? 


double POSITTYPE()
  {

   double POSX=0;
   
   string   symbol;
   symbol=PositionGetSymbol(POSITION_SYMBOL);

    for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)) && 
            PositionGetString(POSITION_SYMBOL)==_Symbol && 
            PositionGetInteger(POSITION_MAGIC)==MagicNumber)
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
               POSX=1;
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
               POSX=2;
           
        }
     }
   return( POSX);
  }

Peter Kaiza  
Vladimir Karputov:
It is necessary to take into account the position time and store it in a variable. Implementation example: Last position type:


double POSITTYPE()
  {

   datetime lastTime  = 0;

 long position_time = PositionGetInteger(POSITION_TIME);
   double POSX=0;
   
   string   symbol;
   symbol=PositionGetSymbol(POSITION_SYMBOL);

    for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)) && 
            PositionGetString(POSITION_SYMBOL)==_Symbol && 
            PositionGetInteger(POSITION_MAGIC)==MagicNumber&& position_time  > lastTime)
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
               POSX=1;
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
               POSX=2;
           
        }
     }
   return( POSX);
  }
  

The code has been amended as above but sill does not work

La_patates  
Peter Kaiza:

The code has been amended as above but sill does not work

1. POSITION_TIME returns a datetime type.
2. You are assigning that value before selecting your position
3. You never assign last_time a value so you're always comparing against 0
Vladimir Karputov  
Peter Kaiza:

The code has been amended as above but sill does not work

Forum on trading, automated trading systems and testing trading strategies

Latest Position type

Vladimir Karputov, 2020.10.29 15:03

It is necessary to take into account the position time and store it in a variable. Implementation example: Last position type:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ENUM_POSITION_TYPE   last_pos_type  = WRONG_VALUE;
   ulong                last_pos_time  = 0;            // "0" -> D'1970.01.01 00:00';
   string               text           = "";
//---
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            ulong pos_time=m_position.TimeMsc();
            if(pos_time>last_pos_time)
              {
               last_pos_type=m_position.PositionType();
               last_pos_time=pos_time;
               //---
               text=EnumToString(last_pos_type)+" | "+m_position.Symbol()+" | "+
                    IntegerToString(m_position.Ticket())+" | "+TimeToString(m_position.Time(),TIME_DATE|TIME_SECONDS)+" | "+
                    DoubleToString(m_position.Volume(),2);
              }
           }
   Comment(text);
  }
Peter Kaiza  
Vladimir Karputov:

How do  implement this?


           ulong pos_time=m_position.TimeMsc();
            if(pos_time>last_pos_time)
              {
               last_pos_type=m_position.PositionType();
               last_pos_time=pos_time;
Reason: