Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1023

 

Wie erhalte ich die Daten des iMA-Indikators am "Null-Balken", d.h. den Indikatorwert am aktuellen Balken?

Wenn ich das tue

int OnInit()
{handle.MA_CHART=iMA(_Symbol,_Period,period_MA_CHART,0,Signal_MA_Method,Signal_MA_Applied);}

void OnTick()
{CopyBuffer(handle.MA_CHART, 0, 0, 3, ind_date.MA_CHART);}


Bei einem Anruf

ind_date.MA_CHART[0]

Ich erhalte die Daten des vorherigen Balkens, nicht des aktuellen.

 
Yury Smagin:

Wie erhalte ich die Daten des iMA-Indikators auf dem "Null-Balken", d.h. wie erhalte ich den Indikatorwert auf dem aktuellen Balken?

Wenn ich das tue


Bei einem Anruf

Ich erhalte die Daten des vorherigen Balkens, nicht des aktuellen.

Das Array benötigt

ArraySetAsSeries(ind_date.MA_CHART,true);

und dann wird das Element mit dem Index "0" im Array dem RECHTEN Balken im Diagramm entsprechen.

 
Vladimir Karputov:

Das Array muss sein

und dann entspricht das Element im Array mit dem Index "0" dem RECHTEN Balken im Diagramm.

Ich danke Ihnen!
 
Yury Smagin:

Wie erhalte ich die Daten des iMA-Indikators am "Null-Balken", d.h. den Indikatorwert am aktuellen Balken?

Wenn ich das tue


Bei einem Anruf

Ich erhalte die Daten des vorherigen Balkens, nicht des aktuellen.

Wie in diesem Film: "Ich habe einige Zweifel...". Verwenden Sie meinen Expert Advisor nicht zum Lernen?

Sie brauchen das Feld nicht umzudrehen. Es genügt, den Wert des zweiten Index des Arrays zu nehmen.

ind_date.MA_CHART[2]
 

OBJPROP_BACK

Ich habe es auf beide Arten versucht. Das funktioniert nicht. Ich verstehe überhaupt nicht, wie das funktioniert.

Unabhängig vom Wert werden die Objekte einfach in der Reihenfolge angezeigt, in der sie gebildet wurden - das letzte ist höher.

Und wie stelle ich die Ebene (Layer) eines Objekts ein, wenn es mehr als zwei davon gibt? Vielleicht gibt es noch andere Einstellungen? Bitte sagen Sie es mir, wenn Sie es wissen.

 
Alexey Viktorov:

Wie in diesem Film: "Ich habe Zweifel..." Ist das nicht mein Berater, den Sie zum Lernen benutzen?

Sie brauchen das Feld nicht umzudrehen. Nehmen Sie einfach den Wert des zweiten Index des Arrays.

Ich danke Ihnen!

 

Guten Tag an Sie alle))


Könnten Sie mir bitte sagen, warum es einen Unterschied in den Ergebnissen gibt?

//+------------------------------------------------------------------+
//|  exponential moving average multytimeframes   ДЛЯ БУФЕРА         |
//+------------------------------------------------------------------+
void CalculateExponentialMA(int rates_total,int prev_calculated,int begin,const double &price[])
  {
   int    i,limit;
   double SmoothFactor=2.0/(1.0+period_ma);
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
     {
      limit=period_ma+begin;
      ExtLineBuffer[begin]=price[begin];
   for(i=begin+1;i<limit;i++)
         ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor);
     }
   else limit=prev_calculated-1;
//--- main loop
   for(i=limit;i<rates_total && !IsStopped();i++)
      ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor);
//---
  }
//+------------------------------------------------------------------+
//|  exponential moving average       ДЛЯ ТОЧКИ                      |
//+------------------------------------------------------------------+
void CalculateEMA(int periodMA,int bgn)
  {
 int i,lmt=periodMA+bgn+1;
 double SmoothFactor=2.0/(1.0+periodMA);
   for(i=0;i<lmt;i++)
              BufferPrice[i]=0.0;
   switch(AppliedPrice)
     {
      case 1: BufferPrice[lmt]=iClose(NULL,Timeframes,lmt); break;
      case 2: BufferPrice[lmt]=iOpen(NULL,Timeframes,lmt);  break;
      case 3: BufferPrice[lmt]=iHigh(NULL,Timeframes,lmt);  break;
      case 4: BufferPrice[lmt]=iLow(NULL,Timeframes,lmt);   break;
   default :  BufferPrice[lmt]=iClose(NULL,Timeframes,lmt); break;
     }
   for(i=lmt-1;i>=0;i--)
   switch(AppliedPrice)
     {
      case 1: BufferPrice[i]=iClose(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor); break;
      case 2: BufferPrice[i]=iOpen(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);  break;
      case 3: BufferPrice[i]=iHigh(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);  break;
      case 4: BufferPrice[i]=iLow(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor);   break;
   default :  BufferPrice[i]=iClose(NULL,Timeframes,i)*SmoothFactor+BufferPrice[i+1]*(1.0-SmoothFactor); break;
     }
      MA=NormalizeDouble(BufferPrice[bgn],_Digits);
  }
//+------------------------------------------------------------------+

FRAGE: Was habe ich in der zweiten Version der MA-Berechnungen falsch geschrieben?

Vielen Dank)))

 
Werden die grafischen Objekte bei der Optimierung so konstruiert, dass sie aus dem Graphen abgelesen werden können?
 
Aleksey Vyazmikin:
Werden die grafischen Objekte bei der Optimierung so konstruiert, dass sie aus dem Graphen ausgelesen werden können?

Nein

 
Artyom Trishkin:

Nein

Schlecht...