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

 
Vitaly Muzichenko:

Jusqu'à ce que vous soyez fatigué de les écrire

sérieusement ?))
 
multiplicator:
sérieusement ?))

Oui, mais en règle générale, il ne faut pas en écrire plus de trois, car un tel code est difficile à lire par la suite, surtout s'il a été écrit il y a longtemps. Il est préférable de diviser ces nombreux ifs imbriqués en fonctions distinctes. Ou utiliser un opérateur de commutation ... cas

 
Artyom Trishkin:
MessageBox()

Y a-t-il un moyen de faire en sorte que si je clique après l'arrivée d'un nouveau tick, une nouvelle fenêtre n'apparaisse pas, mais que les valeurs de la première fenêtre soient utilisées ?

void OnTick()
  {
 if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 } 
 if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
 if(use_PlaySound) PlaySound ("tick");
 message=-2;
 message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
   }
if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 }

}
 
void Trailing()
{
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            if (OrderType() == OP_BUY)
            {
               if (Bid - OrderOpenPrice() > TrailingStop*Point)
               {
                  if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
                  {
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
                        Print("error order modify");
                  }
               }
            }
         }
      }
   }
   
   if (OrderType() == OP_SELL)
   {
      if (OrderOpenPrice() - Ask > TrailingStop*Point)
      {
         if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
         {
            if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
               Print("error order modify");
         }
      }
   }
}
//--------------------------------------------------------

Bon après-midi, dans les tests de suivi fonctionne comme prévu, mais dans la vie réelle ne le fait pas, ou seulement une fois de temps en temps, de temps en temps spams avec l'erreur OrderModify erreur 4108, je ne peux pas comprendre ce qui ne va pas, s'il vous plaît corriger, je comprends que l'EA ne sélectionne pas correctement les ordres pour la modification.

Je voudrais décrire mon EA :

Lorsque deux MAs se croisent, ouvrez 2 positions, une courte et une longue par magie. Le court se termine soit à Takei, soit au croisement de MA, le long devrait chaluter. La sélection d'une position longue pour un chalut se fait sur la base d'un nombre magique.

Peut-être ai-je fait une erreur dans une partie du code à l'ouverture de la position :

//BUY
   if (fast1>slow1&&fast2<slow2)
     {
      if (StopLoss_1>0)   sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits);   else sl=0;
      if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
     }
   //BUY_2
   if (fast1>slow1&&fast2<slow2)  
     {
      if (StopLoss_2>0)   sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits);   else sl=0;
      if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0; 
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
     }  
     
   //SELL
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits);   else sl=0;
      if (StopLoss_1>0)   tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
     }
   //SELL_2
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits);   else sl=0;
      if (StopLoss_2>0)   tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
     } 

Je ne sais pas, peut-être serait-il mieux d'ouvrir les ordres via une boucle ? Et comment écrire correctement ce code afin que les stops et Take Profits corrects soient définis ? Comme je l'ai écrit - il fonctionne pour la vente seulement, pour l'achat il définit le stop à 0.

(S'il vous plaît, aidez-moi sur la bonne voie))

 
Bonjour, un de mes amis m'a posé une question sur l'alphabet MQL4 :
Les lettres cyrilliques - russes sont-elles incluses dans l'alphabet ?
Et le point d'interrogation ? ??? est inclus dans l'ensemble des caractères de l'alphabet ?????.
et la barre oblique inversée \\\\\\\, fait-elle partie de l'alphabet ou non ?
 
entre.
 
Alexander Zhmurenko:
) entre en jeu.

Pouvez-vous préciser ce qu'il y a dedans ? Ce que j'ai écrit était une citation d'une connaissance. Je l'ai juste copié et collé. Il essaie de m'apprendre le MQL. Je me creuse les méninges, alors écrivez ce qu'il faut mettre dedans.

a ) point d'interrogation ( ?)

b) barre oblique inversée (\ )

 
Zvezdochet:

Pouvez-vous préciser ce qu'il y a dedans ? Ce que j'ai écrit était une citation d'une connaissance. Je l'ai juste copié et collé. Il essaie de m'apprendre le MQL. Je me creuse les méninges, alors écrivez ce qu'il faut mettre dedans.

a ) un point d'interrogation ( ?)

b ) barre oblique inversée ( \ )

L'utilisation des caractères cyrilliques est une caractéristique non documentée.

Caractères pouvant être utilisés dans les ID : chiffres 0-9, lettres minuscules et majuscules a-z et A-Z, reconnaissables comme des caractères différents, caractère de soulignement (_). Le premier caractère ne peut pas être un chiffre.

la syntaxe.

 
int OnInit()
  {
//---
   color желтый = clrAqua;
//---
   return(INIT_SUCCEEDED);
  }
les variables peuvent également être
 

Bonjour, pouvez-vous me dire pourquoi ZigD[0] ne sort pas dans sommente ?

   for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }