Errori, bug, domande - pagina 1701

 
pako:
Ci sono pesci nei tikes?
Questo è quello che voglio scoprire.
 
fxsaber:
Questo è quello che voglio scoprire.

Ha senso solo provarlo su qualche lmax. E anche questo è discutibile.

Avete provato i volumi, il sentimento, il vetro? Per me ha un sapore migliore. I miei trade preferiti sono sul nastro e sul vetro, ma non riesco a trovare nulla di simile sul forex.

 
Комбинатор:

Ha senso solo provarlo su qualche lmax. E questo è dubbio.

Avete provato i volumi, il sentimento, il vetro? Per me ha un sapore migliore. Il mio trading preferito è con Ribbon e Gauge, ma non c'è niente di simile sul forex.

Voglio provare lo scambio. In qualche modo mi è tutto chiaro finora cosa fare lì. E non si capisce perché non venga fatto anche sotto forma di indicatori.

Solo i bug mi rallentano.

 
void OnStart()
  {
//---
   Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
  }

Eseguo uno script come questo

e ottenere

DBL_MAX= 1.797693134862316e+308

IntegerToString(int(DBL_MAX) )= -2147483648

IntegerToString(uint(MathAbs(DBL_MAX) ) )= 0

------

Domanda: perché otteniamo effettivamente un numero negativo quando convertiamo un numero doppio positivo in int?

 
Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
   Print("---");
   Print("int(DBL_MAX)= ", int(DBL_MAX) );
   Print("uint(DBL_MAX)= ", uint(DBL_MAX) );
O comunque è sempre lo stesso.
 
fxsaber:
Ho compilato una domanda, anche se sono stanco di farlo così spesso.
Risponde e chiude immediatamente

L'autore dell'indicatore ha deliberatamente codificato il link a se stesso.

Si può vietare questo "hack" o lasciarlo alla coscienza di chi lo usa.

Finora sei la prima persona a cui è stato impedito l'uso del terminale con questa caratteristica da diversi anni.

Quanti indicatori possono essere eseguiti in modalità inattiva e non ne abbiamo idea? Non c'è nessun controllo.

Non capisco bene il patetismo regolare nei vostri post. Chiaramente, non stiamo parlando di un problema massiccio o serio.

1) Solo deliberatamente, coscientemente si può scrivere un indicatore con il comportamento specificato. Chi ti fa scrivere un codice del genere ed eseguire un indicatore del genere? O eseguite altri programmi senza conoscere il loro codice?

2) Non è più maligno di molti altri indicatori con errori logici meno evidenti.

3) Quando si riavvia il terminale, l'indicatore si scarica e non riparte. Se si avvia accidentalmente un tale indicatore - riavviare il terminale. E non eseguirlo più.

Dovrei avere la possibilità di cancellarmi (l'indicatore) nel caso in cui venga lanciata almeno una copia, anche se ha parametri di input diversi. Per fare questo avevo bisogno di capire la maniglia stessa. Purtroppo, in quel momento non sapevo ancora che in MQL è impossibile nel 100% dei casi. Ho quindi deciso di provare un trucco poco intelligente.

Ho esaminato tutte le maniglie. Se coincide con il random che ho scritto nel mio indicatore prima di controllare, significa automaticamente che il manico appartiene a me e posso cancellarmi, se necessario.

È da queste considerazioni che è stato scritto un codice così innocuo, che ha causato una reazione così ambigua, ma ovviamente negativa degli sviluppatori. Vedete, non potete farlo. Che cosa hai fatto? Bene, ho letto il valore del mio buffer attraverso il CopyBuffer. È illegale?!

Fate sapere alla comunità che potete creare in tal modo un'esecuzione incontrollabile in background di qualsiasi codice anche sul terminale senza grafici. Qui c'è una piccola punta di piedi. Se considerarlo o meno un bug è probabilmente una questione di terminologia. La mia comprensione è che gli sviluppatori non sono in grado di cambiare nulla a livello architettonico qui. Ecco perché c'è tanta rabbia. Non posso spiegare questa reazione in nessun altro modo.

Nessuno dirà niente comunque. Un tale rastrellamento sarebbe ben riflesso nell'Aiuto.

 
Если вы случайно запустили такой индикатор - riavviare il terminale. E non eseguirlo più.
Non c'è modo di saperlo. Non è possibile!
 
Dmytro Zelenskyy:
O è ancora lo stesso.

Il tipo int ha una dimensione di 4 byte. Il tipo doppio ha una dimensione di 8 byte. Non dovete fare così - cercare di ottenere 4 byte da 8 byte - potreste finire con un nonsenso - specialmente in questo caso, quando il valore DBL_MAX si trova al di fuori dei valori int.

Se prendete il numero double d=123456.1258 e cercate di ottenere int da esso - allora il numero funzionerà, ma ancora, non potete farlo in questo modo.

 
Karputov Vladimir:

Il tipo int ha una dimensione di 4 byte. Il tipo doppio ha una dimensione di 8 byte. Non dovete fare così - cercare di ottenere 4 byte da 8 byte - potreste finire con un nonsenso - specialmente in questo caso, quando il valore DBL_MAX si trova al di fuori dei valori int.

Se prendete il numero double d=123456.1258 e cercate di ottenere int da esso, il numero funzionerà, ma ancora non potete farlo.

Ok, come convertire correttamente il doppio in int con conservazione del segno (il numero non importa, se va fuori limite allora limitalo a int)

 
Dmytro Zelenskyy:

OK, come si fa a convertire correttamente il doppio in int con il segno intatto (il numero non è importante, se è fuori dal limite allora limitalo a int)?

int

Il tipo intero int ha una dimensione di 4 byte (32 bit). Il valore minimo è -2 147 483 648, il valore massimo è 2 147 483 647. Sulla base di questo,

   int A=(int)2147483647.0;
   int B=(int)2147483646.2;
   int C=(int)2147483647.2;
   int D=(int)2147483648.0;
   Print("A: ",IntegerToString(A),", B: ",IntegerToString(B),", C: ",IntegerToString(C),", D: ",IntegerToString(D));

vedere cosa viene restituito:

A: 2147483647, B: 2147483646, C: 2147483647, D: -2147483648

Penso che il principio sia chiaro.


Motivazione: