![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
O que está errado com o código. Porque é que os erros"falharam no cancelamento da ordem #0 compra 0,00 no mercado [Pedido inválido]" continuam a aparecer
Onde está a selecção de posição?
O que é que as encomendas têm a ver com o comércio?
o que está a tentar fazer? fechar uma posição?
e o nome de encomenda_remove_mql_trade_request é um pesadelo.
onde está a selecção da posição?
o que é que as encomendas têm a ver com o comércio?
o que estás a tentar fazer de qualquer maneira? fechar uma posição?
e o nome order_remove_mql_trade_request é um pesadelo.
sim, preciso de esclarecer.
O objectivo do código -- se houver uma posição aberta, então cancelar todas as ordens de limite da mesma direcção da posição.
por exemplo, se uma posição estiver aberta BAY. então cancele todas as encomendas como limite de compra
Esqueci-me de seleccionar a posição =). Bem, o erro não é desse (verificado).
O que está errado com o código. Porque é que os erros"falharam no cancelamento da ordem #0 compra 0,00 no mercado [Pedido inválido]" continuam a surgir?
MqlTradeRequest order_remove_mql_trade_request = {0};
order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;
i = OrdersTotal();
if(i > 0){
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
for(i2 = 0;i2 <= i;i2++){
ul = OrderGetTicket(i2);
OrderSelect(ul);
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
order_remove_mql_trade_request.order = ul;
OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
for(i2 = 0;i2 <= i;i2++){
ul = OrderGetTicket(i2);
OrderSelect(ul);
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
order_remove_mql_trade_request.order = ul;
OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}
remover esses sinais de igualdade.
Já o fiz, não funciona.
Não é bom enganar os mais velhos.
Não é bom fazer batota. Não faço isso.
Acabei de verificar tudo com este código:
i = OrdersTotal();
if(i > 0){
PositionSelect(_Symbol);
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
for(i2 = 0;i2 < i;i2++){
ul = OrderGetTicket(i2);
OrderSelect(ul);
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
order_remove_mql_trade_request.order = ul;
OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
for(i2 = 0;i2 < i;i2++){
ul = OrderGetTicket(i2);
OrderSelect(ul);
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
order_remove_mql_trade_request.order = ul;
OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}
O resultado é o mesmo. o erro acima mencionado ocorre frequentemente
o resultado é o mesmo. o erro ocorre frequentemente
"frequentemente" é uma frase vazia.
Pensa que 2+2 é frequentemente igual a 4 ?
não seja preguiçoso - faça uma análise de envio e uma análise do erro devolvido.
verificar o que está a tentar remover?
há alguma encomenda disponível no momento do encerramento?
talvez esteja a tentar eliminar uma encomenda que já tenha sido eliminada.
Em terceiro lugar, quem lhe ensinou a fechar as ordens para que pense que pode fechar todas as ordens? Pensa que após cada um dos seus fechamentos, o OrdersTotal irá diminuir em 1. E ainda assim, irá vencer o seu i2++ até ganhar, até ao i primário.
Nem sequer se preocupa em verificar se OrderGetTicket ou OrderSelect devolve um erro
mau, muito mau.
É por causa de tais canetas que os nossos satélites saem de órbita.
"frequentemente" é uma frase vazia.
Pensa que 2+2 é frequentemente igual a 4 ?
não seja preguiçoso - faça uma análise de envio e uma análise de erro de retorno.
verificar o que está a tentar apagar?
existem encomendas disponíveis no momento do encerramento ?
talvez esteja a tentar eliminar uma encomenda que já tenha sido eliminada.
Em terceiro lugar, quem lhe ensinou a fechar ordens desta forma? Pensa que passa todas as ordens, mas não o faz. Após cada um dos seus fechamentos, OrdersTotal diminui em 1. E ainda assim vence o seu i2++ até ganhar, até ao i primário.
Nem sequer se preocupa em verificar se OrderGetTicket ou OrderSelect devolve um erro
Isto é mau, muito mau.
É por causa de tais canetas que os nossos satélites saem de órbita.
Tinha a certeza de que não era isso, caso contrário teria havido erros no teste não só com bylimits, mas também com selllimits. Obrigado por me tentarem ajudar e orientar.
Saudações, cavalheiros.
Este é um protótipo de uma função de janela que emula um toque de tecla:
A questão é que esta função é chamada em MT4 com int em vez de bytes. É o que parece:
Qual é o problema? Está a transferir pelo menos 4 bytes? Depende do hardware?Saudações, cavalheiros.
Este é um protótipo de uma função de janelas que emula um toque de tecla:
A questão é que esta função é chamada em MT4 com int em vez de bytes. É o que parece:
Qual é o problema? Está a transferir pelo menos 4 bytes? Depende do hardware?Ao passar parâmetros para uma função, o quantum mínimo é um número inteiro de 32 bits. Ou seja, bVk e bScan no seu caso serão convertidos para o tipo int antes de serem passados para a função
É por isso que os protótipos de funções dados acima não se contradizem