Questions et réponses aux programmeurs sur MQL 4 - page 6

 
Le code est-il compliqué, ou existe-t-il quelque chose de plus simple ?
 

1. Stockez les tickets de commande dans un tableau ou 2 variables.

2. Sélectionnez-les un par un avec OrderSelect (le tableau est plus pratique ici) .

3. Vérifiez le type pour le moment actuel.

4. Si le type OP_BUY || OP_SELL -> OrderDelete pour le deuxième ticket.

 

Aidez-moi avec un exemple simple, je comprends beaucoup de choses, mais la sélection de l'ordre est un peu difficile !

 

Voici le code où l'erreur est ? ???? Ne supprime pas le deuxième pendentif lorsqu'un pendentif déclenche .......


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

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE) ;
if(tiket<0) Alert("Erreur # - ",GetLastError()," On instrument ", Symbol()) ; //écriture d'une erreur///.
//================================================================================================================//
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) ;
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
sinon
//=================================================================================================================//
si (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE) ;
if(tiket<0) Alert("Erreur # - ",GetLastError()," On tool ", Symbol()) ; //écriture d'une erreur///.
//================================================================================================================//
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) ;
//================================================================================================================//
}
//==================================================================================================================//
// si SELLSTOP s'est déclenché, supprimer BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
si(OrderType()==OP_SELL)
{
CommandeSuppression(t2) ;
}
}
//----
// si BUYSTOP s'est déclenché, supprimer SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
si(OrderType()==OP_BUY)
{
OrdreSuppression(t1) ;
}
}

 

Vous êtes confus quant aux conditions. Je pense que vous avez des parenthèses {} au mauvais endroit :

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 quelque chose comme ça.

 
n'a pas fonctionné malheureusement........
 

Ce qui est étonnant, c'est que j'ai une EA similaire. J'ai tout vérifié avec elle, c'est pareil en principe. Elle fonctionne, et celle-là non...

La différence est que l'autre EA n'a qu'une seule pose pour l'entrée d'achat et deux pendants.

 

dans les variables globales? (en dehors du démarrage et des autres fonctions)

Sinon, ils sont réinitialisés à chaque tic-tac.

Insérez d'autres Print()- à chaque étape de l'Expert Advisor, vous comprendrez alors où il se bloque et ce qu'il ne fait pas.

 

HOURRA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Gagnant !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

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

 
hasayama:

dans les variables globales ? (en dehors du démarrage et des autres fonctions)

Sinon, ils sont réinitialisés à chaque tic-tac.

Insérez d'autres Print()- à chaque étape de l'Expert Advisor, vous comprendrez alors où il se bloque et ce qu'il ne fait pas.

Je vous suis follement reconnaissant, j'ai manqué le point que j'ai déclaré les billets comme double au début et l'ordre ne peut pas être enregistré comme 1.0 et 2.0. C'est pourquoi la fonction de suppression attendait un point flottant.