Domande da un "manichino" - pagina 248

 

Silent:

Cosa - K? K è inizializzato come falso. Assegnato vero lungo la strada. Poi controlliamo - se (K). Cosa - K?


Leggete prima i documenti.

Comprendete che un bool in if non è solo vero/falso: per il compilatore, tutto ciò che non è 0 è vero.

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

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

Leggete i documenti per cominciare.

Comprendete che un bool in if non è solo vero/falso. per il compilatore, tutto ciò che non è 0 è vero.

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

Sì, in qualche modo mi è sfuggito questo punto. Grazie, lo terrò presente.
 

Cercando di ottenere il tempo/prezzo della linea di tendenza evidenziata

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

per

TL1_Old_Time=ObjectGetInteger(0,n,OBJPROP_TIME);

Ricevo un avvertimento

possible loss of data due to type conversion

Ma

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

Domanda 1: come convertire correttamente?

Per

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

Non ottengo il tempo del secondo punto della linea, ma il tempo dell'inizio della storia dal simbolo

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

Domanda 2: perché se

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

с

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

Ho fatto tutti i tipi di trucchi, cancellato e aggiunto numeri - non ho tempo per gli oggetti.

Se intendi l'identificatore di linea - come ottenerlo, non riesco a trovare la funzione.

Aggiornamento

line_id

In generale, sembra riguardare gli indicatori, allora perché non si riflette nella documentazione. Allora

ObjectGetTimeByValue

nella sezione degli oggetti grafici.

 

Mi sono sbarazzato dell'avvertimento dichiarando come lungo

long           TL1_Old_Time,TL2_Old_Time;

Si deve capire che.

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

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

ottengo un avviso

possibile perdita di dati a causa della conversione del tipo

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

una tale curva nella funzione linguistica

 
A100:

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

una tale curva nella funzione linguistica

Cioè, si può (e nel mio caso si dovrebbe) specificare una conversione per le funzioni?

Grazie.

 
Silent:

Quindi, è possibile (e nel mio caso, necessario) specificare una trasformazione per le funzioni?

Si scopre che si dovrebbe. Ma è anche possibile ignorare gli avvisi, il che in alcuni casi non è molto conveniente
 
A100:
Si scopre che si dovrebbe. Ma si possono anche ignorare gli avvisi, il che in alcuni casi non è molto conveniente

OK.

E ignorare non è un'opzione, e il registro degli errori si riempie di qualsiasi cosa durante la compilazione, e di luoghi potenzialmente problematici - quindi devi cercare le risposte :)

 

Ho bisogno di ottenere il numero di barre di minuti dal timeframe alto.

Ricevo un numero incomprensibile da Bars. Lo avvio su H1 e ottengo 1201. Su M1 ottengo 6.

Puoi dirmi dov'è il problema?

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

Puoi farlo.

E si hanno molti secondi in un'ora, ben 72.000! Vorrei averne così tanti in realtà )).

Nel codice reale è ancora necessario controllare la sincronizzazione del timeframe più piccolo.