Trailing stop in percentage instead of pips

 

Hi everybody


I would like to code a trailing stop in percentage instead of pips


Usually this is what i' am doing

input int InpTrailStop = 15; // Trail Stop (pips)
input int InpTrailStep = 2; // TrailStep (pips)

// in init section
ExtTrailStop  = InpTrailStop * m_adjusted_point;
ExtTrailStep = InpTrailStep * m_adjusted_point;

// 
void Trail()
  {
   if(ExtTrailStop==0)return;
   for(int i=PositionsTotal()-1;i>=0;i--) 
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
                if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingStop+ExtTrailingStep)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailStop+ExtTrailStep))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailStop),
                        m_position.TakeProfit()))
                        Print("Error when modify ",m_position.Ticket(),
                              " Erro code: ",m_trade.ResultRetcode(),
                              ", desc: ",m_trade.ResultRetcodeDescription());
                     continue;
                    }
              }
            else
              {
               if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailStop+ExtTrailStep)
                  if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailStop+ExtTrailStep))) || 
                     (m_position.StopLoss()==0))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailStop),
                        m_position.TakeProfit()))
                        Print("Error when modify",m_position.Ticket(),
                              " Erro code: ",m_trade.ResultRetcode(),
                              ", desc: ",m_trade.ResultRetcodeDescription());
                    }
              }

           }
  }

Now I'm trying to use same logic but in percentage .

void Trail()
  {
   if(ExtTrailStop==0) return;
   for(int i=PositionsTotal()-1;i>=0;i--) 
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if((m_position.PriceCurrent()-m_position.PriceOpen())/m_position.PriceOpen()>(ExtTrailStop+ExtTrailStep)*100)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailStop+ExtTrailStep))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailStop),
                        m_position.TakeProfit()))
                        Print("Error when modify ",m_position.Ticket(),
                              " Erro code: ",m_trade.ResultRetcode(),
                              ", desc: ",m_trade.ResultRetcodeDescription());
                     continue;
                    }
              }
            else
              {
               //...
              }

           }
  }

All i tried is a failure.
I'm not asking that we code it for me. I just want someone to direct my thinking on the right math formulas to use.


Someone can help me please ?

Reason: