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

 
barabashkakvn:
Schauen Sie in den Code des Indikators, Funktion OnCalculate().

Folgendes zu tun:

int limit=rates_total-prev_calculated;
   double pr=close[0];
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=ma1Val[0]-pr;
     }
Nichts funktioniert. In MQL4 ist alles klar. Ich kenne MQL5 nicht sehr gut. Ich vermute, dass einige Funktionen aufgerufen werden sollten, um den Preis zu erhalten?
 
forexman77:

Ich gehe wie folgt vor:

Nichts funktioniert. In MQL4 ist alles klar. Ich kenne mich mit MQL5 nicht sehr gut aus. Vielleicht müssen einige Funktionen aufgerufen werden, um den Preis zu erhalten?

Schreiben Sie in OnInit:

//--- установим индексацию для буфера как в таймсерии 
ArraySetAsSeries(ma1Val,true); 
 
forexman77:

Ich gehe wie folgt vor:

Nichts funktioniert. In MQL4 ist alles klar. Ich kenne mich mit MQL5 nicht sehr gut aus. Vielleicht müssen einige Funktionen aufgerufen werden, um den Preis zu erhalten?

Sie können CopyRates (ähnlich wie CopyBuffer) verwenden, um auf die Preisentwicklung zuzugreifen.

Die aktuellen Geld- und Briefkurse können mit SymbolInfoTick oder SymbolInfoDouble (wie im Spread-Indikator) ermittelt werden.

 
barabashkakvn:

Schreiben Sie in OnInit:

Automatisierter Handel:
Sie können CopyRates (ähnlich wie CopyBuffer) verwenden, um auf die Preisentwicklung zuzugreifen. Die aktuellen Werte der Geld- und Briefkurse können mit SymbolInfoTick ermittelt werden.

Nichts funktioniert. Hier ist der gesamte Code:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  "BUY TP"
input int Period_=34;
int ma1Handle;
double ma1Val[1];
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,Period_);
   ArraySetAsSeries(ExtMapBuffer1,true);
   ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   int limit=rates_total-prev_calculated;
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
       MqlTick latest_price;       // Будет использоваться для текущих котировок
      if(!SymbolInfoTick(_Symbol,latest_price))
          {
          Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");return(0);
          }
      double iclose=latest_price.bid;
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=iclose - ma1Val[0];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
forexman77:

Nichts funktioniert. Hier ist der gesamte Code:

Warum nicht? Bei mir funktioniert es:

Der Indikator funktioniert doch, oder?

Dateien:
test.mq5  3 kb
 
Вbarabashkakvn:

Ich wüsste nicht, warum nicht. Das funktioniert bei mir:

Optisch sieht es auf den ersten Blick richtig aus. Aber wenn ich die Differenz zwischen dem Preis und dem gleitenden Durchschnitt neu berechne, erhalte ich eine völlig andere Zahl.

Ich habe EURUSD/1.36421-1.36168=0.00253 überprüft, und der Indikator zeigt 0.00157.

 

Guten Tag.

Gibt es irgendwo vorgefertigte Funktionscodes in MQL5 Sprache, wie KimIV in MQL4 http://forum.mql4.com/ru/38949 hatte?

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
forexman77:

Optisch sieht es auf den ersten Blick richtig aus. Wenn wir jedoch die Differenz zwischen dem Preis und dem gleitenden Durchschnitt neu berechnen, erhalten wir eine völlig andere Zahl.

Ich habe EURUSD/1.36421-1.36168=0.00253 überprüft, und der Indikator zeigt 0.00157 Screenshot an.

Nun, Sie müssen Ihre Anfragen genauer formulieren. Jetzt wird sie richtig gezählt.
Dateien:
test.mq5  3 kb
 
abeiks:

Guten Tag.

Gibt es irgendwo vorgefertigte Funktionscodes in MQL5 Sprache, wie KimIV in MQL4 http://forum.mql4.com/ru/38949 hatte?

In mql5 werden keine Funktionscodes verwendet, sondern Objektbibliotheken. Funktionen sind schwer zu verbinden, in der OOP ist es einfacher: Verbinden Sie die benötigte Bibliothek, erstellen Sie ein Objekt und erhalten Sie die notwendigen Methoden darin - analog zu den Funktionen in algorithmischen Sprachen.
 
Ich habe mich für ein Signal angemeldet. Können Sie mir sagen, ob das Terminal laufen und das Konto geöffnet sein muss?
Grund der Beschwerde: