Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 973
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Salve.
Per favore, aiutatemi a capire. Quando si controlla il funzionamento di un semplice array (assegnare un valore);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Stampa(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2]), " H=",H," a[0][2]=",a[0][2]);
Ottengo il risultato:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Come mai?
Salve.
Per favore, aiutatemi a capire. Quando si controlla il funzionamento di un semplice array (assegnare un valore);
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Stampa(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2]), " H=",H," a[0][2]=",a[0][2]);
Ottengo il risultato:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Come mai?
Questo è un esempio difficile da riprodurre, ma ho il sospetto che a causa della conversione dei tipi si ottiene un risultato diverso da quello che ci si aspetta.
Sperimentate con questo codice:
poi con questo:
и
e fare una ricerca sul forum per "numeri reali", insomma, la conversione C è un po' confusa all'inizio ;)
Hai mostrato un mucchio di esempi che usano variabili int.
Le mie variabili sono tutte doppie.
Quindi, convertire le variabili nello stesso formato non funzionerà.
Hai mostrato un mucchio di esempi che usano variabili int.
Le mie variabili sono tutte doppie.
Quindi la conversione della variabile nello stesso formato non funzionerà.
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]));
a[0][2]=H;
Stampa(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2]), " H=",H," a[0][2]=",a[0][2]);
Ottengo il risultato:
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.4999999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
Come mai?
Hai delle costanti intere così come l'esempio stesso non è riproducibile - nessun tipo di variabile, bene in generale - il mio "mucchio di esempi" può essere calcolato senza PC, il tuo esempio... Dimmi solo cos'è e^(-91,49999).
Ok, lascia perdere, non posso aiutarti.
È un peccato che "non può aiutare"...
La domanda non è quanto e^(-91,49999). La domanda è perché una variabile di tipo double = H, è erroneamente scritta
calcolato prima numero di tipo double =0.7310585786300049 , ma è scritto 1.0 (incidentalmente double).
Se provate ad usare il mio codice nel tester, penso che il vostro MT4 visualizzerà la stessa cosa.
Se è così, semplicemente non potete usare MQL4 per lavoro ed è pericoloso!
Peccato... "non può aiutare"...
Ho aiutato, aiutare non significa farlo per me o non lo leggerò comunque, e mi interessa il risultato!
Se è così, MQL4 semplicemente non può essere usato per lavoro ed è pericoloso!
Il comportamento di MQL4 / MQL5 nel calcolo delle espressioni matematiche è lo stesso che in C++. Puoi andare in qualsiasi forum C++ con la tua domanda, forse una risorsa ti aiuterà lì
La tua domanda si è spostata dall'aiuto/spiegazione/insegnamento alla discussione sulla piattaforma MT, non ti piace, l'hai ricevuta gratis?
... Nell'antichità la mancanza di comprensione dei processi fisici causava la paura del panico nella gente, il tuono o il terremoto... all'inizio ha causato panico e speculazione, poi è arrivata la religione ))))
Non avresti dovuto essere così arrabbiato.
Se ho ferito i vostri sentimenti personali, mi scuso sinceramente.
Non sto affatto discutendo o giudicando MT4. Ho semplicemente suggerito di eseguire
Ho appena proposto di eseguire il codice che ti ho mandato nel tester di MT4 e se tutte le variabili (H,a[0][2])
sono definiti come doppi e il risultato è lo stesso che per me, ho una domanda:
Qual è il problema? L'ho indirizzato a te.
Ancora una volta:mi dispiace... "non posso aiutare"...
Addio.
che tutte le variabili (H,a[0][2])
sono definiti come doppio
Ancora una volta - hai delle costanti nella tua espressione matematica? - il mio esempio ha anche la costante 5 ... poi ho scritto 5.0 - non è lo stesso per il compilatore! e poi ho portato esplicitamente la costante intera 5 al tipo double ---> per il compilatore sarà lo stesso dell'esempio sopra 5.0
La tua domanda si ripete regolarmente sul forum, anche se potrei non vedere qual è la tua domanda - hai una "formula pesante" e variabili non ovvie - rimuovi il superfluo dagli esempi - array ed esponente - poi vedrai qual è il problema, anche se se rimuovi tutto il superfluo, molto probabilmente troverai dove hai ottenuto non quello che ti aspettavi - io di solito lo faccio ;)
HH: e l'esponente alla potenza di meno 91,49 - non è un numero molto piccolo? tipo doppio ha grande precisione, ma alla centesima potenza e tenendo conto del segno meno - a mio parere, questa espressione perderà precisione, non voglio google, ma la prima cosa che ho scorrere questo Wiki
Grazie per la vostra pazienza!
Provato questo:
A=91.49999999993754;//a[0][2]=91.49999999993754;
Stampa("A=",A);
H= 1/(1+exp(-A));
//A=H;
Stampa("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Risultato:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.499999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Cercherò di scoprire perché 1/(1+exp(-91.49999999993754))=1.0.
Vi prego di capirmi. Sono occupato ora con la messa a punto e l'addestramento della rete neurale. Il codice stesso è grezzo e anche io mi ci confondo... :)
Ho notato che la rete ripete gli errori. E l'errore principale è nel calcolo del sigmoide. NON DOVREBBE ESSERE =1.
Grazie per la vostra pazienza!
Provato questo:
A=91.49999999993754;//a[0][2]=91.49999999993754;
Stampa("A=",A);
H= 1/(1+exp(-A));
//A=H;
Stampa("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2]);
Risultato:
2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.499999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
Cercherò di scoprire perché 1/(1+exp(-91.49999999993754))=1.0.
Vi prego di capirmi. Sono occupato ora con la messa a punto e l'addestramento della rete neurale. Il codice stesso è grezzo e anche io mi ci confondo... :)
Ho notato che la rete ripete gli errori. E l'errore principale è nel calcolo del sigmoide. NON DEVE ESSERE =1.
Quindi non troverete nulla, è quello che ho deciso di controllare, dovete cercare dove è il bug o l'imprecisione nel codice:
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3. H = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754