[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 514

 

Bonjour,

Veuillez poser cette question sur l'EA :

J'ai un ordre d'ouverture par balancement, par exemple, si MA_1 > MA_2 alors nous achetons. Mais lorsque je quitte la transaction, cette règle se déclenche à nouveau.

Comment puis-je dire à l'EA d'ouvrir une position uniquement si le prix ne s'est pas éloigné de plus de 4 barres de la MA_2 ?


Merci !

Si quelque chose est mal ou mal placé, ne me donnez pas de coup de pied. C'est mon premier message sur cet immense forum.

 
Jony5Proz:

Bonjour,

Veuillez poser cette question sur l'EA :

J'ai un ordre d'ouverture par balancement, par exemple, si MA_1 > MA_2 alors nous achetons. Mais lorsque je quitte la transaction, cette règle se déclenche à nouveau.

Comment puis-je dire à l'EA d'ouvrir une position uniquement si le prix ne s'est pas éloigné de plus de 4 barres de la MA_2 ?


Merci !

Si quelque chose est mal ou mal placé, ne me donnez pas de coup de pied. C'est mon premier message sur cet immense forum.

https://book.mql4.com/ru/samples/expert
 

Merci, je suis juste à ce niveau de connaissance. Il y a le même problème avec le script de l'exemple. C'est gênant lorsque vous mettez le script en marche et qu'il entre à la fin de la tendance.

Comment puis-je dire au script de se déclencher uniquement s'il y a moins de 4 barres après le croisement de deux barres ?

 
https://www.mql5.com/ru/code/10773 la dernière fois que je me suis baigné
 
Jony5Proz:

Merci, je suis juste à ce niveau de connaissance. Il y a le même problème avec le script de l'exemple. C'est gênant lorsque vous mettez le script en marche et qu'il entre à la fin de la tendance.

Comment puis-je dire au script de se déclencher uniquement s'il y a moins de 4 barres après le croisement de deux barres ?

Le script ne comprend pas les mots. C'est à vous de jouer - exécutez le script au plus tard 4 barres après le franchissement de 2 MA.
 

Les gens, j'ai déjà demandé ici comment faire pour qu'un ordre ne s'ouvre que lorsqu'une nouvelle bougie apparaît. J'utilise un cadre temporel D1.

J'ai décidé de placer des ordres en attente à certains niveaux (buystop_lvl et sellstop_lvl), sur la base de l'analyse des chandeliers précédents.

Je voulais les placer en début de journée et les supprimer lorsqu'une nouvelle bougie arrive. Peu importe si les ordres en attente ont été activés ou non, s'ils ont été activés, alors les ordres au marché devraient également être fermés. Au maximum 2 ordres, buystop et sellstop.

Voici ce que j'ai écrit :

1. Je vérifie d'abord si les ordres au marché ou les ordres en attente sont actifs, et s'ils le sont, je les supprime/ferme.

int total=OrdersTotal();
   if (total!=0 && NewBar()==true){
                 for (int i=0; i<total; i++)
                    {
                     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                     if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,10);
                     if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,10);
                     if(OrderType()==OP_BUYSTOP)  OrderDelete(OrderTicket());
                     if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
                    }
                }

2. Ensuite, je place des ordres en attente par niveaux calculés :

if(NewBar() == True && OrdersTotal()==0)
    {
     OrderSend(Symbol(),OP_BUYSTOP ,Lot,buystop_lvl ,10,buystop_SL ,buystop_TP,"Expert buystop\sellstop");
     Sleep(10000);
     OrderSend(Symbol(),OP_SELLSTOP,Lot,sellstop_lvl,10,sellstop_SL,sellstop_TP,"Expert buystop\sellstop");
     
    }

3. Si j'ai un ordre de vente ou de rachat, j'ouvre une nouvelle barre sur celui-ci :

//Функция нового бара
bool NewBar()
{
  static datetime lastbar = 0;
  datetime curbar = iTime(Symbol(),1440,0);
  if(lastbar != curbar)
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
}

Par conséquent, lorsqu'une nouvelle bougie s'ouvre, les ordres sont placés et immédiatement supprimés. Les commandes sont passées et immédiatement supprimées.

Lorsque j'ai commenté le code du point (1), je n'ai pas réussi à ouvrir des ordres dans le testeur, mais les ordres ne se sont pas ouverts, c'est-à-dire qu'ils ne sont pas devenus des ordres de marché.

Pouvez-vous me dire quel pourrait être le problème ?

 

Cette fonction NewBar() ne peut pas être utilisée deux fois de suite.

Quelque chose comme ceci est mieux :

bool newBar = NewBar() ;

// et plus loin dans le texte, en remplaçant NewBar() par newBar

 
Merde, je ne comprends toujours pas comment faire. J'ai besoin du code pour supprimer et fermer les ordres uniquement sur le prochain chandelier. Mais il y en aura aussi d'autres pour l'ouvrir. Cela signifie que le programme va à nouveau s'engager dans la suppression. J'ai besoin d'un drapeau, mais mon cerveau transpire déjà pour comprendre comment faire :)
 
Noterday:
Et en général, on jette NewBar, on regarde l'heure d'ouverture du dernier ordre et on la compare avec Time[0]. Si c'est plus haut, c'est votre affaire, vous pouvez tout supprimer.
 
trend_lab:
En général, on jette NewBar, on regarde l'heure d'ouverture du dernier ordre et on la compare avec Time[0]. Si c'est plus que ça, c'est votre affaire, vous pouvez tout supprimer.

Oui, je suppose que je vais devoir le faire. Merci pour cela :)