Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 369

 

Guten Tag. etwas hat aufgehört, die Verarbeitung der Flagge in mt4 nach einer Weile. nur mt beginnt es zu ignorieren, könnten Sie mir sagen, warum:

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:

Guten Tag. etwas hat die Verarbeitung der Flagge in mt4 nach einiger Zeit gestoppt. mt fängt einfach an, es zu ignorieren, könnten Sie mir sagen, warum:


Versuchen Sie eine Timer-Frequenz von 100-200ms,
500 ms sind zu viel, um 1 Sekunde zu erfassen.

und der Kerzenständer kann sich einige Sekunden oder sogar eine Minute später öffnen

 
Ivan Ivanov:

Versuchen Sie es:

... Oder brauchen Sie wirklich extern?


Ich danke Ihnen. Das scheint geholfen zu haben.

Was ist der Unterschied zwischen input und extern?

 
Taras Slobodyanik:

Versuchen Sie eine Timer-Frequenz von 100-200ms,
500 ms sind zu lang, um 1 Sekunde zu erfassen.

und die Kerze kann sich ein paar Sekunden oder sogar eine Minute später öffnen


Das Problem ist also nicht, dass es nicht aufgefangen wird. Dagegen ist nichts einzuwenden.

Das Problem ist, dass die Flagge nicht mehr funktioniert und alle 500ms ein Signal sendet, das die Flaggenbedingungen ignoriert. Ich verstehe nicht, was da los ist...

 
RichLux: Was ist der Unterschied zwischen Input und Extern?


 

Können Sie mir bitte sagen, wie ich den Puffer zurücksetzen kann, wenn ein neuer Balken erscheint, aber so, dass die vorherigen Daten im Puffer nicht gelöscht, sondern im Diagramm angezeigt werden. Aus irgendeinem Grund kann ich den Puffer nicht auf Null zurücksetzen, und wenn ein neuer Balken erscheint, werden die alten akkumulierten Daten mit neuen Daten überlagert. Was ich im Code nicht richtig beschrieben habe.

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:

Das Problem ist also nicht, dass er es nicht auffängt. Daran ist nichts auszusetzen.

das Problem ist, dass die Flagge aufhört zu funktionieren und es beginnt, ein Signal alle 500ms zu senden, die Flagge Bedingungen zu ignorieren. ich verstehe nicht, was da los ist ...


Ihr Timing ist verwirrend, da Sie gleichzeitig lokal und auf dem Server arbeiten.
Ein zweites Mal würde ich ungefähr so vorgehen:

//+------------------------------------------------------------------+
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);
}
 

Hallo, Können Sie mir bitte sagen, wenn Sie in iData für diesen Indikator eingeben müssen, egal, ob es ein Programm oder Verweis auf die Bar-Daten, wo Sie den Zeitrahmen Chart angeben können, warum ist die Daten aus anderen Zeitrahmen sind nicht korrekt in der aktuellen anderen Zeitrahmen Chart reflektiert, sondern nur in den Chart der angegebenen Zeitrahmen? Ich danke Ihnen.

 

Hallo, vielleicht antwortet jemand und kann helfen, ich versuche es noch einmal. Hier ist ein Beitrag auf Seite 367, dort steht alles drin.

 
Novaja:

Hallo, vielleicht antwortet jemand und kann helfen, ich versuche es noch einmal. Hier ist ein Beitrag, Seite 367,, da steht alles drin.


Sehen Sie sich das an.