Domande su OOP in MQL5 - pagina 42

 
Igor Makanu:

...

chiama tutti in metodi privati, ma c'è una "mentalità Jedi?" per evitare CheckPointer(m_order)==POINTER_INVALID nel codice sorgente

...

È più probabile che questo non sia un trucco, l'algoritmo deve essere tale che questa parte di codice non viene eseguita se non c'è un ordine.

O forse era inteso in quel modo. Ma è improbabile, se c'è un puntatore, non significa che ci sia un ordine, quindi dobbiamo controllare se c'è un ordine.

 
Igor Makanu:

e se la memoria non mi inganna, all'inizio dell'anno era possibile disinserire NULL nel registro e ottenere 0, ora dà un errore

Cambiamenti

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

Bug, bug, domande

Kirill Belousov, 2017.12.14 21:34

Print(NULL); // 'NULL' - expression of 'void' type is illegal
Alert(NULL); // 'NULL' - expression of 'void' type is illegal

Tempo di andare in pensione

 
A100:

Cambiamenti

Sì, infatti, ma mi sono ricordato di come lo facevo in MT4, è così che ho deregistrato i puntatori:

class A {};

A *a;
void OnStart()
{  Print("1 : ",a);
   a= new A;
   Print("2 : ",a);
   a = NULL;
   Print("3 : ",a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1) 1 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 3 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 undeleted objects left

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 oggetto di tipo A a sinistra

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24 byte di memoria persa

Dmitry Fedoseev:

Questo probabilmente non è il caso, l'algoritmo dovrebbe essere tale che questa parte del codice non viene eseguita se non c'è un ordine.

O forse è inteso in questo modo. Ma è improbabile, se c'è un puntatore, non significa che ci sia un ordine, quindi dobbiamo controllare l'esistenza di un ordine.

A seconda del problema, ho già scritto in codice come creare un "oggetto ordine" che guarderebbe esso stesso cosa c'è sul mercato - cerca un ordine nel designer usando un magik, se lo trova lo raccoglie, apre un ordine a un prezzo, il tipo di ordine stesso conta (mercato o pendente), normalizzazione del lotto, riprova ad aprire un ordine se i requotes erano su un tick precedente, dopo un piazzamento di ordine riuscito sul prossimo tick, piazza un sl e così via... tutto questo viene fatto da solo senza alcun intervento dell'"oggetto ordine".

E se l'ordine è stato chiuso, è come se fosse ancora lì per la strategia - in definitiva, la strategia è interessata al profitto dell'ordine (attuale o già chiuso - non importa!) e allostato dell'ordine stesso (non ancora piazzato, attivo o già chiuso)


tutto funziona come previsto, forse hai ragione da qualche parte, ma per ora il codice è ancora in fase di test, i puntatori devono essere controllati, più tardi possiamo provare senza questo controllo... anche se la logica di lavoro implica le seguenti azioni se non c'è tale oggetto.... in linea di principio non rimane molto da rifare tutto agli ordini virtuali, devo ancora pensare ))))

 
Igor Makanu:

Volevo scrivere quello che avevo prima invece di

era così:

ma ha ricordato come controllare le sostituzioni macro in MQL

2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID = 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


e se la memoria non m'inganna, all'inizio dell'anno era possibile disimpegnare NULL nel registro e ottenere 0, ora viene visualizzato un errore

Cioè il comportamento NULL come se non dovrebbe cambiare in futuro, ma cosa viene sostituito lì al posto di NULL non è chiaro, probabilmente se questa situazione viene controllata ora, come scrittoif(CheckPointer(m_order)==POINTER_INVALID)) ) è così per dire il codice corretto))

Sentitevi liberi di applicare. Con il 98% di fiducia NULL nel codice sorgente è qualcosa come #define NULL nullptr
 
Vladimir Simakov:

E poi c'è questo, per lo zucchero:

Il primo semplice test mostra

void OnStart()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

che non è zucchero, ma un diverso... sostanza più liquida

 
A100:

Il primo semplice test mostra

che non è zucchero, ma un diverso... sostanza più liquida.

Perché non c'è). Il NULLA non è né qui né lì. Dovreste usare la funzione CheckPointer(). Il puntatore non ha bisogno di essere azzerato da solo - dopo la cancellazione diventa POINTER_INVALID da solo.

 
Dmitry Fedoseev:

Perché non è lì che sei)) Il NULLA non è né qui né lì. Dovreste usare la funzione CheckPointer(). Non avete bisogno di azzerare il puntatore da soli, diventa POINTER_INVALID da solo dopo la cancellazione.

Sono completamente d'accordo. Se leggete gli amministratori, di solito suona così: "Scrivete correttamente i vostri codici

MQL in generale è sempre difficile, nuova costruzione, nuovi problemi, si inizia a scoprire se l'ho usato in modo errato, qui si va a firmare ))))

 
A100:

Il primo semplice test mostra

che non è zucchero, ma un diverso... sostanza più liquida

Buon uomo. Dove sono le statistiche del suo lavoro da freelance, i suoi prodotti sul mercato, le sue pubblicazioni sulla programmazione? O stai cercando di aprire gli occhi a qualcuno sull'argomento dei puntatori costanti, o di mostrare la tua conoscenza sull'argomento dei tipi di sostanze...? In futuro, si prega di considerare il contesto degli esempi, piuttosto che cercare di riprodurre un errore del compilatore.
 
Vladimir Simakov:
Caro amico. Dove sono le statistiche dei tuoi lavori da freelance, prodotti sul mercato, pubblicazioni relative alla programmazione? O stai cercando di aprire gli occhi a qualcuno sull'argomento dei puntatori costanti, o facendo balenare la tua conoscenza sull'argomento dei tipi di sostanze...? In futuro, si prega di considerare il contesto degli esempi, piuttosto che cercare di riprodurre un errore del compilatore.

Ho un contesto semplice: se il codice (in questo caso una macro) è scritto con un errore, penso che sia possibile segnalarlo (e dare un esempio per provarlo). E in questo contesto non mi è chiaro cosa c'entrinole statistiche

 
A100:

E in questo contesto non mi è chiaro cosa c'entrino le statistiche.

Mantieni le cose semplici e la gente verrà da te.

;)

SZZY: I tuoi post sono quasi sempre una buona idea, ma la presentazione del materiale, beh, non del tutto con buone intenzioni, naturalmente il tuo business, ma imho, vogliono aiutare - aiutare, vogliono essere intelligenti, beh, spesso si rivela così

Dipende da te, ma aumentare la tua autostima con le risorse online - .... Sono troppo pigro per continuare a scrivere.