Fragen von einem "Dummy" - Seite 248

 

Silent:

Was - K? K wird mit false initialisiert. Auf dem Weg dorthin zugewiesen. Dann prüfen wir - wenn (K). Was - K?


Lesen Sie zuerst die Dokumente.

Verstehen Sie, dass ein bool in if nicht einfach true/false ist. Für den Compiler ist alles, was nicht 0 ist, true.

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
sergeev:

Lesen Sie zunächst einmal die Dokumente.

Verstehen Sie, dass ein bool in if nicht einfach true/false ist. Für den Compiler ist alles, was nicht 0 ist, true.

https://www.mql5.com/ru/docs/basis/types/integer/boolconst

Ja, diesen Punkt habe ich irgendwie übersehen. Danke, ich werde es im Hinterkopf behalten.
 

Ich versuche, den Zeitpunkt/Kurs der hervorgehobenen Trendlinie zu ermitteln.

datetime       TL1_Old_Time,TL1_New_Time,TL2_Old_Time,TL2_New_Time;
double         TL1_Old_Prise,TL1_New_Prise,TL2_Old_Prise,TL2_New_Prise;
int            i;
string         n;

void OnStart()
  {
   if(ObjectsTotal(0,0,OBJ_TREND)<=0)
     {
      Print("-1 Trendlines не обнаружены");
      return;
     };
   for(i=ObjectsTotal(0,0,OBJ_TREND)-1;i>=0;i--)
     {
      n=ObjectName(0,i,0,OBJ_TREND);
      Print("0 Trendline "+n);
      if(ObjectGetInteger(0,n,OBJPROP_SELECTED))
        {
         TL1_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL1_Old_Prise = "+DoubleToString(TL1_Old_Prise));
         TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);
         Print("TL1_Old_Time = "+TimeToString(TL1_Old_Time));
         TL2_Old_Prise=ObjectGetDouble(0,n,OBJPROP_PRICE,0);
         Print("TL2_Old_Prise = "+DoubleToString(TL2_Old_Prise));
         TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);
         Print("TL2_Old_Time = "+TimeToString(TL2_Old_Time));
        };
     };
  }

für

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Ich erhalte eine Warnung

possible loss of data due to type conversion

Aber

ObjectGetInteger
Возвращает значение соответствующего свойства объекта.
Свойство объекта должно быть типов datetime, int, color, bool или char.

Frage 1: Wie wird richtig umgerechnet?

Für

TL2_Old_Time=ObjectGetTimeByValue(0,n,TL2_Old_Prise,0);

Ich erkenne nicht die Zeit des zweiten Zeilenpunktes, sondern die Zeit des Beginns der Geschichte durch das Symbol

2013.05.19 17:01:52     s_Trend_Line_avto_position_1_00 (EURUSD,D1)     TL2_Old_Time = 1970.01.01 00:00

Frage 2: Warum, wenn

ObjectGetTimeByValue
Возвращает значение времени для указанного значения цены указанного объекта.

с

   int     line_id       // номер линии

Ich habe alle möglichen Tricks angewandt, Zahlen gelöscht und hinzugefügt - ich bekomme keine Objektzeit.

Wenn Sie die Zeilenkennung meinen - wie bekomme ich sie, ich kann die Funktion nicht finden.

Update

line_id

Im Allgemeinen scheint es sich um die Indikatoren zu handeln, warum wird dann nicht in der Dokumentation reflektiert. Also dann

ObjectGetTimeByValue

im Abschnitt für grafische Objekte.

 

Ich bin die Warnung losgeworden, indem ich als lang deklariert habe

long           TL1_Old_Time,TL2_Old_Time;

Es sollte klar sein, dass.

ObjectGetInteger
Возвращает значение соответствующего свойства объекта в каком формате?.
Свойство объекта должно быть типов datetime, int, color, bool или char.
 
Silent:

for
TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Ich erhalte eine Warnung

möglicher Datenverlust aufgrund von Typumwandlung

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)

eine solche Kurve in der Sprachfunktion

 
A100:

TL1_Old_Time=(datetime)ObjectGetInteger(0,n,OBJPROP_TIME)

eine solche Kurve in der Sprachfunktion

D.h., Sie können (und sollten in meinem Fall) eine Konvertierung für Funktionen angeben?

Ich danke Ihnen.

 
Silent:

Es ist also möglich (und in meinem Fall auch notwendig), eine Transformation für Funktionen anzugeben?

Es hat sich herausgestellt, dass Sie das sollten. Es ist aber auch möglich, Warnungen zu ignorieren, was in manchen Fällen nicht sehr praktisch ist
 
A100:
Es hat sich herausgestellt, dass Sie das sollten. Sie können aber auch Warnungen ignorieren, was in manchen Fällen nicht sehr praktisch ist

GUT.

Und ignorieren ist keine Option, und das Fehlerprotokoll wird während der Kompilierung mit allem Möglichen und potenziell problematischen Stellen vollgestopft - man muss also nach Antworten suchen :)

 

Ich muss die Anzahl der Balken der Minuten vom höchsten Zeitrahmen erhalten.

Ich bekomme eine unverständliche Nummer von Bars. Ich starte ihn auf H1 und erhalte 1201. Auf M1 erhalte ich 6.

Können Sie mir sagen, wo das Problem liegt?

//--- для H1
//--- переменные для указания параметров функции
   int start = 5; // индекс бара
   int count = 1; // количество баров
   int b=72000;   // секунд в H1
   int bm;        // надо получить
   datetime tm[]; // массив, в котором возвращается время баров
//--- копирование времени 
   CopyTime(_Symbol,PERIOD_CURRENT,start,count,tm);
//--- вывод результата
   Print(tm[0]);

   bm=Bars(_Symbol,PERIOD_M1,tm[0]+b,tm[0]);
   Print("bm = "+bm);
//--- возвращает bm = 1201
   bm=Bars(_Symbol,PERIOD_M1,tm[0]-b,tm[0]);
   Print("bm = "+bm);
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int start=5;
   int count=2;
   datetime _time[];
   datetime _timeM1[];
   int ntime=CopyTime(_Symbol,_Period,start,count,_time);//узнаем время 5 и 4 бара, нумерация как в тайм серии
   if(ntime>0)
     {
      Print("_time[0]=",_time[0]);
      Print("_time[1]=",_time[1]);
      
      datetime endtime=_time[1]-PeriodSeconds(PERIOD_M1);
      int nM1=CopyTime(_Symbol,PERIOD_M1,_time[0],endtime,_timeM1);//получаем массив содержащий время минуток и число минуток
      if(nM1>0)
       {
        Print("Число минуток в период с ",_time[0]," по ",endtime," =",nM1);
       }
      int nbarsM1=Bars(_Symbol,PERIOD_M1,_time[0],endtime);//проверимся
      Print("Число минуток =",nbarsM1);
     }
  }
//+------------------------------------------------------------------+

Das können Sie tun.

Und eine Stunde hat viele Sekunden, bis zu 72.000! Ich wünschte, ich hätte in Wirklichkeit so viele)).

In echtem Code müssen Sie noch die Synchronisierung des kleineren Zeitrahmens überprüfen.

Grund der Beschwerde: