Erro ao enviar ordem do tipo Stop_Limit: erro No Money

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

Olá estou com um problema ao enviar uma ordem do tipo Stop_Limit com mini Índice. Quando envio com SL e TP configurados dá erro "Invalid Stops" e quando deixo sem dá o erro: "No money";


Segue um pedaço do código para análise:


 

MqlTradeRequest   requisicao= {0};   // requisição

  MqlTradeResult    resposta= {0};     // resposta


  ZeroMemory(requisicao);

  ZeroMemory(resposta);


  if(posAberta())

  {

    Alert("Não será possível realizar a compra.Existe uma posição em aberto.");

    return;

  }


  requisicao.action       = TRADE_ACTION_PENDING;                            // Executa ordem a mercado

  requisicao.magic        = magic_number;                                 // Nº mágico da ordem

  requisicao.symbol       = _Symbol;                                      // Simbolo do ativo

  requisicao.volume       = Qt_Contratos;                                  // Nº de Lotes

  requisicao.price        = m_symbol.NormalizePrice(tick.ask - CompraDiminuirValor * _Point);   

  requisicao.sl           = 0;//m_symbol.NormalizePrice(tick.ask - CompraStopLoss * _Point);

  requisicao.tp           = 0;//m_symbol.NormalizePrice(tick.ask + CompraTakeProft * _Point);

  requisicao.deviation    = 0;                                            // Desvio Permitido do preço

  requisicao.type         = ORDER_TYPE_BUY_STOP_LIMIT;                     // Tipo da Ordem

  requisicao.type_filling = ORDER_FILLING_RETURN;//ORDER_FILLING_FOK;

  requisicao.type_time    = ORDER_TIME_DAY;

  requisicao.stoplimit    = m_symbol.NormalizePrice(tick.ask+DesvioStopLimiteCompra * _Point);


  if(OrderSend(requisicao,resposta))

  {

    if(resposta.retcode==10008 || resposta.retcode==10009)

    {

      Print("Ordem de Compra executada com sucesso!");

    }

    else

    {

      Print("Erro ao enviar Ordem Compra. Erro = ",GetLastError());

      ResetLastError();

    }

  }

  else

  {

      Print("Erro = ",GetLastError());

      ResetLastError();

  }


desde já agradeço a atenção.

Thiago Duarte
21975
Thiago Duarte  
Olá Cristiano. Primeiramente, quando for postar algum código utilize a função "código" quando estiver digitando seu post (Alt+S). Isso deixa o post mais organizado e impede que o mesmo seja excluído por um moderador.
Com respeito a sua pergunta por que não utiliza a biblioteca padrão do MT, como a "Trade.mqh"?
Cristiano Santos
43
Cristiano Santos  
Obrigado pela dica, quando à postagem de código. Sou novo aqui. Sou novo também na linguagem e não conheço essa biblioteca.
Thiago Duarte
21975
Thiago Duarte  
Cristiano Santos:
Obrigado pela dica, quando à postagem de código. Sou novo aqui. Sou novo também na linguagem e não conheço essa biblioteca.

Alguns moderadores sequer te informam e já apagam seu post, por isso avisei :)

Você pode utilizar a bilioteca padrão Trade, ela facilita o gerenciamento das operações. Por exemplo, você pode abrir uma operação com uma linha de código em vez de programar muitas coisas que você fez no seu código.

Essa é a página da biblioteca: https://www.mql5.com/pt/docs/standardlibrary/tradeclasses/ctrade

Cristiano Santos
43
Cristiano Santos  
Agradeço a colaboração. Consegui resolver mudando os tipos de ordem para Buy_Limit e Sell_Limit, visto que o preço da minha ordem sempre está acima do mercado para venda e abaixo do mercado para compra. Nas ordens do tipo Stop_Limit é ao contrário, o nível de stop tem que está abaixo do mercado(Bid) para venda e acima do mercado(Ask) para compra, caso contrário dá erro e nem é executada.
Para adicionar comentários, por favor Faça o login ou registrar