- www.mql5.com
- Como sair de operações com TP e SL em valores fixos na B3
- Minha EA faz uma entrada dupla
- A tarefa de busca de pedidos
Estou usando a classe CTrade (https://www.mql5.com/pt/docs/standardlibrary/tradeclasses/ctrade), mas, quando opero na real a ordem que o E.A pendura para ser meu TP ou SL é atingida antes, por exemplo: de 5 a 15 pontos a mais ou a menos. Existe uma forma de garantir que ele saia exatamente no valor que eu pendurei?
Olá Rodrigo,
o fato de você usar a classe CTrade não tem nada a ver com o problema. Use ordens LIMIT para sair da operação no preço que você quer!
Olá Rodrigo,
o fato de você usar a classe CTrade não tem nada a ver com o problema. Use ordens LIMIT para sair da operação no preço que você quer!
Bom dia Rogério ! Obrigado pela resposta.
Eu entro a mercado na operação, com trade.sell por exemplo:
trade.Sell(LoteEntrada, NULL, bid, bid+(100), (bid-(100)), "VENDIDO");
Escolhendo o Dessa forma ele "pendura" as ordens de SL e TP (mas mesmo assim ele acaba saindo de 5 a 15 pts antes ou depois). Penso que desta forma as ordens de saida se comportam como se fosse uma LIMIT, ou não?
Desde já agradeço.
Bom dia,
as considerações que vou colocar são para conta REAL e modo de preenchimento FOK ou RETURN e como exemplo vou usar uma ordem de compra de 70 ações VALE3F a ASK=47,05.
1º Uma ordem a mercado pode ser executada a vários preços.
Se o preço subir antes da ordem chegar ao servidor/b3 a ordem fica na pedra, caso contrário a ordem será executada a vários preços até o preenchimento das 70 ações chegando ao um preço médio.
Veja o book de ofertas de VALE3F para visualizar o que estou escrevendo.
2º O SL e TP serão calculados pelo ASK e não pelo preço médio aqui já tem uma diferença. Pegou?
3º O SL e TP são ordens start stop loss e start stop gain, ou seja você está programando o servidor MT5 para enviar uma ordem a mercado quando o preço do último negócio bater o SL ou TP aí voltamos ao que foi escrito primeiro item.
4º As Ordens LIMIT são colocadas nos livros da B3, ou seja garante o preço mas não garante o preenchimento.
Bom dia,
as considerações que vou colocar são para conta REAL e modo de preenchimento FOK ou RETURN e como exemplo vou usar uma ordem de compra de 70 ações VALE3F a ASK=47,05.
1º Uma ordem a mercado pode ser executada a vários preços.
Se o preço subir antes da ordem chegar ao servidor/b3 a ordem fica na pedra, caso contrário a ordem será executada a vários preços até o preenchimento das 70 ações chegando ao um preço médio.
Veja o book de ofertas de VALE3F para visualizar o que estou escrevendo.
2º O SL e TP serão calculados pelo ASK e não pelo preço médio aqui já tem uma diferença. Pegou?
3º O SL e TP são ordens start stop loss e start stop gain, ou seja você está programando o servidor MT5 para enviar uma ordem a mercado quando o preço do último negócio bater o SL ou TP aí voltamos ao que foi escrito primeiro item.
4º As Ordens LIMIT são colocadas nos livros da B3, ou seja garante o preço mas não garante o preenchimento.
Bom dia Rogério, obrigado pela resposta.
Então, eu tentei usar Orders Limit uma vez, entretanto, tive problemas quando enviava uma ordem e o preço não ia até ela. Neste caso, eu precisava deletar a ordem "Pendurada", mas não achei nenhum lugar ensinando como fazer isso. Agora nesse caso de enviar ordens Limit para Gain e Loss eu precisaria cancelar uma logo após o acionamento da outra. Realmente seria muito melhor e ajudaria muito na minha estratégia. Como eu poderia fazer isso, você tem algum exemplo que possa me passar? Obrigado!
Bom dia Rogério, obrigado pela resposta.
Então, eu tentei usar Orders Limit uma vez, entretanto, tive problemas quando enviava uma ordem e o preço não ia até ela. Neste caso, eu precisava deletar a ordem "Pendurada", mas não achei nenhum lugar ensinando como fazer isso. Agora nesse caso de enviar ordens Limit para Gain e Loss eu precisaria cancelar uma logo após o acionamento da outra. Realmente seria muito melhor e ajudaria muito na minha estratégia. Como eu poderia fazer isso, você tem algum exemplo que possa me passar? Obrigado!
Olá Rodrigo,
não se fie nessa solução é só exemplo e não está completo!
//+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { if(trans.type==TRADE_TRANSACTION_DEAL_ADD) { long deal_entry =0; string deal_symbol =""; long deal_magic =0; if(HistoryDealSelect(trans.deal)) { deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); if(deal_symbol==Symbol() && deal_magic==magicNumber && (ENUM_DEAL_ENTRY)deal_entry==DEAL_ENTRY_IN) { flagOnTrade=true; } if(deal_symbol==Symbol() && deal_magic==magicNumber && (ENUM_DEAL_ENTRY)deal_entry==DEAL_ENTRY_OUT) { flagOnTrade=false; //--- Acabou de fechar uma posição DoCloseOrders(); } } } } //+------------------------------------------------------------------+ void DoCloseOrders() { int total=OrdersTotal(); for(int i=0;i<total;i++) { ulong _Ticket=OrderGetTicket(i); if(OrderSelect(_Ticket)) if(OrderGetString(ORDER_SYMBOL)==cSymbol.Name() && OrderGetInteger(ORDER_MAGIC)==magicNumber) cTrade.OrderDelete(_Ticket); } } //+------------------------------------------------------------------+
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso