Errori, bug, domande - pagina 2570

 
Nikolai Semko:

la stringa è vuota, come se non esistesse, cioè non viene nemmeno allocata la memoria.

Questo si osserva per altri tipi. Se dichiarate una variabile, significa che la memoria è già allocata.
Ma in effetti, una stringa non è un tipo primitivo, ma un tipo di riferimento.

Come potrebbe non esserlo? La memoria per l'oggetto stringa è allocata nell'heap e l'indirizzo di memoria dove inizia il testo è 0x00
 
Igor Makanu:

non riesco a capire come controllarePrintFormat

Nota

PrintFormat() non viene eseguito nel tester di strategia in modalità ottimizzazione.

Qualche pensiero?

Che ne dite diStringFormat e la stringa risultante in un file? (per ogni passaggio per creare il proprio file nella cartella condivisa - in modo che il tester non li sovrascriva).

 
Vladimir Simakov:
Come potrebbe non esserlo? La memoria per l'oggetto stringa è allocata nell'heap, mentre l'indirizzo di memoria a cui inizia il testo è 0x00

La memoria viene allocata solo per il nome e il riferimento, ma non per l'oggetto stesso, poiché non esiste ancora. Questo non è il caso dei tipi primitivi, la memoria è allocata lì al momento della creazione della variabile, anche senza inizializzazione.
Non voglio preoccuparmi della terminologia. Tutti si capiscono comunque.
Tutto questo è ovvio.

 
Vladimir Karputov:

Che ne dite diStringFormat e la stringa risultante in un file? (create un file diverso per ogni passaggio nella cartella condivisa - in modo che il tester non li sovrascriva).

buona opzione, la testerà

ZS: codice riscritto di nuovo per lavorare più velocemente nell'ottimizzatore (i risultati erano 5h, ora 1.5h!!!)

Ora mi sono imbattuto in printf() in aiuto, e ho deciso di controllare tutte le mie stampe, dove ho bisogno di sostituire.... l'ho sostituito e l'ottimizzazione è diventata 22h .... ho trovato dove ho fatto casino, ma naturalmente ho subito pensato che fosse tutto in printf() !!!

)))


Ho provato a controllare printf() nell'ottimizzatore:

int xx=10;
void OnTick()
{  printf("1/x = %f",1/(xx--));
....

Finora ho avuto subito quello che mi aspettavo:

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) testato con errore "critical runtime error 503 in OnTick function (zero divide, module experts\)" a 0:00:00.048


Mi aspettavo che se dice"PrintFormat() non viene eseguito."allora dovrebbe ottenerlo.

 
Ho avuto che l'ottimizzazione del codice accelera l'esecuzione di un fattore 450 :).
 
Igor Makanu:

buona opzione, la testerà

SZY: codice riscritto di nuovo per lavorare più velocemente nell'ottimizzatore (i risultati erano 5h, ora 1,5 h!!!)

Ora mi sono imbattuto in printf() in aiuto, e ho deciso di controllare tutte le mie stampe, dove ho bisogno di sostituire.... l'ho sostituito e l'ottimizzazione è diventata di 22 ore .... Ho trovato dove ho sbagliato, ma naturalmente, ho subito pensato che la causa di tutto in printf() !!!

)))


Ho provato a controllare printf() nell'ottimizzatore:

Finora ho avuto subito quello che mi aspettavo:

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) testato con errore "critical runtime error 503 in OnTick function (zero divide, module experts\)" a 0:00:00.048


Mi aspettavo che se dice"PrintFormat() non viene eseguito."allora dovrebbe ottenerlo.

E ottenere un valore diverso della variabile xx nel test singolo e nell'ottimizzazione.

Solo la chiamata alla funzione printf non viene eseguita.

 
Slava:

E ottenere un valore diverso della variabile xx nel test singolo e nell'ottimizzazione.

Solo la chiamata della funzione printf non viene eseguita.

Sì, è chiaro che anche l'utente può fare così

ma come controllare printf() ?

HH: anche se, se lo sviluppatore ha detto che non è stampato, allora non dobbiamo controllarlo.

 
Igor Makanu:


ma come si fa a controllare printf() ?

Confronta il tempo di un singolo passaggio dell'ottimizzazione e il tempo di un singolo passaggio

 
Slava:

Lo duplicherò:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Alexey Kozitsyn, 2019.09.18 09:34

Alcune domande sulla piattaforma:

1. ci sarà un intervallo di trading consentito aggiunto per il VP via MOEX (ad esempio EURRUB_TOM)? In questo momento non è possibile sapere con certezza se un limite sarà messo fuori, poiché non c'è accesso alla gamma (prezzi massimi e minimi possibili). Si prega di aggiungere.

2. È possibile aggiungere al terminale e al meta-editor uno stato di salvataggio automatico ogni N minuti? Molto carente, poiché con una disconnessione improvvisa si torna allo stato di partenza del programma con perdita di tutte le modifiche! Molto stressante!

Sul primo punto: capire che è impossibile fare trading normale se non si conoscono i limiti! Perché è possibile ottenere queste limitazioni per alcuni strumenti e non per altri?

 

l'aiuto è di nuovo errato, io leggo:https://www.mql5.com/ru/docs/math/mathmax

Функция возвращает максимальное из двух числовых значений.

double  MathMax(
   double  value1,     // первое число
   double  value2      // второе число
   );

Vedo che non ci sono opzioni, tipo di funzione fmax() double , cercando dove posso aver perso un valore frazionario, dopo aver cercato qualsiasi cosa e tutto, eseguo il test:

void OnStart()
{
   long slvl = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   int sl = 300;
   Print(typename(fmax(slvl,sl)));
}

2019.09.20 18:06:34.194 tst (EURUSD,H1) lungo

ZS: Rispondo subito, leggo l'aiuto fino alla fine e vedo la frase: "Il tipo di valore di ritorno corrisponde al tipo senior". ...imho, non è grave, che nel 99% dei casi è sufficiente guardare nell'aiuto per la descrizione della funzione, piuttosto che cercare il significato nascosto tra le linee - è scritto tipo risultato fmin() --> doppio - quindi non ci sono opzioni