{
if(OrdersTotal()==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}
}
É uma solução, mas não é a melhor solução, como você aprenderá se prosseguir.
Mas ela pode ajudá-lo neste momento.
É uma solução, mas não é a melhor solução, como você aprenderá se prosseguir.
Mas ela pode ajudá-lo neste momento.
sim, ele resolveu o problema no tópico, mas quando fecha também cria uma nova ordem, se ainda estiver acima da nuvem. Você poderia me ajudar a resolver este novo problema?
Como bloquear todas as novas ordens depois de fechar com sucesso a primeira?
Bem, você pode criar uma bandeira.
Então você pode definir o valor para uma quando o pedido for feito.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
order=1;
}
}
Mas isso lhe dará o aviso de que você precisa verificar o valor de retorno da função de fim de pedido para
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
int ticket=OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if(ticket!=-1)
{
order=1;
}
}
}
}
Por que não definir a bandeira dependendo se o pedido foi feito com sucesso ou não?
Nesse caso, se seu pedido falhar, ele continuará a tentar.
sim, ele resolveu o problema no tópico, mas quando fecha também cria uma nova ordem, se ainda estiver acima da nuvem. Você poderia me ajudar a resolver este novo problema?
Como bloquear todas as novas ordens depois de fechar com sucesso a primeira?
Como Marco já aludiu, você provavelmente encontrará outros problemas.
E se houver uma ordem aberta em outro símbolo?
E se houver ordens sendo controladas por outro EA?
E se houver ordens pendentes?
E se o gatilho ainda estiver ativo quando você fechar a primeira?
Em resposta a esta última, você poderia usar uma bandeira, como sugerido por Marco. Basta lembrar que você precisa decidir quando reiniciar a bandeira ou a EA nunca mais aceita outra operação.
Alternativamente, você poderia verificar se há uma cruz / mudança de estado de baixo/na nuvem para cima.
eu coloquei seu código e disse que o bilhete não está apagado, então eu o declarei, mas agora o código abre várias ordens, assim como antes, como proceder agora?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
eu coloquei seu código e disse que o bilhete não está apagado, então eu o declarei, mas agora o código abre várias ordens, assim como antes, como proceder agora?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Provavelmente, isso o ajudaria a ler sobre o escopo das variáveis.
O que acontece com o valor da ordem a cada tick?
Então você declara o bilhete com a bandeira booleana.
int ticket;
E então
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>0)
{
order=1;
}
}
}
}
Você não pode declará-los no OnTick() porque seu valor será redefinido a cada tick, é claro.
Observe também que a OrderSend devolve o número do bilhete, ou -1 menos um, se falhar.
Eu coloquei
ordem de bool e
int ticket
sobre variáveis globais, e o resto do código no OnTick, mas ainda não faz nenhuma entrada agora

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Sou novo em mql4 e este código abre várias ordens, como posso evitá-lo? deve abrir apenas 1 ordem até fechar,
como posso fazer isso?
Obrigado
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}