2012.02.26 15:47:46 Tester file C:-Usersopenlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DD286B60B1DB9B9989A2FFC701\MQL5\Files\signal10000.csv open error [32]
Per prima cosa, controlla cosa hai nella cartella C:-Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5Files\
Secondo: non c'è nessun errore 32 in MQL5. Strano... Controllate l'handle dopo aver provato ad aprire il file e l'ultimo codice di errore dopo aver provato ad aprirlo?
Nella modalità dei calcoli matematici non ci sono corse della storia - a causa di questo la velocità massima è raggiunta quando è necessario fare calcoli matematici senza utilizzare operazioni di trading. In questa modalità, se ottimizzi un Expert Advisor di trading , dovrai modellare da solo l'ambiente di mercato (dati storici, spread, ecc.). In questo caso, è possibile utilizzare qualsiasi dato storico, prenderlo da un file pre-preparato.
DenisR: Cos'è la "modalità di calcolo matematico"?
In questa modalità, solo OnTester() viene chiamato; tuttavia, la complessità e il volume dei calcoli in OnTester() non è limitato. Se si calcola il profitto del vostro Expert Advisor per i parametri di input dati, è possibile utilizzare l'algoritmo genetico del tester per l'ottimizzazione.
Per favore aiutatemi a capire, il mio cervello sta bollendo.
1. Capisco che il passaggio al sistema operativo x64 è legato al fatto che è impossibile "partizionare" più di 4 GB di RAM su 4 byte. Ho il sistema operativo x64, perché i puntatori occupano 4 byte (non riguarda solo mql, ma anche C++))?
2. Domanda su MT4: perché quando chiamo la funzione dll:
#import "MemoryDLL.dll"void fn(double j[]); // Подозреваю что так отдается адрес?#import
int start()
{
double dVal[1];
fn(dVal);
retutn(0);
}
La variabile dll può essere presa normalmente in queste varianti:
extern"C" __declspec(dllexport) void fn(double &j); // Почему так работает????
// и такextern"C" __declspec(dllexport) void fn(double *j); // Думаю что должно работать только так
Anche se presumo che puntatore e riferimento, per idea non dovrebbero essere compatibili, per esempio perché il puntatore al doppio prende 4 byte nel mio caso.
Sì, probabilmente sarebbe la cosa giusta da fare. Solo MKL non funziona in qualche modo da C comunque (posso sbagliarmi).
c'è una differenza nel passaggio - tutto deve essere passato solo per riferimento &, per puntatore ' * ' solo gli oggetti di classe possono essere passati
Pensavo che un'area di memoria elementare fosse composta da due parti: un indirizzo e un valore. Se un indirizzo viene trasmesso, deve essere in qualche variabile con l'indirizzo dell'area da trasmettere nel campo "valore". Ecco perché non capisco come queste varianti possano funzionare correttamente allo stesso tempo:
extern"C" __declspec(dllexport) void fn(double &j);
// и такextern"C" __declspec(dllexport) void fn(double *j);
// Прототип для MQL - void fn(&s[]);
Possiamo provare a trovare una spiegazione come - viene trasferita l'area di memoria "così com'è" e il lato ricevente decide cosa fare con essa (scrivere l'indirizzo al valore o copiare l'indirizzo). Ma questa ipotesi è distrutta dal fatto che non funziona così:
Si potrebbe di nuovo cercare una spiegazione - nei primi duplicati, l'indirizzo nel campo "valore" è dato come input, e la parte ricevente decide cosa fare con esso. In contrasto con questo, il fatto che in C++ il compilatore dice di non farlo, a suo parere o così:
Sono giunto alla conclusione che un link e un puntatore sono essenzialmente la stessa cosa. Ci sono leggere differenze:
Si può scrivere un indirizzo in un riferimento solo una volta, in un puntatore molte volte.
Sintassi diversa
Un punto molto importante è: se la funzione chiamata ha un riferimento o un puntatore come argomento, l'indirizzo viene effettivamente passato. Questo è molto importante da capire quando si chiama da dll.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Ora mi sta dando...
2012.02.26 15:47:46 Tester file C:-Usersopenlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DD286B60B1DB9B9989A2FFC701\MQL5\Files\signal10000.csv open error [32]
Per prima cosa, controlla cosa hai nella cartella C:-Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5Files\
Secondo: non c'è nessun errore 32 in MQL5. Strano... Controllate l'handle dopo aver provato ad aprire il file e l'ultimo codice di errore dopo aver provato ad aprirlo?
Cos'è la "modalità matematica"?
Cos'è la "modalità di calcolo matematico"?
In questa modalità, solo OnTester() viene chiamato; tuttavia, la complessità e il volume dei calcoli in OnTester() non è limitato. Se si calcola il profitto del vostro Expert Advisor per i parametri di input dati, è possibile utilizzare l'algoritmo genetico del tester per l'ottimizzazione.
Per favore aiutatemi a capire, il mio cervello sta bollendo.
1. Capisco che il passaggio al sistema operativo x64 è legato al fatto che è impossibile "partizionare" più di 4 GB di RAM su 4 byte. Ho il sistema operativo x64, perché i puntatori occupano 4 byte (non riguarda solo mql, ma anche C++))?
2. Domanda su MT4: perché quando chiamo la funzione dll:
La variabile dll può essere presa normalmente in queste varianti:
Anche se presumo che puntatore e riferimento, per idea non dovrebbero essere compatibili, per esempio perché il puntatore al doppio prende 4 byte nel mio caso.
Funziona così:
Non funziona:
Almeno come funzionerebbe (voglio passare più array)? Non voglio farlo via backtracking.
Almeno come farlo correttamente (voglio passare diversi array)? Perché non voglio passare dalla porta di servizio.
E in MQL, chi metterà & nella dichiarazione di funzione?
Sì, probabilmente sarebbe la cosa giusta da fare. Ma non è che MQL funzioni comunque in C (potrei sbagliarmi).
Sì, probabilmente sarebbe la cosa giusta da fare. Solo MKL non funziona in qualche modo da C comunque (posso sbagliarmi).
c'è una differenza nel passaggio - tutto deve essere passato solo per riferimento &, per puntatore ' * ' solo gli oggetti di classe possono essere passati
Pensavo che un'area di memoria elementare fosse composta da due parti: un indirizzo e un valore. Se un indirizzo viene trasmesso, deve essere in qualche variabile con l'indirizzo dell'area da trasmettere nel campo "valore". Ecco perché non capisco come queste varianti possano funzionare correttamente allo stesso tempo:
Possiamo provare a trovare una spiegazione come - viene trasferita l'area di memoria "così com'è" e il lato ricevente decide cosa fare con essa (scrivere l'indirizzo al valore o copiare l'indirizzo). Ma questa ipotesi è distrutta dal fatto che non funziona così:
Si potrebbe di nuovo cercare una spiegazione - nei primi duplicati, l'indirizzo nel campo "valore" è dato come input, e la parte ricevente decide cosa fare con esso. In contrasto con questo, il fatto che in C++ il compilatore dice di non farlo, a suo parere o così:
o questo:
Tutto sommato, non vedo altro che contraddizioni.Tu chiedi, io rispondo.
Sono giunto alla conclusione che un link e un puntatore sono essenzialmente la stessa cosa. Ci sono leggere differenze:
Un punto molto importante è: se la funzione chiamata ha un riferimento o un puntatore come argomento, l'indirizzo viene effettivamente passato. Questo è molto importante da capire quando si chiama da dll.
Puoi dirmi come trovare il valore esatto dell'incrocio della linea stocastica principale e dell'indicatore?
Visivamente è facile, ma come implementarlo programmaticamente?