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

 
vladzeit:

Ich danke Ihnen für das Beispiel.

Könnten Sie bitte klarstellen... wenn ich richtig verstanden habe.

Mit this=(datetime)OrderGetInteger weisen wir OrderGetInteger an, den explizitenDatentyp datetime zuverwenden. ?

Gilt diese Regel für alle Funktionen, die keinen expliziten Typ haben oder nicht mit dem Typ der zugewiesenen Variablen übereinstimmen, oder ist dies nur ein Sonderfall?

Ich möchte wissen, ob dies eine Regel ist oder nur als Sonderfall zu beachten ist.

Es handelt sich nicht um einen Sonderfall. Wenn Sie einen Wert eines anderen Typs in eine Variable eines Typs schreiben, wird der Compiler Sie davor warnen. Und es liegt an Ihnen zu entscheiden, von welcher Variable die Daten genommen werden sollen.

In Ihrem Fall - bei der Rückgabe eines expliziten Datetime-Wertes aus einer Funktion mit dem Typ long - ist es natürlich sicher, und Sie sollten den Typ des Wertes, den Sie von der Funktion erhalten, explizit angeben.

Wenn Sie jedoch einen doppelten Wert in eine int-Variable aufnehmen, müssen Sie wissen, ob die Daten durch eine solche Zuweisung nicht verloren gehen. Wenn Sie sicher wissen, dass der Rückgabewert in int passt, geben Sie int explizit an, wenn Sie es nicht wissen, nehmen Sie ihn als Double-Variable.

 
Artyom Trishkin:

Dies ist kein Sonderfall. Wenn Sie einen Wert eines anderen Typs in eine Variable eines Typs schreiben, wird der Compiler Sie davor warnen. Und es liegt an Ihnen zu entscheiden, von welcher Variable die Daten genommen werden sollen.

In Ihrem Fall - bei der Rückgabe eines expliziten Datetime-Wertes aus einer Funktion mit dem Typ long - ist es natürlich sicher, und Sie sollten den Typ des Wertes, den Sie von der Funktion erhalten, explizit angeben.

Wenn Sie jedoch einen doppelten Wert in eine int-Variable aufnehmen, müssen Sie sich darüber im Klaren sein, dass bei einer solchen Zuweisung keine Daten verloren gehen. Wenn Sie sicher wissen, dass der zurückgegebene Wert in int passt, geben Sie int explizit an, wenn Sie es nicht wissen, nehmen Sie ihn in eine double-Variable auf.

Vielen Dank für die ausführliche Antwort. Ich hab's.

 

(Guten Tag an Sie alle)))


Ich habe MT4 gemeistert, aber MT5 .... verstehe ich nicht((( Es gibt nicht viele Beispiele, und die, die nicht erklären, was ich brauche.

Bitte beraten Sie, wie man MT5 mit einigen Beispielen von MT4-Code verwenden oder geben Sie mir einige Links zu den Indikatoren mit ähnlichen Fällen.


1.

if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)


2.

while(A<1)
  {
   ObjectDelete("MB");
   OP=iOpen(NULL,Timeframe,br);
   CL=iClose(NULL,Timeframe,br);
 if(OP>CL)
   bear=(OP-CL)/_Point;
 if(SizeCandles*FactorCandleы <= bear)
   A=2;
 if(br>iBars(NULL,Timeframe))
  {
   Lab("MB", " No Bear candle", 4, 510, 1, clrWhite);
   break;
  }
   br++;
  }


3. ich verstehe nicht, wie man einen Elementvergleich mit dem iMa-Griff durchführt... Ich kenne die Strukturen!!! Ich habe es versucht, aber MT5 ist im Gegensatz zu MT4 nicht so klar...

   
 for(int i=limit; i>0 && !IsStopped(); i--)
   {
   ma1=iMA(NULL,Period(),Ma1,0,MAMethod1,MAPrice1,i);
   ma2=iMA(NULL,Period(),Ma2,0,MAMethod2,MAPrice2,i);
   ma3=iMA(NULL,Period(),Ma3,0,MAMethod3,MAPrice3,i);
   ma4=iMA(NULL,Period(),Ma4,0,MAMethod4,MAPrice4,i);
   MA=iMA(NULL,Period(),MAPeriod,0,MAMethod,MAPrice,i);
//----
 if(filtercase==true && xPer==Period())
  {
//--- High signal
 if(Open[i]<Close[i] && MA>Open[i] && MA<Close[i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]=High[i]+shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer1[i]=0.0;
//--- Low signal
 if(Open[i]>Close[i] && MA<Open[i] && MA>Close[i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]=Low[i]-shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer2[i]=0.0;
  } 
 

Die allgemeinen Unterschiede der Programmierung im MT5 sind bereits bekannt! Aber ich kann noch nicht programmieren (die Würfel gehen nicht auf)))))

Es ist wichtig für mich, in meinem Kopf auf diese Teile und Module von MT5.... zu HÖREN. Ich verstehe die Logik in MT4 schnell, aber MT5 "würfelt" nur ....

Danke für die Tipps)))

 
Bitte ändern Sie das feste Los meines Roboters in %-Los. Der Code steht in meiner privaten Nachricht.
 
Sprut112:
Bitte ändern Sie das feste Los meines Roboters in %-Los. Code unter vier Augen.

Freiberuflich.

 
kopeyka2:

(Guten Tag an Sie alle)))


Ich habe MT4 gemeistert, aber MT5 .... verstehe ich nicht((( Es gibt nicht viele Beispiele, und die, die nicht erklären, was ich brauche.

Bitte beraten Sie, wie man MT5 mit einigen Beispielen von MT4-Code verwenden oder geben Sie mir einige Links zu den Indikatoren mit ähnlichen Fällen.


1.


2.


3. ich verstehe nicht, wie man einen Elementvergleich mit dem iMa-Griff durchführt... Ich kenne die Strukturen!!! Ich habe es versucht, aber MT5 ist im Gegensatz zu MT4 nicht so klar...

Die allgemeinen Unterschiede der Programmierung im MT5 sind bereits bekannt! Aber ich kann noch nicht programmieren (die Würfel gehen nicht auf)))))

Es ist wichtig für mich, in meinem Kopf auf diese Teile und Module von MT5.... zu HÖREN. Ich verstehe die Logik in MT4 schnell, aber MT5 "würfelt" nur ....

Danke für die Tipps)))

Lesen Sie zunächst die Dokumentation sorgfältig durch. Der Abschnitt"Zugang zu Zeitreihen und Indikatoren".

Es sollte klar sein, wie man die Uhrzeit erhält, sie in die Struktur "einfügt" und dann Stunde und Minute getrennt erhält.

Es gibt auch CopyBuffer, um Indikatorwerte anhand ihres Handles zu erhalten.

Wenn Sie noch Fragen haben...


 
kopeyka2:

(Guten Tag an Sie alle)))


Ich habe MT4 gemeistert, aber MT5 .... verstehe ich nicht((( Es gibt nicht viele Beispiele, und die, die nicht erklären, was ich brauche.

Bitte beraten Sie, wie man MT5 mit einigen Beispielen von MT4-Code verwenden oder geben Sie mir einige Links zu den Indikatoren mit ähnlichen Fällen.


1.


2.


3. ich verstehe nicht, wie man einen Elementvergleich mit dem iMa-Griff durchführt... Ich kenne die Strukturen!!! Ich habe es versucht, aber MT5 ist im Gegensatz zu MT4 nicht so klar...

Die allgemeinen Unterschiede der Programmierung im MT5 sind bereits bekannt! Aber ich kann noch nicht programmieren (die Würfel gehen nicht auf)))))

Es ist wichtig für mich, in meinem Kopf auf diese Teile und Module von MT5.... zu HÖREN. In MT4 verstehe ich die Logik schnell, aber MT5 "würfelt" nur ....

Danke für die Tipps)))

Wenn Sie mehrere Zeitreihen eines Zeitrahmens vergleichen müssen, arbeiten Sie mit einem Array wieMqlRates-> und verwenden SieCopyRates, um dieses Array zu füllen.

Es ist praktisch, die Zeit in einerMqlDateTime-Struktur zu speichern -> verwenden SieTimeToStruct, um die Zeit vondatetime in eineMqlDateTime-Struktur zu konvertieren.

Ihr Beispiel 1 sieht dann wie folgt aus:

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime=3; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int start_pos  =0;                           // start position 
   int count=(InpBarTime<10)?10:InpBarTime+1;   // data count to copy 

   int result=CopyRates(Symbol(),Period(),start_pos,count,rates);
   if(result!=count)
     {
      Print("Ordered: ",IntegerToString(count),", received ",IntegerToString(result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct(rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if(Period()<=PERIOD_H4 && SDateTime.hour==0 && SDateTime.min==0)
     {

     }
  }
//+------------------------------------------------------------------+
Dateien:
Test_en.mq5  3 kb
 
Bitte sagen Sie mir, ob es eine Regel gibt.
In mql5 kann ein und dieselbe Aufgabe auf viele Arten gelöst werden.
Wenn ich mich in einem Code auf eine Instanz einer Klasse beziehe, zum Beispiel: CSymbolInfo. m_symbol.Ask()... und so weiter.
und im selben Code weise ich einen Ask-Wert ohne Bezug auf die Klasse zu. z.B.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Frage: Führt dies zu Fehlern oder ist es innerhalb der Grenzen eines Codes oder sogar einer Funktion normal?

 
kopeyka2:

(Guten Tag an Sie alle)))


Ich habe MT4 gemeistert, aber MT5 .... verstehe ich nicht((( Es gibt nicht viele Beispiele, und die, die nicht erklären, was ich brauche.

Bitte beraten Sie, wie man MT5 mit einigen Beispielen von MT4-Code verwenden oder geben Sie mir einige Links zu den Indikatoren mit ähnlichen Fällen.


1.


2.


3. ich verstehe nicht, wie man einen Elementvergleich mit dem iMa-Griff durchführt... Ich kenne die Strukturen!!! Ich habe es versucht, aber MT5 ist im Gegensatz zu MT4 nicht so klar...

Die allgemeinen Unterschiede der Programmierung im MT5 sind bereits bekannt! Aber ich kann noch nicht programmieren (die Würfel gehen nicht auf)))))

Es ist wichtig für mich, in meinem Kopf auf diese Teile und Module von MT5.... zu HÖREN. In MT4 verstehe ich die Logik schnell, aber MT5 "würfelt" nur ....

Danke für die Tipps)))

Arbeiten mit Indikatoren - am Beispiel desMA Force Codes

Schritt 1: Auf globaler Programmebene deklarieren Sie die Variable handle_iMA, die den Indikator-Handle speichern wird

int    handle_iMA;                           // variable for storing the handle of the iMA indicator

Schritt 2: Erstellen eines Indikators in OnInit() und Rückgabe der Variablehandle_iMA

//--- create handle of the indicator iMA
   handle_iMA=iMA(m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

Schritt 3: stellen Sie eine Anfrage in OnTick() - kopieren Sie eine bestimmte Menge an Daten(count) aus dem Indikator inma[] array

   double ma[],force[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(force,true);
   int start_pos=0,count=InpTrendBars+3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) || 
      !iGetArray(handle_iForce,0,start_pos,count,force))
     {
      PrevBars=0;
      return;
     }

Schritt 4: Arbeiten Sie mit dem Indikatordatenfeld und vergleichen Sie seine Elemente:

   bool trend_up=(ma[1]>ma[2]);
   bool trend_down=(ma[1]<ma[2]);
 
vladzeit:
Bitte sagen Sie mir, ob es eine Regel gibt.
In mql5 kann ein und dieselbe Aufgabe auf viele Arten gelöst werden.
Wenn ich mich in einem Code auf eine Instanz einer Klasse beziehe, zum Beispiel: CSymbolInfo. m_symbol.Ask()... und so weiter.
und im selben Code weise ich einen Ask-Wert ohne Bezug auf die Klasse zu. z.B.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Frage: Führt dies zu Fehlern oder ist es innerhalb der Grenzen eines Codes oder sogar einer Funktion normal?

Es ist besser, sich nicht verwirren zu lassen und einen Ansatz zu verwenden: entweder die HandelsklasseCSymbolInfo oder Systemfunktionen wie SymbolInfoXXXX.