Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1116

 
Roman:

L'aiuto dice che dovrebbe essere restituito il valore di timeframe, non l'identificatore convertito conEnumToString()
La variabile _Period restituisce int.
ENUM_TIMEFRAMES Period() implica anche il ritorno di int.

Lei è l'unico che lo implica. In realtà Period() restituisce il valore di enum_TIMEFRAMES.

Se stampate i valori delle costanti in questa enumerazione, vedrete numeri che vi sono già familiari.

Ed è sempre stato così. È stato così fin dalla nascita di MQL5.

Ed è chiaramente scritto nell'aiuto cosa viene restituito:

Ilvalore può essere uno dei valori dell'enumerazione ENUM_TIMEFRAMES.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Lei è l'unico che implica questo. Infatti, Periodo() restituisce il valore dell'enumerazione ENUM_TIMEFRAMES.

Se stampate i valori delle costanti in questa enumerazione, vedrete numeri che vi sono già familiari.

Ed è sempre stato così. È stato così fin dalla nascita di MQL5.

E l'Aiuto ha scritto chiaramente cosa viene restituito:

Che tipo pensate che restituisca l'enumerazione ENUM?)
E il riferimento dice chiaramente
Restituisce il valore del timeframe del grafico corrente.

Stampalo da solo

Print(PERIOD_M30);
Print(PERIOD_H1);
 
Roman:

E l'enumerazione ENUM che tipo pensi che restituisca?))
E il riferimento dice chiaramente
Restituisce il valore del timeframe del grafico corrente.

Stampa il tuo.

Cosa vuoi dimostrarmi?

Sono perfettamente consapevole di ciò che viene stampato e di quali dati vengono restituiti, quando e dove.

Volete il numero di minuti del periodo corrente?

Prendilo in questo modo:

PeriodSeconds(Period())/60;

o come questo:

PeriodSeconds(PERIOD_CURRENT)/60;

O come questo:

PeriodSeconds()/60;
 
Artyom Trishkin:

Cosa vuoi dimostrarmi?

Niente a te, non ho scritto a te del problema, ho scritto agli sviluppatori.
Stampate di più su M30, e su H1 e vedete la differenza.

Print(_Period);
 
Roman:

Non ti interessa, non ho scritto a te del problema, ho scritto agli sviluppatori.
Stampa di più su M30, e su H1 e vedi la differenza.

Non è un problema. Non lo è mai stato.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Artyom Trishkin, 2020.04.09 22:11

Cosa vuoi dimostrare?

Ho una buona comprensione di cosa viene stampato e quali dati vengono restituiti, quando e dove.

Volete il numero di minuti del periodo corrente?

li prendono in questo modo:

PeriodSeconds(Period())/60;

o come questo:

PeriodSeconds(PERIOD_CURRENT)/60;

o come questo:

PeriodSeconds()/60;

 
Roman:

Non è necessario, non ho scritto il problema a voi, l'ho scritto agli sviluppatori.
Stampa di più su M30 e H1 e vedi la differenza.

Non riesci a staccarti da MQL4?

Fatelo in MQL4 in questo modo:

PeriodSeconds(Period())/60;

o come questo:

PeriodSeconds(PERIOD_CURRENT)/60;

O come questo:

PeriodSeconds()/60;

E stampare i valori risultanti.

 
Artyom Trishkin:

Non riesci a staccarti da MQL4?

Fatelo in MQL4 in questo modo:

o come questo:

o come questo:

e stampare i valori risultanti.

Non ho usato mql4 )) e non mi sono abituato.
Perché devi dividere ancora per 60?
Dove si dice questo nell'aiuto?
Sono già le tue stampelle che bypassano il bug.
Ora controlla la tua stampella, su tutti i timeframe

Print(_Period / 60);
 
Roman:

Non ho usato mql4 )) e non mi sono abituato.
Perché dovete dividere ancora per 60?
Dove si dice questo nell'aiuto?
Sono già le tue stampelle che bypassano il bug.

facepalm ...
 
Roman:

Variabile _Period e funzione Period() fino a M30 incluso, visualizza il valore in minuti.
Se periodo M1 allora 1
Se il periodo M2 allora 2
...
Se periodo M30 allora 30

È logico che il periodo orario sarà di 60
periodo di due ore 120
tre ore 180
ecc.

Ma da H1 in poi vengono visualizzati i valori sbagliati.

se il programma emette "valori sbagliati", bisogna vedere cosa "pensa" il programma, ma può pensare solo in formato binario

Ho controllato e l'ha fatto:

void OnStart()
{

   ENUM_TIMEFRAMES allperiod[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2,
                                  PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1
                                 };
   for(int i = 0; i < ArraySize(allperiod); i++)
      Print(UintToBinary((uint)allperiod[i]));

}
//+------------------------------------------------------------------+
string UintToBinary(uint n)
{
   string r = "";
   if(n == 0) return("0");
   while(n != 0)
   {
      r = (n % 2 == 0 ? "0" : "1") + r;
      n /= 2;
   }
   return(r);
}
//+------------------------------------------------------------------

2020.04.10 00:38:57.118 tst (EURUSD,H1) 0

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 101

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1111

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000011

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000001100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000011000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110000000000000001


 
Artyom Trishkin:
facepalm ...

Davvero manica...

Stampare in tempi diversi.

Print(_Period);
2020.04.09 23:39:49.963 VP (EPM20,M1)   1
2020.04.09 23:39:53.135 VP (EPM20,M3)   3
2020.04.09 23:39:53.758 VP (EPM20,M5)   5
2020.04.09 23:39:54.377 VP (EPM20,M10)  10
2020.04.09 23:39:55.094 VP (EPM20,M15)  15
2020.04.09 23:39:55.679 VP (EPM20,M30)  30
2020.04.09 23:39:56.384 VP (EPM20,H1)   16385  //Почему не 60 ?
2020.04.09 23:39:57.071 VP (EPM20,H4)   16388  //Почему не 240 ?
2020.04.09 23:39:57.641 VP (EPM20,D1)   16408  //Почему не 1440 ?
2020.04.09 23:39:58.181 VP (EPM20,W1)   32769  и т.д.
2020.04.09 23:39:58.768 VP (EPM20,MN1)  49153