Verificação de posição mini índice

Para adicionar comentários, por favor Faça o login ou registrar
Willian De Caldas Leite
22
Willian De Caldas Leite  

Estou com  problema, na conta demo o EA funciona normal mas no testador de estrategia ele abre infinitas ordens ate meu saldo zerar.


Estou usando esse estrutura para abrir somente uma ordem.

if(SemPosicao() && SemOrdem()){
  
   // Aqui faço a execução da ordem send


   }

      bool SemPosicao()
     {
     return !PositionSelect(_Symbol);
      }
      
      
      bool SemOrdem()
      { 
      for(int i=OrdersTotal()-1; i>=0; i--)
   {
      OrderGetTicket(i);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
         return false;
   }
   return true;
      
      }

As duas funções tem que retornar falso caso alguma posição ou ordem estiver aberta, mas isso não acontece. 

Coloquei um Print pra verificar o estado enquanto o testador de estrategia estava testando e o retorno é sempre true mesmo com varias posicões aberta.

Cid Ougaske
3820
Cid Ougaske  
Willian De Caldas Leite:

Estou com  problema, na conta demo o EA funciona normal mas no testador de estrategia ele abre infinitas ordens ate meu saldo zerar.


Estou usando esse estrutura para abrir somente uma ordem.

As duas funções tem que retornar falso caso alguma posição ou ordem estiver aberta, mas isso não acontece. 

Coloquei um Print pra verificar o estado enquanto o testador de estrategia estava testando e o retorno é sempre true mesmo com varias posicões aberta.

olá, sugestão é verificar se realmente existe posição para o ativo assim como fez com as ordens pendentes, mais seguro.

bool SemPosicao()
  {

   for(int i=PositionsTotal()-1;i>=0;i--)
   {
     string t_symbol=PositionGetSymbol(i);
     ulong ticket=PositionGetTicket(i);
     
     if(PositionSelectByTicket(ticket))    // se o ticket foi confirmado
         if(PositionGetInteger(POSITION_MAGIC)==m_magic)   // m_magic é o numero magico de seu EA se vc o utiliza
            return false;
   }

   return true;
  }


Arthur Albano
732
Arthur Albano  
Willian De Caldas Leite:

Estou com  problema, na conta demo o EA funciona normal mas no testador de estratégia ele abre infinitas ordens ate meu saldo zerar.


Estou usando esse estrutura para abrir somente uma ordem.

As duas funções tem que retornar falso caso alguma posição ou ordem estiver aberta, mas isso não acontece. 

Coloquei um Print pra verificar o estado enquanto o testador de estratégia estava testando e o retorno é sempre true mesmo com varias posições aberta.

Em contas netting há somente uma posição para cada ativo. Talvez você queira dizer ordens abertas.

int SymbolOrdersTotal(const string &SYMBOL)
{
        int result = 0;
        for(int i=0;i<OrdersTotal();i++)
        {
                if(
                        OrderSelect(OrderGetTicket(i)) &&
                        (OrderGetString(ORDER_SYMBOL)==SYMBOL)
                ) result = result + 1;
        };
        return(result);
};
Odon De Gois Nogueira Neto
113
Odon De Gois Nogueira Neto  

vc pode verificar se existe posicoes abertas 


if (PositionsTotal() > 0)

//existe posicao aberta

else

// nao existe posicao aberta

Para adicionar comentários, por favor Faça o login ou registrar