Perguntas e respostas a programadores sobre MQL 4 - página 6

 
O código é complicado, ou há algo mais simples?
 

1. Armazenar bilhetes de pedidos em uma matriz ou 2 variáveis.

2. Selecione-os um a um com OrderSelect (a matriz é mais conveniente aqui) .

3. Verifique o tipo para o momento atual.

4. Se tipo OP_BUY || OP_SELL -> OrderDelete para segundo bilhete.

 

Ajude-me com um exemplo simples, eu entendo muitas coisas, mas a seleção do pedido é um pouco complicada!

 

Aqui está o código onde o erro é ????? Não apaga o segundo pendente quando um pendente aciona ......


se (MA1<MA2)
{
if(n==0)
{
//==================================================================================================================//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alerta("Error # - ",GetLastError()," No instrumento ", Symbol()); //escrever erro//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiração);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiração);
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
senão
//=================================================================================================================//
se (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alerta("Error # - ",GetLastError()," On tool ", Symbol()); //escrever erro//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiração);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiração);
//================================================================================================================//
}
//==================================================================================================================//
// se SELLSTOP tiver acionado, apagar BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
if(OrderType()==OP_SELL)
{
OrderDelete(t2);
}
}
//----
// se BUYSTOP tiver acionado, apagar SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
if(OrderType()==OP_BUY)
{
OrderDelete(t1);
}
}

 

Você está confuso com as condições. Acho que você tem {} parênteses no lugar errado:

if ( n == 0 )
{
        if (MA1<MA2) 
        {
                //==================================================================================================================//

                tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE); 
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку// 
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
                //================================================================================================================//

                //==================================================================================================================//
        }
        //==================================================================================================================// 
        else 
        //=================================================================================================================// 
        if (MA1>MA2) 
        {
                tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку//
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
        //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
        if(OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
        if(OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

Ou algo parecido.

 
infelizmente não funcionou........
 

O que é incrível é que eu tenho uma EA semelhante. Verifiquei tudo com ele, é tudo igual em princípio. Funciona, e este não...

A diferença é que a outra EA tem apenas uma pose para entrada de compras e dois pingentes.

 

bilhetes em variáveis globais? (fora do início e de outras funções)

Caso contrário, eles são reinicializados a cada tique.

Insira mais Print()-s em cada passo do Expert Advisor, então você entenderá onde ele cai e o que ele não faz.

 

HOORAY AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Vencedor !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama:

bilhetes em variáveis globais? (fora do início e de outras funções)

Caso contrário, eles são reinicializados a cada tique.

Insira mais Print()-s em cada passo do Expert Advisor, então você entenderá onde ele cai e o que ele não faz.

Estou loucamente grato a você, perdi o ponto que declarei bilhetes como duplo no início e o pedido não pode ser registrado como 1.0 e 2.0. É por isso que a função de exclusão estava esperando pelo ponto flutuante