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

 
Vitaliy Sendyaev:

Guten Tag!

Wissen Sie, wie man einen Indikator für den Markt erstellt?

Ich habe eine Datei mit der Erweiterung .mq5 und einige Include-Dateien mit der Erweiterung .mqh.

Soweit ich weiß, kann man die .mqh-Datei nicht über Ressourcen an die .mqh-Datei anhängen. Sollte ich wirklich alles manuell in eine Datei konvertieren?

Und wenn es eine neue Version gibt:? Es ist verrückt +)))

Danke.

Sie senden die kompilierte (.ex5) Datei an den Markt. Diese Datei wird bereits alle Ihre Include-Dateien enthalten.

 
Vladimir Karputov:

Eine Gegenfrage: "Warum müssen Sie hier explizit ein Symbol zuweisen?

Wenn Sie diese Funktion verwenden, müssen Sie m_symbol in OnInit ein Symbol zuweisen:

Wenn Sie in diesem Fall den EA auf dem Symbol "EURUSD.m" ausführen, wird "EURUSD.m" automatisch für m_symbol festgelegt.

Das Problem ist, dass der Expert Advisor auf einem anderen Symbol schwebt. Und ich muss die Kurse für EURUSD.m aktualisieren.

Ich habe diese Lösung gefunden, aber ich glaube, sie ist falsch

void OnTick()
  {   
// Обновляем котировки
    if(!m_symbol.Name("EURUSD.m")) //Обновляем котировки по второму символу
    RefreshRates();
    if(!m_symbol.Name("GBPUSD.m")) //Обновляем котировки по символу где висит советник
    RefreshRates();
 
EgorKim:

Das ist die Sache, der EA schwebt über einem anderen Symbol. Und ich muss die Notierungen für EURUSD.m aktualisieren.

Ich habe diese Lösung gefunden, aber ich glaube nicht, dass sie richtig ist

Schreiben Sie das Symbol EURUSD.m in InInit für m_symbol. Oder sagen Sie mir, was Sie tun und wie Sie es tun - während ich versuche, Rätselraten zu spielen.
 

Leute, bitte um Rat!!!

Wie kann die Funktion TimeCurrent() die Werte von Stunden und Minuten an die Variablen übergeben, damit diese mit diesen Werten arbeiten können?

Oder ich möchte z.B. Stunden und Minuten mit String (12:15) übergeben und 12 und 15 an die Variablen übergeben. Wie kann man das tun?
 
TaywinLannister:

Leute, bitte um Rat!!!

Wie kann die Funktion TimeCurrent() die Werte von Stunden und Minuten an die Variablen übergeben, so dass Sie mit diesen Werten arbeiten können?

Oder ich möchte zum Beispiel die Stunde und die Minuten als String übergeben (12:15) und 12 und 15 an die Variablen weitergeben. Wie kann man das tun?

TimeToStruct

 
Konstantin Nikitin:

TimeToStruct

Ich danke Ihnen!
 
Hallo! Ich habe den Indikator von Metatrader 4 auf Metatrader 5 umgestellt, aber jetzt zeigt er die Pfeile an den falschen Stellen wie in Metatrader 4 auf dem Minuten-Zeitrahmen. Habe ich irgendwo einen Fehler gemacht oder liegt es an den unterschiedlichen Kursen auf dem Minutenchart der 4 und 5 Versionen des Terminals eines Brokers?
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_color1  clrBlue
#property indicator_color2  clrRed

#property indicator_width1  1 
#property indicator_width2  1 
//+------------------------------------------------------------------+

double     SignalBufferRed[];
double     SignalBufferBlue[];
datetime TimeAlert=0;
ENUM_TIMEFRAMES tf0,tf1,tf2,tf3,tf4,tf5; // Было инт
int S=0;
//+------------------------------------------------------------------+
int OnInit()
  {
  
    SetIndexBuffer(0,SignalBufferBlue);
    SetIndexBuffer(1,SignalBufferRed); 
//--- задать рисование линии 
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ARROW); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger(0,PLOT_ARROW,233); 
   //--- задать рисование линии 
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_ARROW); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger(1,PLOT_ARROW,234); 
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,5); 
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-5); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); 





   tf0=Period();
   tf1=next_period(tf0+1);
   tf2=next_period(tf1+1);
   tf3=next_period(tf2+1);
   tf4=next_period(tf3+1);
   tf5=next_period(tf4+1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
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 i,limit;

   limit=rates_total-prev_calculated-1;
   if(rates_total<1) return(0);
   double d=(high[1]-low[1]+high[2]-low[2])/2;
   for(i=limit; i>=0; i--)
     {
      if(S<1 && NormalizeDouble(open[i]-close[i],_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)<0)
        {
         SignalBufferBlue[i]=low[i]-d;
...
         S=1;
        }
      if(S>-1 && NormalizeDouble(open[i]>close[i],_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)>0)
        {
         SignalBufferRed[i]=high[i]+d;
...
         S=-1;
        }
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES next_period(int per) // Было инт
  {
   if(per > PERIOD_W1)  return(PERIOD_MN1);  // Былы цифры вместо период_
   if(per > PERIOD_D1)   return(PERIOD_W1);   // Былы цифры вместо период_
   if(per > PERIOD_H4)    return(PERIOD_D1);  // Былы цифры вместо период_
   if(per > PERIOD_H1)     return(PERIOD_H4);  // Былы цифры вместо период_
   if(per > PERIOD_M30)     return(PERIOD_H1);  // Былы цифры вместо период_
   if(per > PERIOD_M15)     return(PERIOD_M30);   // Былы цифры вместо период_
   if(per >  PERIOD_M5)     return(PERIOD_M15);  // Былы цифры вместо период_
   if(per >  PERIOD_M1)     return(PERIOD_M5);  // Былы цифры вместо период_
   if(per == PERIOD_M1)     return(PERIOD_M1);  // Былы цифры вместо период_
   return(Period());
  }
//+------------------------------------------------------------------+
 
Yevgen Butov:
Hallo! Ich habe den Indikator von metatrader 4 zu metatrader 5 konvertiert, aber jetzt zeigt er Pfeile an den falschen Stellen wie in metatrader 4 auf einer Minutenperiode. Habe ich irgendwo einen Fehler gemacht oder liegt es an den unterschiedlichen Kursen auf dem Minutenchart der 4 und 5 Versionen des Terminals eines Brokers?

Führen Sie einen einfachen Test in MQL5 und MQL4 Indikator - Druck bar Zeit #0:

Print("Bar #0: ",time[0]);

Das wird helfen zu verstehen, was was ist...

 
Vladimir Karputov:

Führen Sie einen einfachen Test in MQL5 und MQL4 Indikator - Druck bar Zeit #0:

Das wird helfen zu verstehen, was was ist...

Dieser Text wurde zu OnCalculate hinzugefügt, die Balkenzeit ändert sich jetzt jede Minute, aber es gibt jetzt keine Pfeile mehr. Worin könnte der Fehler liegen?

ArraySetAsSeries(time,true); 

   ArraySetAsSeries(open,true); 

   ArraySetAsSeries(high,true); 

   ArraySetAsSeries(low,true); 

   ArraySetAsSeries(close,true); 
 
Yevgen Butov:

Dieser Text wurde zu OnCalculate hinzugefügt, die Balkenzeit ändert sich jetzt jede Minute, aber jetzt gibt es keine Pfeile mehr. Worin könnte der Fehler liegen?

Sie haben es nicht richtig verstanden. Vergleichen Sie die ausgedruckten Werte. Vergleiche Taktzeit #0 und Taktzeit #rates_total-1. Vergleichen Sie sowohl dort als auch dort...