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

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

fait. absolument pas différent du magazine précédent.

aucune erreur, ni rien d'autre.

Il ne devrait pas y avoir d'erreurs, montrez le journal.
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

Vous n'avez pas besoin d'équerres pour la boucle ? Il semble que ce soit uniquement lorsqu'il n'y a pas plus d'une ligne que vous n'en avez pas besoin.

UPD :
Ah je l'ai, il y a une ligne.

 
MakarFX #:
Il ne devrait pas y avoir d'erreurs, montrez le journal.

Voici les dernières pages du journal de bord de MT4.

Ce journal est-il nécessaire ?

Dossiers :
0w11cw.txt  30 kb
 
Oh, désolé. J'ai confondu la comparaison et l'affectation. Tout va bien maintenant. Je suis devenu fou depuis que je me suis assis pour écrire. J'écris mal, ça me stresse, et ma tête ne fonctionne pas du tout, même si je le savais, bien sûr.
 
законопослушный гражданин #:

Voici les dernières pages du journal de bord de MT4.

Ce journal est-il nécessaire ?

Voici la réponse dans votre journal)

La fonction bCheckOrders() après l'ouverture d'un ordre indique qu'il n'y a pas d'ordre, donc ils continuent à ouvrir.

 
pribludilsa #:
Et ma tête ne fonctionne pas du tout, même si je le savais, bien sûr.

Vous avez une drôle de façon de le dire))))

 
MakarFX #:

Vous avez une drôle de façon de le dire))))

Je veux dire, je savais comment écrire l'affectation et la comparaison, mais je me suis quand même embrouillé. Confus.
 
pribludilsa #:
Je veux dire, je savais comment écrire un devoir et une comparaison, mais j'étais toujours confus. C'est raté.

Ce n'est pas ce que je veux dire...

pribludilsa #:
et ma tête ne fonctionne pas du tout, même si je le savais bien sûr.

 
MakarFX #:

Voici la réponse dans votre journal)

La fonction bCheckOrders() après l'ouverture d'un ordre indique qu'il n'y a pas d'ordres, donc elle continue à ouvrir

Oh mon dieu. Où est-ce que ça dit ça ?

Peut-être n'ai-je pas lu le journal correctement ?

La fonctionbCheckOrders()après l'ouverture d'un ordre imprime qu'il n'y a pas d'ordre, donc l'ouverture continue - par void OnTick() - je comprends que ce n'est pas vrai.

jusqu'à ce que l'ordre soit fermé bCheckOrders() - ne peut pas donner qu'il n'y a pas d'ordre.

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

Oh, merde. Où est-ce que ça dit ça ?

Peut-être n'ai-je pas lu le journal correctement ?

La fonctionbCheckOrders()après l'ouverture d'un ordre indique qu'il n'y a pas d'ordre, donc l'ouverture continue - par void OnTick() - je comprends que ce n'est pas vrai.

jusqu'à ce que la commande soit clôturée bCheckOrders()-ne peut pas montrer l'absence d'une commande.

bCheckOrders() ne fonctionne pas correctement !

Je vous ai déjà écrit une fonction pour compter les commandes.

Faites comme ça et ça devrait marcher.

Au lieu de bCheckOrders(), mettez cette fonction

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

Et dans OnTick(), au lieu de bCheckOrders(), écrivez ceci

//+------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }