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.
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?