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

 

Auf dem Weg dorthin kamen noch ein paar weitere Fragen auf:

1. Es gibt eine Zeichenkette:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

Der Compiler mißbilligt dies und schreibt"möglicher Datenverlust aufgrund der Typkonvertierung". Was ist hier falsch?

2. Wie legt mql5 Daten in Arrays ab und verteilt sie, in welche Richtung?

 
WindSW:

Auf dem Weg dorthin kamen noch einige andere Fragen auf:

1. Es gibt eine Zeichenkette:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

Der Compiler mißbilligt dies und schreibt"möglicher Datenverlust aufgrund der Typkonvertierung". Was ist hier falsch?

Nun, es ist richtig, Sie versuchen, in die datetime-Variable einen Wert zu schreiben, der von ObjectGetInteger zurückgegeben wurde. Typumwandlung durchführen.

datetime ProvTimeX1=(datetime)ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);
2. Wie werden die Daten in mql5 in Arrays abgelegt und zugewiesen, und in welcher Richtung?

Die Richtung ist immer die gleiche - vom Anfang (der Index ist Null) bis zum Ende, aber wenn nicht angegeben Indizierung mit ArraySetAsSeries Funktion. Wenn sich die Frage auf die Indizierung bezieht.

 

Guten Tag, ich kann die Zahlen nicht dividieren, das Ergebnis ist 0,0

Warum?

   double res =  8000/16000 * 100;
   Print(res);
 
ryzhak.vladimir:

Guten Tag, ich kann die Zahlen nicht dividieren, das Ergebnis ist 0,0

Und warum?



   double res=((double)8000/16000)*100;
   Print(res);
Dokumentation >>> Typumwandlung
 

Es ist natürlich blöd, dass man etwas hinzufügen muss, um etwas zu ändern, ein Taschenrechner ohne Punkte ist in Ordnung und es muss nicht angegeben werden, um welche Art von Daten es sich handelt, aber okay, die zweite Möglichkeit ist, ".0" an das Ende der Ganzzahl anzuhängen

Der korrekte Ausdruck wäre also wie folgt.

double res =8000.0/16000.0*100;
Print(res);
By the way, in einigen Programmiersprache sah eine Variable, so dass das Terminal wählt seinen Typ, vielleicht war es nur für numerische Daten, aber immer noch bequem, ist es nicht hier implementiert, habe ich versucht, in der Dokumentation zu finden - konnte nicht finden?
 
Ich danke Ihnen allen)
 

In Version 4: datetime TimeX2=Time[0]+18000; - Zeitwert um 5 Kerzen vorwärts erhöht

Jetzt in 5 beim Schreiben:

datetime Topen[];
ArraySetAsSeries(Topen,true);
CopyTime(_Symbol,_Period,0,3,Topen);
datetime TimeX2=Topen[0]+18000;

Bei der Fehlersuche gibt es einen Array-Überlauffehler und zeigt auf dieDatetime-Zeile TimeX2=Topen[0]+18000;

Bitte beraten Sie mich, wie ich in 5 das gleiche Ergebnis wie in 4 erhalte?

Nachtrag: Es ist richtig geschrieben, ich habe nur einen Fehler gemacht - in OnInit war das Array leer.

 
WindSW:

In Version 4: datetime TimeX2=Time[0]+18000; - Zeitwert um 5 Kerzen vorwärts erhöht

Jetzt in 5 beim Schreiben:

Bei der Fehlersuche gibt es einen Array-Überlauffehler und zeigt auf dieDatetime-Zeile TimeX2=Topen[0]+18000;

Bitte beraten Sie mich, wie ich in 5 das gleiche Ergebnis wie in 4 erhalte?

datetime b=TimeTradeServer()+60*min; //min - кол-во минут от текущего времени
 

Ich bin auf ein Problem mit dem Zeichnen von Ebenen gestoßen.

void OnInit()
  {
   ObjectCreate(0,oPP,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oPP,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oPP,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,oPP,OBJPROP_WIDTH,2);
   ObjectSetInteger(0,oPP,OBJPROP_RAY,false);
   ObjectCreate(0,oRes1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oRes1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oRes1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oRes1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oRes1,OBJPROP_RAY,false);
   ObjectCreate(0,oSup1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oSup1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oSup1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oSup1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oSup1,OBJPROP_RAY,false);
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
    double iH=iHigh(Symbol(),PERIOD_D1,1);
    double iL=iLow(Symbol(),PERIOD_D1,1);
    double iC=iClose(Symbol(),PERIOD_D1,1);
    double iO=iOpen(Symbol(),PERIOD_D1,1);
    int New_candle=0;
    New_candle=NBar(); // функция появления новой свечи
    if(New_candle==1)
      {
       double range=NormalizeDouble(iH-iL,_Digits);
       double PP=NormalizeDouble((iH+iL+iC)/3,_Digits);
       double R1=NormalizeDouble((2*PP)-iL,_Digits);
       double S1=NormalizeDouble((2*PP)-iH,_Digits);
       TimeStart=iTime(Symbol(),PERIOD_D1,0)-7200;
       TimeFinish=Topen[0]+64000;
       ObjectSetInteger(0,oPP,OBJPROP_TIME,TimeStart);                 // отрисовка PP
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,PP);
       ObjectSetInteger(0,oPP,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,1,PP);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,R1);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,1,R1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,TimeStart);               // отрисовка поддержки
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,S1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,1,S1);
      }
   }
Ich habe es mit Print() überprüft und erhielt normale Berechnungsergebnisse "Beispiel: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40", aber es zeichnet diese Levels nicht. Wenn ich im Terminal über"Objektliste" nachsehe, sind sie nicht da. Was ist das Problem? Wo liege ich falsch?
 
WindSW:

Ich habe Schwierigkeiten, die Ebenen zu zeichnen.

Ich habe es mit Print() überprüft und erhielt normale Berechnungsergebnisse "Beispiel: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40", aber es zeichnet diese Levels nicht. Wenn ich im Terminal über"Objektliste" nachsehe, sind sie nicht da. Was ist das Problem? Wo liege ich falsch?
Drucken Sie die Ergebnisse von ObjectCreate aus, vielleicht liegt dort ein Fehler vor.
Grund der Beschwerde: