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

 

Leute, bitte helft mir im Code, um die TF d1/Woche in eine andere zu ändern.

Ich weiß, wie ich sie in H1 oder Minuten ändern kann.

Interessiert es Sie, wie Sie auf m30, m15, m5 umsteigen können?

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
Ich muss den Indikator für eine Weile anhalten, aber die Funktion Sleep() kann, wie in der Hilfe angegeben, nicht vom benutzerdefinierten Indikator aufgerufen werden... Gibt es einen anderen Weg?
 
Yevhenii Levchenko:
Ich muss den Indikator für einige Zeit pausieren, aber die Sleep()-Funktion, wie in der Hilfe erwähnt, kann nicht vom benutzerdefinierten Indikator aufgerufen werden... Gibt es noch andere Möglichkeiten?

Ausgabe nach Bedingung in OnCalculate() ohne Berechnung der Indikatorwerte - am einfachsten ist der Tickcounter, etwas komplizierter ist die Verwendung eines Timers, das funktioniert in Indikatoren

 
Igor Makanu:

Ausgabe nach Bedingung in OnCalculate() ohne Berechnung von Indikatorwerten - am einfachsten ist der Tickcounter, etwas komplizierter ist die Verwendung eines Timers, das funktioniert in Indikatoren

Ich danke Ihnen!

Ich habe es mit einem Timer gemacht. Diese Option schien mir einfacher zu sein...

 
Yevhenii Levchenko:

Ich danke Ihnen!

Ich habe es mit einer Zeitschaltuhr gemacht. Diese Option schien mir einfacher zu sein...

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[])
  {
//---
   static int TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

Ich hatte die statischen Variablen völlig vergessen... Danke :)

Und wenn Sie eine gewöhnliche Variable als globale Variable deklarieren, ist sie in gewissem Sinne dasselbe wie eine statische Variable? In dem Sinne, dass sie von allen Stellen im Programm aus geändert werden können?

 

Hallo.

Können Sie mir bitte sagen, ob es möglich ist, ein dynamisches Array vom Typ Struktur per Referenz an eine Funktion zu übergeben?

Zum Beispiel, um struct_name_array[] array an Func() zu übergeben, um es dort zu verarbeiten und zu füllen:

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

Wie genau wird die Überweisung abgewickelt, falls dies überhaupt möglich ist? Wie werden die Funktionsparameter formatiert? Ich kann anscheinend keine C++-Leitfäden verwenden.

Ich danke Ihnen.

 
Mikhail Sobolev:

Übergeben Sie zum Beispiel struct_name_array[] array an Func(), damit es dort verarbeitet und gefüllt wird:

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

Hallo!

Mir ist klar, dass ich schon viele Leute hier mit meinen dummen Fragen verärgert habe, also seien Sie bitte nachsichtig mit dem Folgenden und erklären Sie trotzdem, was hier falsch ist:

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

Die Warnmeldung wird angezeigt, aber es gibt keine vertikale Linie. Was ist der Grund dafür?

 
novichok2018:

Hallo!

Mir ist klar, dass ich schon viele Leute hier mit meinen dummen Fragen verärgert habe, also seien Sie bitte nachsichtig mit dem Folgenden und erklären Sie trotzdem, was hier falsch ist:

Die Ausschreibung wird ausgegeben, aber es gibt keine vertikale Linie. Was ist der Grund dafür?

Ich habe den Grund bereits verstanden, sogar den Hinweis auf das Forum. Ich glaube, ich habe verstanden, dass ich bereits eine Linie gezogen hatte. Um andere Linien zu ziehen, muss ich diese ausradieren.