Errori, bug, domande - pagina 2729

 
Alexey Viktorov:

Questa non è una caratteristica di mql5, è solo qualche tentativo di insegnare l'ordine.

L'abitudine all'ordine è quando il compilatore dà un avvertimento (o un errore). convertire gli interi in frazioni restituisce 0 - questo è un nonsenso, non un ordine. il 90% dei vecchi codici si romperà in questo modo.

e notate, la variante funzionante era ancora con int! cioè il problema non riguarda la conversione di tipo al passo di sostituzione, ma al passo di calcolo

AGGIUNTO: passato a MQ-demo, aggiornato il terminale di lavoro. Non ha questo problema.

 
Errore di compilazione
class A {  
public:
        static int i;
} a; //Error: unresolved static variable 'A::i'
int A::i = 0;
 
Igor Zakharov:

ordinare è quando il compilatore dà un avvertimento (o un errore). convertire gli interi in frazioni restituisce 0 - questo è un nonsenso, non un ordine. questo è il modo in cui il 90% dei vecchi codici si rompe.

e notare che la variante funzionante era ancora con int! cioè il problema non riguarda la conversione di tipo al passo di sostituzione, ma al passo di calcolo

AGGIUNTO: passato a MQ-demo, aggiornato il terminale di lavoro. Non ha questo problema.

La mancanza di evidenziazione delle opzioni possibili in questo caso non è sospetta?

   ObjectSetDouble (0,name,OBJPROP_ANGLE,dir// тут должен появиться список вариантов переменных double
 
Errore durante l'esecuzione
class A {  
public:
         A() { i = ++ii; printf( "%d", i ); }
        ~A() {           printf( "%d", i ); }
        int i;
        static int ii;
};
int A::ii = 0;
A a[ 2 ];
void OnStart() {}

  • Il risultato in MQL: 1212
  • e in C++: 1221
 
Alexey Viktorov:

La mancanza di evidenziazione delle opzioni possibili in questo caso non è sospetta?

:)

 
Igor Zakharov:

:)

Sì... Strano, per un po' di tempo le variabili di tipo inappropriato non erano evidenziate. Forse l'hanno aggiustato di proposito o faranno attenzione a questo dialogo e lo aggiusteranno di nuovo. In ogni caso, se la funzione richiede una variabile di tipo double, si dovrebbe usare double.

 
È sempre stato un errore.
#define  MACRO( X, Y )
MACRO( 1, 2, 3) //Warning: too many arguments for function-like macro 'MACRO'
Perché un avvertimento? Soprattutto perché sono sempre in numero eccessivo e a volte non si presta attenzione
 
Alexey Viktorov:

Sì... Strano, per un po' di tempo le variabili di tipo inappropriato non erano evidenziate. Forse l'hanno aggiustato di proposito o faranno attenzione a questo dialogo e lo aggiusteranno di nuovo. Comunque, se la funzione richiede il tipo di variabile double, si dovrebbe usare double.

Alexei, ho notato che ti piacciono i link alla documentazione, ne ho uno per te :)

https://www.mql5.com/ru/docs/basis/types/casting

int a double è una conversione implicita valida senza perdita di dati. legittimo.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

domanda sul funzionamento del tester di strategia.

Sto eseguendo il test. L'Expert Advisor apre una posizione con SL e TP. Poi rotola e la posizione viene chiusa senza essere riaperta.

Che cos'è? Un bug? Non ho usato il tester per qualche tempo e non ha avuto questi problemi. Qui sotto c'è il log del tester. Vediamo che la posizione è stata aperta e poi chiusa dopo il rollover ed è una specie di scritta BUY, ma in realtà non mostra nessuna operazione aperta. Ho incollato nel tester il comando

PositionSelect(_Symbol) per controllare se ci sono posizioni aperte dopo il rollover, il risultato è sempre lo stesso - nessuna posizione aperta.


2020.04.28 18:14:14.609 2014.01.09 05:00:00 acquisto immediato 1,00 AUDUSD a 0,88800 sl: 0,88450 tp: 0,89200 (0,88750 / 0,88800 / 0,88750)

2020.04.28 18:14:14.609 2014.01.09 05:00:00 deal #8 buy 1.00 AUDUSD at 0.88800 done (based on order #8)

2020.04.28 18:14:14.610 2014.01.09 05:00:00 affare fatto [#8 comprare 1,00 AUDUSD a 0,88800

2020.04.28 18:14:14.610 2014.01.09 05:00:00 ordine eseguito comprare 1.00 a 0.88800 [#8 comprare 1.00 AUDUSD a 0.88800


2020.04.28 18:14:24.169 2014.01.09 23:59:59 deal #9 sell 1.00 AUDUSD at 0.88980 done (based on order #9)

2020.04.28 18:14:24.169 2014.01.09 23:59:59 rollover deal done [#9 vendere 1,00 AUDUSD a 0,88980

2020.04.28 18:14:24.170 2014.01.09 23:59:59 deal #10 buy 0.00 AUDUSD at 0.8899950 done (based on order #10)

2020.04.28 18:14:24.170 2014.01.09 23:59:59 rollover deal done [#10 buy 0.00 AUDUSD at 0.8899950]


 
Igor Zakharov:

Alexei, ho notato che ti piacciono i link alla documentazione, ne ho uno per te :)

https://www.mql5.com/ru/docs/basis/types/casting

int a double è una conversione implicita valida senza perdita di dati. legittimo.

Metto un link alla documentazione in modo da non dover riscrivere la documentazione nel post e in modo che la gente si abitui a leggere la documentazione. Immaginate che ci sono state persone qui sul forum che non sapevano affatto dell'esistenza di questa documentazione. Per quanto mi riguarda, ho visto una tale immagine nella documentazione, ma non ho cercato di capirla a fondo. L'abitudine di usare variabili del tipo che la funzione richiede è sufficiente per me. Come ultima risorsa, forzerò la conversione al tipo giusto.