Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 30
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
Estou apenas aprendendo, estou tentando usar o guia, mas percebo que estou recebendo alguns disparates, gostaria de ver um exemplo de como fazê-lo.
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.
Algo como isto
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"Vamos continuar procurando" precisa ser removido!
Você pode editar suas próprias postagens no fórum. Tudo o que você escreveu em posts separados acima pode caber em um só.
Olá! Introduzimos uma rede de arrasto takeprofit usando o seguinte algoritmo:
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==verdadeiro)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset& OrderType()==OP_BUY)
{
RefreshRates();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT CONDITION;
MODIFICAÇÃO DO PEDIDO A UM NOVO TAKEPROFIT;
}
}
}
}
Mas o limite de tempo não funciona por alguma razão e acontece que se uma posição não for fechada no prazo atual, ela também arrasta no próximo prazo se as condições forem cumpridas.
O que há de errado com meu último if()?
Olá! introduzi uma rede de arrasto takeprofit usando o seguinte algoritmo:
if(total>0)
{for (int i=OrdensTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==verdadeiro)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
CONDIÇÃO DE TRAILING TP;
{ MODIFICAÇÃO DA ORDEM PARA O NOVO TAKEPROFIT;
}
}
}
}
Mas por alguma razão o limite de tempo não funciona, e acontece que se a posição não for fechada no período de tempo atual, ela também se arrasta no próximo, se as condições forem cumpridas.
O que há de errado com meu último if()?
Bem, eu não sei, ainda não vi nada de errado aí. Retirei a verificação redundante do número de pedidos (já está presente nas condições do loop) e acrescentei uma verificação para ambos os tipos de posições (Compra e Venda)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Onde // as condições de arrasto e modificação, insira Print() com os valores das variáveis de tempo e veja o que diz o registro.
Não sei, ainda não vejo o que há de errado com isso com um olhar rápido. Removi verificação desnecessária do número de pedidos (já está lá em condições de ciclo) e acrescentei verificação em ambos os tipos de posições (Compra e Venda)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Onde // arrasto e condições de modificação, insira Print() com valores de variáveis de tempo e veja o que diz o registro.
Tenho condições diferentes para VENDER, por isso só mostrei COMPRAR.
" com variáveis de tempo" - você quer dizer TimeCurrent()? Desculpe se isto o surpreende - eu sou um zero-minus na programação.
E eu não entendo isto -OrderType()>OP_SELL. Por que >? OrderType OP_SELL tem valor = 1 eOP_BUY = 0, portanto deve ser <= ? Obrigado.
Tenho diferentes condições de arrasto para a SELL, por isso só mostrei o BAI.
" com valores variáveis de tempo" - você quer dizer TimeCurrent()? Desculpe se isto o surpreende - eu sou um zero-minus na programação.
E eu não entendo isto -OrderType()>OP_SELL. Por que >? OrderType OP_SELL tem valor = 1 eOP_BUY = 0, portanto deve ser <= ? Obrigado.
Saudações. Você poderia me dizer por que, no caso da 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 a função OrderDelete
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 estou fazendo de errado?
Saudações. Você poderia me dizer por que, no caso da 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 a função OrderDelete
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 estou fazendo de errado?