Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1776

 
MakarFX #:

Vous avez la possibilité d'en ouvrir deux à la fois s'il n'y en a pas d'ouverts.

Qu'est-ce que c'est ?

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

Ce truc compte le lot actuel.

Ce paramètre est défini dans les paramètres : LotControl

respectivement, lorsque : GetLotSize()>LotControl - J'ai besoin qu'il ouvre vOrderOpenSell() sur le signal bSignalBuy().

Oui, je sais que les deux commandes sont ouvertes par la condition. C'est ce que j'ai écrit au début, mais comment faire pour que vOrderOpenBuy() ne s'ouvre pas ?

 
Mihail Matkovskij #:

Si le robot est déjà entré sur le marché dans une direction, il n'entre pas à nouveau dans la même direction. C'est ainsi que fonctionne votre algorithme de saisie ?

Si cette condition estremplie, elle déclenche

Après

Et aussi quand il y a un signal de vente.

Ensuite, la raison de l'entrée dans la direction opposée est que la condition est déclenchée

Oui. C'est ce dont j'ai besoin. MAIS il doit arrêter/exclure une entrée en avant par cette condition :

GetLotSize()>LotControl
 
Kedrov #:

Merci, Makar, de vous être moqué de moi !

Voici une capture d'écran.

Oui, tu as fait un gâchis)

Maintenant, dans chaque dossier, un par un, renommez les dossiers Experts en _Experts et Indicateurs en _Indicateurs.

Renommer dans un dossier - démarrer le terminal, si cela n'a pas aidé - le renommer à nouveau et passer au dossier suivant.

P.S. La première fois, le terminal mettra un peu plus de temps à démarrer que d'habitude.

 
законопослушный гражданин #:

ce truc compte la taille actuelle du lot

ce paramètre est défini dans les paramètres : LotControl

respectivement, lorsque : GetLotSize()>LotControl - J'ai besoin que vOrderOpenSell() se produise au moment du signal bSignalBuy().

Oui, je sais que les deux commandes sont ouvertes par la condition. C'est ce que j'ai écrit au début, mais comment faire pour que vOrderOpenBuy() ne s'ouvre pas ?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

Oui. C'est ce dont j'ai besoin. MAIS il doit arrêter/exclure l'entrée en avant par cette condition :

Je suis confus par cette condition

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

avec cette condition

GetLotSize()=0
 
MakarFX #:

Merci. Corrigé. Je vais y réfléchir.

 
MakarFX #:

Je suis confus par cette condition

A cette condition.

on dirait que tu as raison.

Bien :

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

ne réagit pas du tout à la condition (GetLotSize()>LotControl)

 
законопослушный гражданин #:

on dirait que tu as raison.

Bien :

ne réagit pas du tout à la condition (GetLotSize()>LotControl)

GetLotSize() doit être pris sur le dernier fermé, puis à

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl) fonctionnera
 
MakarFX #:

GetLotSize() doit être pris de la dernière fermée, puis à

(GetLotSize()>LotControl) fonctionnera

Merci beaucoup !

 
законопослушный гражданин #:

Oui. C'est ce dont j'ai besoin. MAIS, en faisant cela, vous devez arrêter/exclure l'entrée en avant par cette condition :

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   for (int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }
Raison: