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

 
Vitalie Postolache:

Puis passer l'argument à la fonction, puisqu'il est fourni. Bien qu'il soit préférable de le supprimer, c'est une tautologie.

Et tous les ordres dans la boucle ne seront pas recalculés.

for(i=OrdersTotal()-1; i>=0; i--)
J'ai une bonne idée pour comparer avec d'autres EAs dans le même ticker.
Je l'ai corrigé, j'ai inséré un argument, je l'ai mis dans la portée globale, maintenant il génère un avertissement que cet argument est déjà utilisé comme entrée dans d'autres fonctions

Le ticket avec écrasement, en travaillant à partir de la dernière commande avec un Martin.

et ensuite comment supprimer la déclaration globale 'count' hides à la ligne...

il est intéressant de le faire fonctionner comme il se doit.

Jusqu'à présent, le testeur montre d'assez bons résultats, et parfois des "erreurs insurmontables dans l'Expert Advisor".

 

Salutations.

Je suis tombé par hasard sur un enregistrement dans ce format :

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

C'est-à-dire qu'ici l'instruction conditionnelle if a été remplacée par une fonction commerciale de type bool au lieu d'une expression. Ai-je bien compris qu'un tel écrit est égal à :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

J'ai cherché à la fois dans l'aide et dans le tutoriel - je n'ai pas trouvé un tel format.

Puis-je utiliser cette méthode pour écrire directement des fonctions d'un type différent au lieu d'une expression ? Et si oui, quel serait l'algorithme ?

 
trader781:
Je l'ai corrigé, j'ai mis un argument, je l'ai mis dans la portée globale, maintenant cela génère un avertissement que cet argument est déjà utilisé comme entrée dans d'autres fonctions

Ticket avec écrasement, travail de la dernière commande avec martin

et ensuite comment supprimer la déclaration de 'count' cache la déclaration globale à la ligne...

Il est intéressant de le faire fonctionner comme il se doit.

Jusqu'à présent, le testeur montre d'assez bons résultats, et parfois des "erreurs insurmontables dans l'Expert Advisor".

S'il vous plaît montrez-moi la version corrigée, parce que deviner sort sans le code.
 
spoiltboy:

Salutations.

Je suis tombé par hasard sur un enregistrement dans ce format :

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

C'est-à-dire qu'ici l'opérateur conditionnel a été remplacé par une fonction commerciale de type bool au lieu d'une expression. Ai-je bien compris qu'un tel écrit est égal à :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

J'ai cherché à la fois dans l'aide et dans le tutoriel - je n'ai pas trouvé un tel format.

Puis-je utiliser cette méthode pour écrire directement des fonctions d'un type différent au lieu d'une expression ? Si oui, quel serait l'algorithme ?

Comme cecisi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ne fonctionnera pas. La condition ne doit pas être jetée hors des parenthèses.

Maissi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; vous pouvez.

 
Vitalie Postolache:

Tout commesi(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; ne fonctionnera pas. La condition ne doit pas être jetée hors des parenthèses.

Maissi(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; vous pouvez.

Oui, j'ai raté une coquille avec une parenthèse. Sinon, la question est pertinente.
 
Vitalie Postolache:
S'il vous plaît, montrez-moi la version corrigée, car sans le code, c'est une supposition.

Ok.

J'ai en quelque sorte fini ce que je pouvais. La description est faite. Le but est de comprendre pourquoi il ne fonctionne pas comme je le voudrais.

Dossiers :
count.mq4  19 kb
 
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 1000; //Стоплосс ордера  
extern double TakeProfit   = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =200;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b,s,p,res;
   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP) b++;
        if (OrderType()==OP_SELLSTOP) s++;        
      }  
    }
      double SL,TP;
//---- buy stop
   if(RSI0>50&&RSI1<50)
     {
          
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50)
     {

      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
     }
//---- buy stop делете
      if(RSI0<50&&RSI1>50)
    {
     OrderDelete( OrderTicket());
    
    }
//---- sell stop делете
      if(RSI0>50&&RSI1<50)
    {
     OrderDelete( OrderTicket());
    
    }
//----
   return(0);
  }
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------

void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
        
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }  
   }
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
Les commandes ne sont pas supprimées.
 

Les commandes ne sont pas supprimées.
comment avez-vous obtenu un ticket d'une commande non ouverte ?
 
trader781:
et comment avez-vous obtenu le ticket pour la commande non ouverte ?
C'est vrai ? Je n'arrive pas à le mettre là-dedans.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
 
Movlat Baghiyev:
C'est vrai ? Je n'arrive pas à le mettre là-dedans.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
Je ne sais pas comment l'expliquer. Mais c'est définitivement un chef-d'œuvre.
Raison: