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

 

Bonjour. quelque chose a cessé de traiter le drapeau dans mt4 après un certain temps. juste mt commence à l'ignorer, pourriez-vous me dire pourquoi :

void OnTimer()
  {
//---
   //-----------------
   int tmeLeftC = PeriodSeconds() - (TimeCurrent()-Time[0]);
   int tmeLeftL = PeriodSeconds() - (TimeLocal()-Time[0]);
   
   
//флаг на вкл отправки   
   if ((sendflag==0) && (tmeLeftC >= 10)) 
      {
         sendflag=1;
      }
      

//Условия на отправку 
///------BAY 
   if ((sendflag==1) && (fNewBar()) && (TimeHour(Time[0]) >= StartH) && (TimeHour(Time[0]) <= EndH) && ((tmeLeftC <= SecondsPrevToServer) || (tmeLeftL <= SecondsPrevToServer)))
      {
         Print("Predict data");
         sendSig();
         Print("Send data");
         sendflag=0;
      }
 
itslek:

Bonjour. Quelque chose a cessé de traiter le drapeau dans mt4 après un certain temps. mt commence juste à l'ignorer, pouvez-vous me dire pourquoi ?


Essayez une fréquence de temporisation de 100-200 ms,
500ms c'est trop pour rattraper 1 seconde

et le chandelier peut s'ouvrir quelques secondes ou même une minute plus tard.

 
Ivan Ivanov:

Essayez-le :

... Ou bien avez-vous vraiment besoin de l'externalité ?


Merci. Cela semble avoir aidé.

Quelle est la différence entre input et extern ?

 
Taras Slobodyanik:

essayez une fréquence de timer de 100-200ms,
500ms est trop long pour rattraper 1 seconde

et la bougie peut s'ouvrir quelques secondes ou même une minute plus tard


donc le problème n'est pas qu'il ne l'attrape pas. C'est très bien comme ça.

Le problème est que le drapeau ne fonctionne plus et qu'il commence à envoyer un signal toutes les 500 ms, en ignorant les conditions du drapeau. Je ne comprends pas ce qui se passe ici...

 
RichLux: Quelle est la différence entre input et extern ?


 

Pouvez-vous m'indiquer comment réinitialiser le tampon lorsqu'une nouvelle barre apparaît, mais de manière à ce que les données précédentes dans le tampon ne soient pas effacées, mais affichées sur le graphique. Pour une raison quelconque, je n'arrive pas à remettre le tampon à zéro et lorsqu'une nouvelle barre apparaît, les nouvelles données sont superposées aux anciennes données accumulées. Ce que je n'ai pas décrit correctement dans le code.

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
itslek:

donc le problème n'est pas qu'il ne l'attrape pas. Il n'y a rien de mal à cela.

le problème est que le drapeau ne fonctionne plus et qu'il commence à envoyer un signal toutes les 500ms, ignorant les conditions du drapeau. je ne comprends pas ce qui se passe ici...


Votre timing est confus, à la fois local et serveur en même temps.
J'attraperais une deuxième fois grossièrement comme ça :

//+------------------------------------------------------------------+
bool NewBar()
{
static bool flag=false;
static int bar=Bars;
static datetime lasttime=0;

if (!flag && Bars!=bar)
   {
   bar=Bars;
   lasttime=TimeLocal();
   flag=true;
   }
if (flag && TimeLocal()-lasttime>=pause) //pause - пауза после начала бара, например 59 сек
   {
   flag=false;
   return(true);
   }
return(false);
}
 

Bonjour, Pouvez-vous s'il vous plaît me dire si vous avez besoin de taper dans iData pour cet indicateur, peu importe si c'est un programme ou une référence aux données de la barre, où vous pouvez spécifier le timeframe, pourquoi les données des autres timeframes ne sont pas reflétées correctement dans le courant différent sur le graphique timeframe, mais seulement dans le graphique du timeframe spécifié ? Merci.

 

Bonjour, peut-être que quelqu'un répondra et aidera, je vais réessayer. Voici un message sur la page 367, tout y est expliqué.

 
Novaja:

Bonjour, peut-être que quelqu'un répondra et aidera, je vais réessayer. Voici un post, page 367,, tout y est.


Regardez ça.