Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 29

 
yaaarik777:

Bom dia a todos! Você pode aconselhar como definir a eliminação de um pedido em uma EA?

A situação é a seguinte:

Colocamos 2ordens pendentes em diferentes direções, assim que uma delas aciona, a outra é removida e não é mais exibida.

Eu ficaria muito grato por qualquer ajuda.

Obrigado.

Por exemplo:

//-------------------------------------------------------------------+
//   удаляет отложенные ордера по type                               +
//+------------------------------------------------------------------+

void DeleteOrders(int type)
{
  int cnt = OrdersTotal();
  for (int i=cnt-1; i>=0; i--) {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
        //По желанию
        if (OrderSymbol() != Symbol()) continue;
        //По желанию
        if (OrderMagicNumber() != mn) continue;
        
        if (OrderType() != type) continue;
        
        if (type == OP_BUYSTOP || type == OP_SELLSTOP)
            {
            bool Del_1 = OrderDelete(OrderTicket());
               if(!Del_1)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
        if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
            {
            bool Del_2 = OrderDelete(OrderTicket());  
               if(!Del_2)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
  }
}
//+------------------------------------------------------------------+
 

E antes disso, determinar que existe uma posição e que é hora de matar a ordem extra

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Удаление ордеров, противоположных позиции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
  bool eb, es;

  switch (op) {
    case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
    default:      eb=ExistPositions(sy, OP_BUY , mn);
                  es=ExistPositions(sy, OP_SELL, mn); break;
  }

  if (eb) {
    DeleteOrders(sy, OP_SELLLIMIT, mn);
    DeleteOrders(sy, OP_SELLSTOP , mn);
  }
  if (es) {
    DeleteOrders(sy, OP_BUYLIMIT, mn);
    DeleteOrders(sy, OP_BUYSTOP , mn);
  }
}
 
Vladimir Zubov:

Para lhe dar um exemplo:

//-------------------------------------------------------------------+
//   удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type     +
//+------------------------------------------------------------------+

void DeleteOrders(int type)
{
  int cnt = OrdersTotal();
  for (int i=cnt-1; i>=0; i--) {
        if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
        //По желанию
        if (OrderSymbol() != Symbol()) continue;
        //По желанию
        if (OrderMagicNumber() != mn) continue;
        
        if (OrderType() != type) continue;
        
        if (type == OP_BUYSTOP || type == OP_SELLSTOP)
            {
            bool Del_1 = OrderDelete(OrderTicket());
               if(!Del_1)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
        if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
            {
            bool Del_2 = OrderDelete(OrderTicket());  
               if(!Del_2)
                  Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
               else
                  Print("Ордер успешно удален.");
            }
  }
}
//+------------------------------------------------------------------+

O que é a segregação por tipo? O que ele faz? Faria alguma diferença se fosse assim escrito?

if (type > 1 && type < 6)
   {
     bool Del_1 = OrderDelete(OrderTicket());
     if(!Del_1)
     Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
     else
     Print("Ордер успешно удален.");
   }
 
Por que as barras são diferentes em mt4 e mt5 no meu iPhone? Embora os horários de abertura e fechamento dos bares sejam os mesmos. Isto é claramente um obstáculo porque a linha não foi quebrada ontem às 14:00h na MT4.
Arquivos anexados:
image.png  82 kb
image.png  81 kb
 
Boa tarde! poderia me dizer, por favor, que eu baixei a versão mt4 636 em andróide, mas ela não vê a lista de corretores. A versão terminal não é mais suportada?(( Em caso afirmativo, onde posso fazer o download de uma versão funcional?
 
MetaGSss:
Por que as barras são diferentes em mt4 e mt5 no meu iPhone? Embora os horários de abertura e fechamento dos bares sejam os mesmos. Obviamente, isso evita que você atravesse a linha ontem às 14:00 na MT4.
Eles querem que você saiba com antecedência para onde o preço irá
 
MetaGSss:
Por que as barras são diferentes em mt4 e mt5 no meu iPhone? Embora os horários de abertura e fechamento dos bares sejam os mesmos. Isto obviamente interfere porque a linha não rompeu ontem às 14:00h no mt4.
a propagação é para pessoas extremas, é claro))))
 
MetaGSss:
Por que as barras são diferentes em mt4 e mt5 no meu iPhone? Embora os horários de abertura e fechamento dos bares sejam os mesmos. Obviamente interfere porque a linha não foi quebrada ontem às 14:00h na MT4.
os símbolos também são ligeiramente diferentes)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

pagamento por cordas // nome do arquivo

)

; ..

.

Ou também é convertido de alguma forma?

Declare

bool PlaySound( no cabeçalho do programa - você terá a oportunidade de ligar e desligar o som no arquivo externo do set bool Play = TRUE;

então, o que será impresso? E sob quais condições?

Qual é o objetivo desta ação? Para tocar um som quando o pedido é fechado e escrever um comentário (em TP ou SL) ?






ObrigadoA1exPit pela resposta detalhada e clara ... "O objetivo da ação" é soar os eventos de "fechamento de ordens na Takeprofit e Staploss" = um som diferente para cada ...
 

Saudações. Eu perguntei por aí, mas ainda não encontrei uma resposta. Você poderia me dizer por que com a seguinte entrada

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

O sistema gera constantemente erros

: bilhete inválido para OrderDeletefunction

OrderDelete error 4051

De acordo com o livro de referência, é

Valor inválido do parâmetro de função

Embora os parâmetros pareçam ser os mesmos.

Embora se você remover a condição e deixar apenas

OrderDelete(ticketD);

OrderDelete(ticketUP);

ele apaga com sucesso (mas eu preciso dele por condição). O que eu faço de errado? Aqui está a coisa toda:

https://www.mql5.com/ru/forum/160683/page31#comment_3911573

O Expert Advisor lê os valores mínimos e máximos dos últimos X bares e faz pedidos por esses valores. Então, se o máximo ou mínimo diminuiu, devemos apagar a ordem correspondente e abri-la usando os novos dados.

Comecei agora a estudá-la e, em vez de modificá-la, a excluí para estudar a função e me perguntei por que ela não funcionava.

Razão: