Errori, bug, domande - pagina 81

 
Urain:

La chiamata può essere fatta specificando il periodo, poi verrà restituito il valore del TF specificato,

o senza indicazione del periodo, il valore sarà restituito da quello corrente

(r) :o)

Immagino che questo sia il modo per farlo, giusto?

double  Close(int i,ENUM_TIMEFRAMES tf=PERIOD_CURRENT){...
 
maryan.dirtyn:
int
proprio qui in alto c'è una funzione per il trasferimento da MQL4 a MQL5 e si può trasferire indietro...
 
maryan.dirtyn:
alleluia... questo sì che è un affare))))))
Il valore del timeframe può essere ottenuto in due modi usando una variabile predefinita
int _Period

В переменной _Period хранится значение таймфрейма текущего графика.

e con la funzione

Period

Возвращает значение таймфрейма текущего графика.

ENUM_TIMEFRAMES  Period();
 

Возвращаемое значение

Содержимое переменной _Period, в которой хранится значение таймфрейма текущего графика. Значение может быть одним из значений перечисления ENUM_TIMEFRAMES.
 
maryan.dirtyn:

per farlo funzionare così, deve essere ancora così, giusto?

No, allora l'overloading non funzionerà, non sarai in grado di compilare. Il mio codice è corretto e anche la chiamata nel post successivo è corretta.
 
Urain:
Si può passare da MQL4 a MQL5 e viceversa...

Per trovare il numero di minuti di un dato periodo del grafico, dividete il valore della funzionePeriodSeconds per 60. Questo link mostra un errore 404 :) lo proverò io stesso:

int PeriodMQL4()
  { switch(Period())
     {
      case PERIOD_CURRENT: return(0);
      case PERIOD_M1:     return(1);
      case PERIOD_M5:     return(5);
      case PERIOD_M15:    return(12);
      case PERIOD_M30:    return(30);
      case PERIOD_H1:     return(60);
      case PERIOD_H4:     return(240);
      case PERIOD_D1:     return(1440);
      case PERIOD_W1:     return(10080);
      case PERIOD_MN1:    return(43200);      
      default: return(0);
     }
  }

Questo va bene? non lo farà))) così tanti errori che fa paura)

 
Urain:
No, allora l'overloading non funziona, non puoi compilare. Il mio codice è corretto e anche la chiamata nel post successivo è corretta.
Quando si inserisce una funzione senza designazione esplicita del timeframe, cioè solo Close(0) ... non compila), devo impostare manualmente Close(0,PERIOD_CURRENT) ... ma non è niente )
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
maryan.dirtyn:
int

Ahhhh mi ricordo che è più semplice, ma poi bisogna dividere per 60 per ottenere i minuti.

Возвращает количество секунд в периоде.

int  PeriodSeconds(ENUM_TIMEFRAMES  period=PERIOD_CURRENT ); // период графика



int Per=PeriodSeconds(PERIOD_D1)/60;
Print("Period=",Per);
 
Urain:

Ahhhh mi ricordo che è più semplice, ma poi bisogna dividere per 60 per ottenere i minuti.

Oh grazie)) Che la forza sia con te)
 

Un po' per lavorare con i periodi come in MQL4

//Fumction MinuteToPeriod
ENUM_TIMEFRAMES MinuteToPeriod(int Value)
//Преобразовывает число сикунд в период, возвращаемый как ENUM_TIMEFRAMES
{
//----------------------------------------------------------------------------//
//Work variables / Служебные переменные
ENUM_TIMEFRAMES Result;
//----------------------------------------------------------------------------//
  switch(Value)
  {
  //Перирд текущещего графика
  case   0: return(PERIOD_CURRENT); break;
  //Минуты
  case   1: return(PERIOD_M1);  break;   //1 минута
  case   2: return(PERIOD_M2);  break;   //2 минуты
  case   3: return(PERIOD_M3);  break;   //3 минуты
  case   4: return(PERIOD_M4);  break;   //4 минуты
  case   5: return(PERIOD_M5);  break;   //5 минуты
  case   6: return(PERIOD_M6);  break;   //6 минуты
  case  10: return(PERIOD_M10); break;   //10 минуты
  case  12: return(PERIOD_M12); break;   //12 минуты
  case  15: return(PERIOD_M15); break;   //15 минуты
  case  20: return(PERIOD_M20); break;   //20 минуты
  case  30: return(PERIOD_M30); break;   //30 минуты
  //Часы
  case  60: return(PERIOD_H1); break;    //60 минут  - 1 час
  case 120: return(PERIOD_H2); break;    //120 минут - 2 часа  
  case 180: return(PERIOD_H3); break;    //180 минут - 3 часа
  case 240: return(PERIOD_H4); break;    //240 минут - 4 часа
  case 360: return(PERIOD_H6); break;    //360 минут - 6 часов
  case 480: return(PERIOD_H8); break;    //480 минут - 8 часов
  case 720: return(PERIOD_H12); break;   //720 минут - 12 часов
  //Старшие ТФ
  case 1440: return(PERIOD_D1); break;   //1 день
  case 10080: return(PERIOD_W1); break;  //1 неделя 
  case 43200: return(PERIOD_MN1); break; //1 месяц 
  //Default
  default: return(PERIOD_CURRENT);
  }
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

//Fumction PeriodToMinute
int PeriodToMinute(ENUM_TIMEFRAMES Value)
//Возвращает число секунд в периоде
{
//----------------------------------------------------------------------------//
//Work variables / Служебные переменные
int Result;
//----------------------------------------------------------------------------//
Result = PeriodSeconds(Value)/60;
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 

Sto inserendo un test dal 2010.01.01 ad oggi. Ho emesso la data della prima barra 2009.01.02.

Come posso fare in modo che la prima barra disponibile sia ad esempio 2006.01.02?

Motivazione: