Perguntas de um "boneco" - página 166

 
Alphazavr:

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.

 
sergeev:

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).

 
Alphazavr:

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 estes iguais.
 
sergeev:
remover esses sinais de igualdade.
Já fiz isso, não funciona. Não sei onde está o erro. Além disso, não compreendo porque é que estes erros são apenas com ordens BAY LIMIT, não há erros com Limites de Venda.
 
Alphazavr:
Já o fiz, não funciona.
Não é bom enganar os mais velhos.
 
sergeev:
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

 
Alphazavr:

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.

 
sergeev:

"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:

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

A questão é que esta função é chamada em MT4 com int em vez de bytes. É o que parece:

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
Qual é o problema? Está a transferir pelo menos 4 bytes? Depende do hardware?
 
220Volt:

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

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
Razão: