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

 
HALLO LEUTE! Hilfe BITTE haben einen Informanten, es muss ENTFERNT werden ... Kann ich es schaffen, den Nettogewinn zu zählen, ohne Swaps und Provisionen? Vielen Dank im Voraus
Dateien:
 
ANDREY:

Guten Tag zusammen!
Frage zur for()-Anweisung in mql4. Der Schleifenkopf enthält eine sequentielle Verringerung oder Erhöhung eines Variablenwerts

for(int A=14; A>=0;A--) oder for(int A=0; A<14;A++) oder for(int A=0; A<14;A=+2) In den Beispielen 1 und 2 wird angenommen, dass die Größe der Variablen A immer gleich groß ist.

FRAGE: Wenn eine Variable ein Zeitrahmenwert ist (1 (Minute), 5, 15, 30, 60, 240, 1440), ist es offensichtlich, dass die Größen der Erhöhung oder Verringerung dieser Variable nicht gleich sein können. Wie kann in diesem Fall der for-Header so formatiert werden, dass die Variable A mit 1 beginnt und dann bei jeder Iteration ungleichmäßig um die gewünschte Anzahl von Minuten inkrementiert wird?

Das Beispiel mit der Variablen A ist ein Sonderfall. Wie formatiere ich generell eine Schleife, wenn die Variable im Schleifenkopf nicht gleichmäßig in den gewünschten Intervallen geändert werden soll?
Oder gibt es einen anderen Operator, der für diese Fälle zu verwenden ist? Aber wie es mir scheint, sind andere Operatoren im Vergleich zu for sehr sperrig . Bitte helfen Sie mir, mein Problem genau mit Hilfe der for-Anweisung zu lösen , und zwar genau mit ihrem Kopf. Denn um mein Problem innerhalb des Körpers der for-Anweisung zu lösen , können Sie natürlich if-Anweisungen verwenden, aber es wird sehr umständlich sein undfor-Anweisung wird 1440 Iterationen für die Filterung von 7 korrekten Werten zu tun haben.
Ich danke Ihnen.

Hier liegt ein Fehler vor. Sie sollte lauten: for(int A=0; A<14;A+=2)

Das Einfachste, was mir einfällt, ist, die Punkte in das Array zu setzen

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

Am einfachsten ist es, die Zeiträume in einem Array zu erfassen

Danke, ich könnte es auch gebrauchen)

 
Alexey Viktorov:

Hier liegt ein Fehler vor. Sie sollte lauten: for(int A=0; A<14;A+=2)

Das Einfachste, was mir einfällt, ist, die Zeiträume in einem Array zu speichern


Vielen Dank für den Tipp. Es stellte sich heraus, dass es viel einfacher ist, als ich dachte.
Ich verstehe nur eine Sache nicht. Der Name des Arrays lautet per. Und ENUM_TIMEFRAMES ist ein Bezeichner für einen Variablentyp? Ich habe eine solche Kennung in mql4 Reference nicht gefunden. Es gibt nur

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Vielen Dank für den Hinweis. Es stellte sich heraus, dass es viel einfacher war, als ich dachte.
Es gibt nur eine Sache, die ich nicht verstanden habe. Der Name des Arrays pro. Und ENUM_TIMEFRAMES ist ein Bezeichner für den Variablentyp? Ich habe eine solche Kennung in mql4 Reference nicht gefunden. Es gibt nur

hier

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

hier

Habe ich richtig verstanden, dass Sie mir Informationen über mql 5 geschickt haben? Oder gelten diese Informationen auch für mql 4?

 
ANDREY:

Habe ich richtig verstanden, dass Sie mir Informationen über mql 5 geschickt haben? Oder gelten diese Informationen auch für mql 4?

Ich habe es korrigiert.
 
MakarFX:
Ich habe es korrigiert.

Ich danke Ihnen.

 
ANDREY:

Ich danke Ihnen.

Eine kleine Empfehlung: Gewöhnen Sie sich sofort an ENUM_TIMEFRAMES und vergessen Sie die numerische Darstellung als Anzahl der Minuten.

Erstens ist PERIOD_W1 aussagekräftiger als 10080, denn es ist deutlicher, dass es sich um eine Woche handelt.

Zweitens entspricht die Periode in mql5 nicht der Anzahl der Minuten, und das wird bei der Migration zu mql5 kein unnötiges Problem sein, sondern ist unvermeidlich.

Wenn Sie wirklich die Anzahl der Minuten in einem Zeitraum benötigen, können Sie

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Leute, helft mir, einen Alarm an den Indikator anzuhängen.
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }