Código Break Even

 

Senhores, poderiam me ajudar no meu código de break even?

Não sei pq raios não esta funcionando no forex.


void breakeven()
{
double Diferenca=0;
   if(PositionSelect(_Symbol))
      for(int i = 0 ; i < PositionsTotal() ; i++)
         if(posicao.SelectByIndex(i))
           {
            if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_BUY)
              {
               Diferenca=simbolo.Ask() - posicao.PriceOpen();
               if(Diferenca > gatilhodeBE && posicao.StopLoss() < posicao.PriceOpen())
                 {
                  double precoBE = simbolo.NormalizePrice(preco_abertura + (cobBE+spreadAtual) * _Point);

                  if(trade.PositionModify(ticket, precoBE,PositionGetDouble(POSITION_TP)))
                     beAtivo=true;
                  Print("BREAK EVEN ATIVADO");
                 }
              }
            if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL)
              {
               Diferenca=posicao.PriceOpen() - simbolo.Bid();
               if(Diferenca > gatilhodeBE && posicao.StopLoss() > posicao.PriceOpen())
                 {
                  double precoBE = simbolo.NormalizePrice(preco_abertura - (cobBE+spreadAtual) *_Point);

                  if(trade.PositionModify(ticket, precoBE,PositionGetDouble(POSITION_TP)))
                     beAtivo=true;
                  Print("BREAK EVEN ATIVADO");
                 }
              }
           }

  }
 
João Bernardes:

Senhores, poderiam me ajudar no meu código de break even?

Não sei pq raios não esta funcionando no forex.


Eu tenho tres consideracoes, primeiro abra a propriedade do simbolo e veja a distancia minima permitida para colocar o stop. Algumas exigem um valor bastante largo, voce pode recuperar ele programaticamente via SymbolInfoInteger passando SYMBOL_TRADE_STOPS_LEVEL [1]. A segunda é que voce no PositionGetInteger esta comparando contra o ENUM de order type e nao position type. Troque ORDER_TYPE_BUY e ORDER_TYPE_SELL por POSITION_TYPE_BUY e POSITION_TYPE_SELL [2]. A terceira é uma falha muito comum, ask é melhor venda e bid é a melhor compra. Se voce fosse entrar na operação estaria tudo certo, entretanto voce quer sair dela! Entao, na compra nos iremos vender na melhor compra e, da mesma maneira, a saida da venda é a compra na melhor venda.

[1] https://www.mql5.com/pt/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double

[2] https://www.mql5.com/pt/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades do Ativo
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades do Ativo
  • www.mql5.com
Propriedades do Ativo - Estado de Ambiente - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5