[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 595
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
Instalou o MetaTrader 4, abriu uma conta demo. Tentei abrir/fechar pedidos. Como posso agora fazer o próprio terminal acionar uma ordem de venda quando o preço sobe e uma ordem de compra quando desce, usando informações como "você precisa de uma diferença de 2 velas para fechar o pedido antigo e abrir um novo"?
Boa noite. Pergunta: Quando eu fecho parte de um comércio, a EA abre um novo comércio com um novo bilhete. O magik da nova ordem permanece o mesmo?
Sim
ALGUÉM PODE EXPLICAR POR QUE TODOS OS NEGÓCIOS ESTÃO APENAS NA COMPRA? Eu não tenho nenhum negócio na VENDA, o indicador de bandeira antes de se() na VENDA é sempre 1 por alguma razão, PORQUÊ???? é longo&curto em configurações.
TAMBÉM QUERO PERGUNTAR POR QUE DEIXO MINHA EA PERDER ALGUMAS POSIÇÕES QUE EU PODERIA ABRIR? NÃO POSSO ENTRAR!
Aqui está o código(a declaração das variáveis é truncada):
double upfr,dnfr=0,0;// níveis dos últimos fractais
int flag=0;
int start() //open on the fractal break and close after s candles
{
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)!=0)
{
upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)==0)
{
upfr=0;
}
if(iFractals(Symbol(),PERÍODO_H1,MODE_LOWER,4)!=0)
{
dnfr=iFractals(Symbol(),PERÍODO_H1,MODE_LOWER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)==0)
{
dnfr=0;
}
//OPEN ORDERS BY PROBIT
H=iHigh(Symbol(),PERIOD_H1,1);
L=iLow(Symbol(),PERIOD_H1,1);
tOpen=iTime(Symbol(),PERIOD_H1,1);
if(H>upfr && flag==0) // se o nível fractal estiver acima e o nível fractal for ultrapassado
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,NULL,NULL);
flag=1;
}
if(L<dnfr)
Print(L," -L dnfr- ",dnfr," flag- ",flag);
if(L<dnfr && flag==0)// se o nível fractal estiver abaixo e o nível fractal estiver abaixo
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_SELLL,lots,Bid,Bid,slippage,NULL,NULL);
flag=1;
}
// PEDIDOS FECHADOS POR FIM DO TEMPO
if(Time[1]>=tClose && flag===1)// se o tempo designado tiver passado
{
Print("CLOSE FUNCTION");
OrClose();
flag=0;
upfr=0;
dnfr=0;
}
return(0);
}
Tropeçou nisto...
Ao apagar uma EA, ela tem que apagar ordens pendentes
Há duas variantes
1. Ele simplesmente apaga tudo...
int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}
//----
return(0);
}
2. Seletivamente...
int deinit()
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);
return(0);
}
Agora, o senão é que na demonstração, funciona bem em ambos os casos. Mas na vida real... apenas um lote pendente é removido por algum motivo. Pergunta - quem sabe por quê?
Tropeçou nisto...
Ao apagar uma EA, ela tem que apagar ordens pendentes
Há duas variantes
1. Ele simplesmente apaga tudo...
int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}
//----
return(0);
}
2. Seletivamente...
int deinit()
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);
return(0);
}
Agora, o senão é que na demonstração, funciona bem em ambos os casos. Mas na vida real... apenas um lote pendente é removido por algum motivo. A pergunta - quem sabe por quê?
IMHO "não tem tempo suficiente":
O tempo de execução de uma função especial deinit() é limitado a 2,5 segundos. Se o código de uma função especial deinit() for executado por mais tempo do que o tempo especificado, o terminal do cliente encerrará forçosamente a função especial deinit() e o programa como um todo.
IMHO "não a tempo":
A função especial deinit() tem um tempo de execução de 2,5 segundos. Se o código na função deinit() especial durar mais do que este tempo, o terminal do cliente terminará à força a função deinit() especial e o programa como um todo.
:(
Isto é, não há esperança? Grosso modo, começamos a usar o roteiro para fechar as ordens pendentes... E depois fechamos a coruja... Bela auto-comercialização...
Mais uma pergunta - o assistente colocou os pingentes https://forum.mql4.com/ru/42300/page588
Quando eu altero o prazo, as ordens são apagadas por algum motivo.
:(
Então não há esperança? Grosso modo, começamos com um roteiro para fechar os pingentes... e depois fechamos a coruja... Bela auto-comercialização...
Mais uma pergunta - o assistente colocou os pingentes https://forum.mql4.com/ru/42300/page588
Quando se muda o cronograma, as ordens são apagadas por algum motivo.
Ou o script ou alguma outra forma de comandar a EA para encerrar sua operação (por exemplo, através de uma variável global)
mudança de cronograma = reinício do Expert Advisor
ou um script, ou alguma outra forma de comandar a EA para terminar (por exemplo, através de uma variável global)
mudança de cronograma = reinício do Expert Advisor
Hmm... não há como contornar a mudança de prazo?