[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 513

 

Des conseils de pro sur la façon de l'optimiser pour les prix d'ouverture dans l'auto-optimiseur :

https://forum.mql4.com/ru/42125

 
Bonjour, je suis un débutant qui essaie de comprendre comment écrire une EA.
conseiller comment écrire "si un ordre précédemment fermé était un ordre d'achat et a été fermé avec un stop loss alors vendre 0.1 lot avec un stop loss 50 take profit 50" svp)
 

Spécialistes ! Au secours ! Comment cela peut-il être mis en œuvre ?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

Nous devons fixer OPEN=true jusqu'à ce que l'option
condition2. La condition1 peut changer pendant cette période.

Merci d'avance !

 

le sortir pour le départ

 bool OPEN=false;
 
sergeev:

le sortir pour le départ


Merci beaucoup ! Comme on dit, tout est brillamment simple ! Et je me suis creusé les méninges toute la journée.
 

Veuillez me dire ce que je fais de mal lorsque je calcule le nombre de premières barres (Quant_Bars) qui correspondent à la condition uniquement au-dessus ou au-dessous du tampon. C'est-à-dire que dès que l'indicateur est dessiné AVANT la barre fermée (1), je devrais compter les barres précédentes avec l'indicateur EN DESSOUS des barres (sauf celles qui ne sont pas conformes à la condition) et vice versa, dans le sens inverse du mouvement. Ma variante donne des valeurs erronées.

Qui sait comment le faire ?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

question,

Pourquoi, lorsque mon conseiller expert draine proprement tout le dépôt et que pratiquement toutes les transactions sont perdantes, puis lorsque je change la "polarité" des signaux, le dépôt n'augmente pas aussi rapidement, mais déjà ? )))) les points sont les mêmes, l'erreur se situe uniquement dans le sens d'ouverture de l'ordre, ou il y a autre chose ?

 
Maxaxa:

question,

Pourquoi, lorsque mon conseiller expert draine proprement tout le dépôt et que pratiquement toutes les transactions sont perdantes, puis lorsque je change la "polarité" des signaux, le dépôt n'augmente pas aussi rapidement, mais déjà ? )))) les points sont les mêmes, l'erreur se situe uniquement dans le sens d'ouverture de l'ordre, ou il y a autre chose ?

Il s'agit d'une philosophie de négociation.
 
Maxaxa:


il y a autre chose
 
Solree:

Bon après-midi.

Il y a 4 ordres, 2 ventes et 2 achats. Les scellés sont créés, au sens figuré, lorsque le prix monte et achetés lorsqu'il baisse. Les ventes sont supprimées lorsqu'un achat est créé et vice versa. Lorsqu'un ticket est créé, le 1er achat ou vente est stocké dans la variable pos. Les 4 ont le même commentaire - "Aelit". Donc, il y a un code :

L'ordre est sélectionné normalement par le ticket, mais très souvent la comparaison des commentaires échoue. Pour l'intérêt, j'ai fait autre chose Alert(OrderComment()) ; et le journal a montré "Alert : Aelit[sl]". Qu'est-ce que [sl] ? Est-ce parce que toutes les commandes ont le même commentaire ? Alors pourquoi le même [sl] lorsque j'ai fait un commentaire qui ne correspondait pas aux autres pour le test ? Si vous supprimez la vérification du commentaire, une erreur de ticket apparaît dans le journal pour OrderModify. Au début, je pensais que la condition était atteinte avant qu'un ordre ne soit créé, mais non, à ce moment-là, l'ordre est déjà là, et le ticket est le même en cas de déclenchement de la condition et de non déclenchement. Comment le comprendre ?

Ce n'est pas un miracle que votre société de courtage ait ajouté à votre commentaire - l'ordre a été fermé lorsque le StopLoss a été atteint.

Vous n'avez pas organisé correctement la sélection des commandes sur le ticket. Lors d'une telle sélection, tout d'abord, MODE_TRADES est inutile - il est omis dans la fonction OrderSelect(),

Deuxièmement, après la sélection réussie de l'ordre, vous ne vérifiez pas si l'ordre a été sélectionné dans le tableau des ordres en fonction du ticket - parmi les ordres du marché ou parmi les ordres fermés.

Pour ce faire, une fois l'ordre sélectionné, vérifiez son heure de clôture et si elle est égale à zéro, alors seulement l'ordre est un ordre de marché, sinon - il est sélectionné parmi les ordres déjà clôturés (d'où l'ajout à votre commentaire).

Raison: