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
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);
}
}
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?
{
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. Obviamente, isso evita que você atravesse a linha ontem às 14:00 na MT4.
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.
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.
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
pagamento por cordas // nome do arquivo
)
; ..
.Ou também é convertido de alguma forma?
Declare
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) ?
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.