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

 
Valeriy Yastremskiy:

Les drapeaux contrôlent soit le nombre de types d'ordres, soit, s'il y a un ticket, l'heure de clôture de l'ordre au marché. S'il n'est pas égal à zéro, l'ordre a été clôturé et le drapeau d'ouverture d'ordre est faux.

Et par programme, comment ?
 
AIGUL SALMANOVA:
Comment cela se fait-il par programmation ?
 if(OrderSelect(Ticket, SELECT_BY_TICKET)==true)
        {
         if(OrderCloseTime()==0)              // Если наш рыночный ордер не закрыт
           {
            if(flagAlert == true)
               Alert("Наш рыночный ордер жив, Модифицируем его если нужно ", Text,Ticket,". Ждём ответ..");

            ModifyTral(); // Модифицируем если нужно
           }
         if(OrderCloseTime()!=0)              // Если наш рыночный ордер закрылся
           {
            OpnOr=false;                     // Флаг открытия рыночного ордера после его закрытия делаем ЛОЖЬ
            Ticket=0;                          // Тикет ордера рыночного, он может быть только один
           
            Alert("Наш рыночный ордер закрылся. Работа Советника продолжается ","Прибыль/убыток = ",OrderProfit(),
                  " Своп = ", OrderSwap(), " Комиссия = ", OrderCommission());
            return;
           }
        }
      else
        { Alert("OrderSelect() нашего рыночного ордера вернул ошибку - ",GetLastError()); return;}
     }

Pour comptabiliser un billet.

Lors de l'ouverture d'une commande, le ticket doit être mémorisé.

 Alert("Попытка открыть Buy Ожидание ответа..","SL = ",SL,"TP = ",TP,"Lts = ",Lts);
            Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,slippage,SL,TP,"QstrBuy",Magic,0,Blue);//Открытие Buy
            if(Ticket>0) // Получилось :)
              {
               Alert(Symbol(),"Открыт ордер Buy по цене ",Ask,"Ticket = ",Ticket);}
 
Valeriy Yastremskiy:

Pour être honnête, ce que vous cherchez n'est pas clair. Écrivez dans les formules comment vous comprenez ce qui est produit et ce dont vous avez besoin.

Vous avez besoin du temps en millisecondes entre les 4 derniers ticks. Mettre à jour les valeurs lorsqu'une nouvelle coche apparaît.

L'indicateur écrit le temps du dernier tick(GetTickCount()) dans le buffer.

Le conseiller expert prend les valeurs de l'indicateur et calcule le décalage horaire.

double buf1=iCustom(Symbol(),0,"time",0,1);
double buf2=iCustom(Symbol(),0,"time",0,2);
double buf3=iCustom(Symbol(),0,"time",0,3);
double buf4=iCustom(Symbol(),0,"time",0,4);
double delta1=buf1-buf2;
double delta2=buf2-buf3;
double delta3=buf3-buf4;
Alert(delta1,"   ",delta2,"   ",delta3);

Il semble compter, mais Alert affiche des valeurs comme dans l'image.

Je ne comprends pas pourquoi.


 
prom18:

Besoin du temps en millisecondes entre les 4 derniers ticks. Met à jour les valeurs lorsqu'un nouveau tick se produit.

L'indicateur écrit le temps du dernier tick (GetTickCount()) dans le buffer.

Le conseiller expert prend les valeurs de l'indicateur et calcule le décalage horaire.

Il semble compter, mais Alert affiche des valeurs comme dans l'image.

Je ne comprends pas pourquoi.


Parce que vous n'avez pas lu la documentation

L'aide pour GetTickCount indique qu'il s'agit d'un dépassement du compteur d'entiers.

 
Maxim Kuznetsov:

parce que vous ne lisez pas la documentation.

La référence GetTickCount dit que c'est un dépassement d'entier.

Vous voulez dire uint ? Pourquoi cela apparaît-il dans l'alerte ? Je ne l'ai pas mis là.

 
prom18:

Vous voulez dire uint ? Pourquoi cela apparaît-il dans l'alerte ? Je ne l'ai pas écrit là.

Dans la première Alerte, vous avez sorti de manière incorrecte (sans tenir compte des débordements) la différence calculée,

le deuxième Alert, où une grande valeur entière est recherchée dans le code, elle n'est pas présente dans ce fragment :-)

 

C'est ça le problème, ce n'est pas dans le code.

Tout le code de l'indicateur.

#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   uint b=GetTickCount();
   x[0]=b;
   Alert(b);
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+

Tout le code de l'EA.

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   uint buf1=iCustom(Symbol(),0,"time",0,1);
   uint buf2=iCustom(Symbol(),0,"time",0,2);
   uint buf3=iCustom(Symbol(),0,"time",0,3);
   uint buf4=iCustom(Symbol(),0,"time",0,4);
   uint delta1=buf1-buf2;
   uint delta2=buf2-buf3;
   uint delta3=buf3-buf4;
   Alert(delta1,"   ",delta2,"   ",delta3);  
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
prom18:

C'est ça le problème, ce n'est pas dans le code.

Tout le code de l'indicateur.

Tout ça.

Regarde ce qu'il y a d'autre dedans.

time.mq4 - peut-être qu'il envoie des alertes

 
prom18:

C'est ça le problème, ce n'est pas dans le code.

Tout le code de l'indicateur.

Tout le code de l'EA.

Dans l'indicateur, dans la structure d'alerte. La 5e ligne à partir du bas de l'alerte(b) ;

uint b=GetTickCount();
   x[0]=b;
   Alert(b);

Apparemment, c'est le nombre de millisecondes depuis le démarrage du système)

 

Comment puis-je suivre le statut des boutons d'échange rapide ?

C'est-à-dire qu'ils sont présents ou non sur le graphique.

Pouvez-vous suggérer une fonction ou une autre méthode ?

Raison: