Limite de posição aberta.

 

Sou iniciante e quero colocar um limite de posição aberta por ativo.
Observação: Não sei se é relevante mas comprei um código onde eu coloco vários ativos numa estrategia só.

void ModifySellTP(string inSymbol)
{
  int sellnumber = 0;
  double total  = 0;
  double averageprice = 0;
  int newticket = 0;
  double tp = 0;
  
  for(int i=0;i < PositionsTotal();i++)
  {
      ulong ticket = PositionGetTicket(i); 
      if(PositionGetSymbol(i) == inSymbol
        && PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_SELL
        && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
      {
        sellnumber++;
        total = total + PositionGetDouble(POSITION_PRICE_OPEN);
        newticket = ticket;
        //ExtTrade.PositionClose(ticket);
      }
  }
  
  if(sellnumber > 1 && GVGet("TP change" + IntegerToString(newticket)) <= 0)
  {
    averageprice = total / sellnumber;
    for(int i= PositionsTotal() - 1;i >= 0;i--)
    {
      ulong ticket = PositionGetTicket(i); 
      if(PositionGetSymbol(i) == inSymbol
        && PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_SELL
        && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
      {
        if(TP > 0)
        {
           tp = averageprice - TP  * SymbolInfoDouble(inSymbol,SYMBOL_POINT);
        }
        else if(TPPercent > 0)
        {
           tp = averageprice - TPPercent  * averageprice / 100;
        }
        else
        {
           tp = 0;
        }
        ExtTrade.PositionModify(ticket,PositionGetDouble(POSITION_SL), tp);
      }
    }
  }
}

void ReSetGV_Value(string inSymbol,int inMagic)
{
   int buynumber = 0;
   int sellnumber = 0;
   for(int i=0;i < PositionsTotal();i++)
   {
      ulong ticket = PositionGetTicket(i); 
      if(PositionGetSymbol(i) == inSymbol
        && PositionGetInteger(POSITION_MAGIC) == inMagic)
      {
        if(PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_BUY)
        {
          buynumber++;
        }
        else if(PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_SELL)
        {
          sellnumber++;
        }
      }
   }
   if(buynumber == 0)
   {
     GVSet("Buy Band1" + inSymbol,0);
     GVSet("Buy Band2" + inSymbol,0);
   }
   if(sellnumber == 0)
   {
     GVSet("Sell Band1" + inSymbol,0);
     GVSet("Sell Band2" + inSymbol,0);
   }
}

void ModifyBuyTP(string inSymbol)
{
  int buynumber = 0;
  double total  = 0;
  double averageprice = 0;
  int newticket = 0;
  double tp = 0;
  
  for(int i=0;i < PositionsTotal();i++)
  {
      ulong ticket = PositionGetTicket(i); 
      if(PositionGetSymbol(i) == inSymbol
        && PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_BUY
        && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
      {
        buynumber++;
        total = total + PositionGetDouble(POSITION_PRICE_OPEN);
        newticket = ticket;
      }
  }
  
  
  
  if(buynumber > 1 && GVGet("TP change" + IntegerToString(newticket)) <= 0)
  {
    averageprice = total / buynumber;
    for(int i= PositionsTotal() - 1;i >= 0;i--)
    {
      ulong ticket = PositionGetTicket(i); 
      if(PositionGetSymbol(i) == inSymbol
        && PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_BUY
        && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
      {
        if(TP > 0)
        {
           tp = averageprice + TP  * SymbolInfoDouble(inSymbol,SYMBOL_POINT);
        }
        else if(TPPercent > 0)
        {
           tp = averageprice + TPPercent  * averageprice / 100;
        }
        else
        {
           tp = 0;
        }
        ExtTrade.PositionModify(ticket,PositionGetDouble(POSITION_SL), tp);
      }
    }
  }
}
 
Silverveins:

Sou iniciante e quero colocar um limite de posição aberta por ativo.
Observação: Não sei se é relevante mas comprei um código onde eu coloco vários ativos numa estrategia só.

Contrate um desenvolvedor na área de Freelance.

Razão: