[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

 
Wanderer1000:
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"?
Escreva um EA, talvez)
 
nadya:

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);
}

Arquivos anexados:
 

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ê?

 
DOCTORS:

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.

 
ilunga:

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.

 
DOCTORS:

:(

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

 
ilunga:

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

A variável funciona - muito obrigado!
Hmm... não há como contornar a mudança de prazo?
 
Membros do fórum, por favor, ajudem na modificação de pedidos
 
Pergunta: no modo de teste visual as linhas indicadoras são traçadas apenas no final do teste, é este o caso para todos ou estou fazendo algo errado?