Questions d'un "mannequin - page 248

 

Silent:

Quoi - K ? K est initialisé comme faux. Assigné vrai le long du chemin. Ensuite, nous vérifions - si (K). Quoi - K ?


Lisez d'abord la documentation.

Comprenez qu'un bool dans if n'est pas seulement vrai/faux. Pour le compilateur, tout ce qui n'est pas 0 est vrai.

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

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

Lisez la documentation pour commencer.

Comprenez qu'un bool dans if n'est pas seulement vrai/faux. Pour le compilateur, tout ce qui n'est pas 0 est vrai.

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

Ouais, j'ai en quelque sorte manqué ce point. Merci, je le garde à l'esprit.
 

J'essaie d'obtenir le temps/prix de la ligne de tendance mise en évidence.

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));
        };
     };
  }

pour

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Je reçois un avertissement

possible loss of data due to type conversion

Mais

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

Question 1 : comment convertir correctement ?

Pour

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

Je n'obtiens pas l'heure du point de la deuxième ligne, mais l'heure du début de l'histoire par le symbole

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

Question 2 : pourquoi si

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

с

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

J'ai fait toutes sortes de trucs, j'ai supprimé et ajouté des numéros - je n'ai pas le temps d'objet.

Si vous voulez dire l'identifiant de la ligne - comment l'obtenir, je ne trouve pas la fonction.

Mise à jour

line_id

En général, il semble être lié aux indicateurs, alors pourquoi n'est-il pas reflété dans la documentation. Alors...

ObjectGetTimeByValue

dans la section des objets graphiques.

 

Hmm. Je me suis débarrassé de l'avertissement en déclarant comme long

long           TL1_Old_Time,TL2_Old_Time;

Il faut comprendre que.

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

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

Je reçois un avertissement

perte éventuelle de données due à la conversion de type

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

une telle courbe dans la fonction de langage

 
A100:

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

une telle courbe dans la fonction de langage

C'est-à-dire que vous pouvez (et dans mon cas devriez) spécifier une conversion pour les fonctions ?

Merci.

 
Silent:

Il est donc possible (et dans mon cas, nécessaire) de spécifier une transformation pour les fonctions ?

Il s'avère que vous devriez. Mais il est également possible d'ignorer les avertissements, ce qui dans certains cas n'est pas très pratique
 
A100:
Il s'avère que vous devriez. Mais vous pouvez aussi ignorer les avertissements, ce qui, dans certains cas, n'est pas très pratique

OK.

Et ignorer n'est pas une option, et le journal des erreurs est rempli de tout ce qui se passe pendant la compilation, et d'endroits potentiellement problématiques - il faut donc chercher des réponses :)

 

J'ai besoin d'obtenir le nombre de barres de minutes de l'image temporelle haute.

Je reçois un numéro incompréhensible de Bars. Je le démarre sur H1 et j'obtiens 1201. Sur M1, j'en obtiens 6.

Pouvez-vous me dire où se situe le problème ?

//--- для 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);
     }
  }
//+------------------------------------------------------------------+

Vous pouvez le faire.

Et vous avez beaucoup de secondes dans une heure, jusqu'à 72 000 ! J'aimerais en avoir autant en réalité ;)).

Dans le code réel, vous devez toujours vérifier la synchronisation de la plus petite période de temps.