Il POF per gli scolari. - pagina 17

 
Artyom Trishkin:

È esattamente lo stesso che con le variabili.

E la messa a fuoco:

qual è il punto di questo puntatore se il commercio è disponibile nella funzione OnTrade

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

Che senso ha questo puntatore se è disponibile nella funzione OnTrade

Nessuna. Ma con questo ti ho mostrato la differenza tra il modo in cui hai scritto un altro (secondo) oggetto dello stesso tipo, e il modo in cui puoi accedere a un singolo oggetto tramite puntatore.

Era un esempio semplificato per rispondere alla tua domanda sulle differenze e le preferenze.

Sai, fai domande con esempi troppo semplici, e quando ti rispondono, fai un'altra domanda - abbastanza ragionevole - "perché?".

Perché i tuoi esempi non hanno bisogno di essere risolti con le classi.

Ci sono due opzioni qui - o leggi e capisci quello che ti viene detto, o... Oppure risolvi i tuoi problemi proceduralmente. In questo caso non avrete domande "per quale motivo".

Ora immaginate che la vostra classe CTrade non sia nell'ambito globale. И ?

Immaginate anche di non avere un solo oggetto del genere (come è in quasi tutti gli esempi in kodobase), ma tanti simboli quanti ne aggiungete/rimuovete manualmente dal programma. И ?

 
Сергей Таболин:

In questo caso, è

descrizione errata?

La mia comprensione era che se impostato per EA, allora qualsiasi ordine/posizione dovrebbe avere questa magia. ((

Perché improvvisamente non è corretto?

Un EA può avere diversi magiks e tutti sono suoi.

Anche in un solo ulong-magic, puoi immagazzinare un ID comune Expert+alcuni maghi+alcuni ID diversi, e avere ancora molto spazio in più.

 
Artyom Trishkin:

Nessuna. Ma con questo ti ho mostrato la differenza tra il modo in cui hai scritto un altro (secondo) oggetto dello stesso tipo, e il modo in cui puoi accedere a un singolo oggetto tramite puntatore.

Era un esempio semplificato per rispondere alla tua domanda sulle differenze e le preferenze.

Sai, fai domande con esempi troppo semplici, e quando ti rispondono, fai un'altra domanda - abbastanza ragionevole - "perché?".

Perché i tuoi esempi non hanno bisogno di essere risolti con le classi.

Ci sono due opzioni qui - o leggi e capisci quello che ti viene detto, o... Oppure risolvi i tuoi problemi proceduralmente. In questo caso non avrete domande "per quale motivo".

Ora immaginate che la vostra classe CTrade non sia nell'ambito globale. И ?

Immaginate anche di non avere un solo oggetto del genere (come è in quasi tutti gli esempi in kodobase), ma altrettanti caratteri che aggiungete/rimuovete manualmente dal programma. И ?

No, Artyom, faccio domande per capire, non per applicare. E quando si suggerisce una soluzione a un'idea idiota, è allora che chiedo "Perché? Vedete, se chiedo di nuovo a modo mio e mi si risponde bene o male penso, allora tutto quello che mi è stato detto su di esso non lo dimenticherò più e lo farò con comprensione, o con comprensione non lo farò. Ho i miei scarafaggi...)) Non so come fare qualcosa senza capire. Non ho mai risolto un problema di matematica solo partendo da una soluzione campione. Non so come. Avevo 5 F e una B in matematica l'anno in cui ho finito la terza media. Era tutto a posto, mi è stato permesso di fare gli esami con la condizione che se avessi scritto un saggio con una C, mi sarebbe stato permesso di passare gli esami, correggere le F e mi sarebbe stato permesso di andare al GPTU. L'istituto è stato molto più tardi. È lì che mi sono ammalato di programmazione, ma è stata insegnata solo superficialmente. E l'OOP a quel tempo, mi sembra, potrebbe essere stato appena concepito.

 
Alexey Viktorov:

No Artem, faccio domande per capire, non per applicare. E quando si offre una soluzione a un'idea idiota, è allora che chiedo "Perché? Vedete, se chiedo di nuovo a modo mio e mi si risponde bene o male penso, allora tutto quello che mi è stato detto su di esso non lo dimenticherò più e lo farò con comprensione, o con comprensione non lo farò. Ho i miei scarafaggi...)) Non so come fare qualcosa senza capire. Non ho mai risolto un problema di matematica solo partendo da una soluzione campione. Non so come. Avevo 5 F e una B in matematica l'anno in cui ho finito la terza media. Bene, mi hanno permesso di fare gli esami con la condizione che se scrivo un saggio con una C, mi sarà permesso di passare gli esami, correggere le F e mi lasceranno andare alla GPTU. L'istituto è stato molto più tardi. È lì che mi sono ammalato di programmazione, ma è stata insegnata solo superficialmente. E l'OOP a quel tempo, mi sembra, potrebbe essere stato appena concepito.

Allora è strano che lei abbia fatto queste domande in primo luogo.

Lei capisce la differenza tra le variabili dichiarate in scopi diversi. Tu lo fai. E lei fa una domanda come se fosse la prima volta che sente parlare diambiti di variabili.

Quando vi viene mostrato come usare un puntatore a un oggetto creato in precedenza, fate una strana domanda: "perché, se l'oggetto è già visibile? Quindi non vi è stato mostrato come farlo, ma come ottenere un puntatore in quell'esempio e riferirsi all'oggetto tramite il puntatore. E non saranno due oggetti diversi in ambiti diversi, ma uno solo.
Ma cosa succede se l'oggetto non si trova nello scope globale ma dentro qualche altro oggetto? E quell'altro oggetto restituisce semplicemente un puntatore all'oggetto CTrade di cui avete bisogno. In questo caso, l'esempio non darebbe luogo alla domanda "perché? Io penso di no. Ma può essere implicito che si risponde partendo dal presupposto che si capisce la semplicità del tuo esempio e si omette la visibilità globale dell'oggetto "dietro le parentesi".

 
Artyom Trishkin:

Perché improvvisamente sarebbe errato?

Un esperto può avere diversi maghi e tutti sono suoi.

Anche in una magia si può memorizzare un ID comune dell'EA + diverse magie + diversi ID diversi e avere ancora molto spazio a disposizione.

Ho capito. Quando fai una richiesta di scambio, puoi specificare qualsiasi mago. Un EA può aprire ogni nuova posizione con un nuovo mago. Codifico anche il simbolo, TF, ecc. nel mio mago. Tutto questo è chiaro.

Solo che ero sicuro cheSetExpertMagicNumber è come una soluzione globale. Se una richiesta di scambio non specifica esplicitamente una magia, allora prende il valore impostato tramiteSetExpertMagicNumber. Altrimenti, personalmente non ne vedo il senso).

 
Сергей Таболин:

Ho capito. Quando si fa una richiesta di scambio, si può specificare qualsiasi procedura guidata. Un EA può aprire ogni nuova posizione con una nuova magia. Codifico anche un simbolo, TF, ecc. nel mio magik. Tutto questo è chiaro.

Solo che ero sicuro cheSetExpertMagicNumber è come una soluzione globale. Se una richiesta di scambio non specifica esplicitamente una magia, allora prende il valore impostato tramite SetExpertMagicNumber. Altrimenti, personalmente non ne vedo il senso ))

Il metodo imposta il numero magico non su Expert Advisor, ma su un oggetto di una classe commerciale. Ci possono essere diverse classi di trade in un EA e un numero magico separato può essere impostato per ciascuna di esse, che include nel suo valore sia un numero magico comune per l'EA che un numero magico separato per ciascuno degli oggetti di trade.

 
Artyom Trishkin:

Allora è strano che lei abbia fatto queste domande in primo luogo.

Non è affatto strano. Se non capisco affatto l'OOP, allora non ero sicuro, o avevo dei dubbi, di averlo capito correttamente. Ho chiesto chiarimenti, ho avuto conferma e ora sono sicuro (di domani). Come quel monologo di G. Hazanov.

- Immaginate di stare alla finestra, e nella finestra di fronte, ignara, c'è una donna nuda. Cosa senti?

- Fiducia nel futuro.

- E quale sarà la sua prossima mossa?

- Mi trasferisco in un'altra stanza. Lì ho una finestra più grande.

 
Alexey Viktorov:

È corretto supporre che con questa opzione

senza considerare un avvertimento del compilatore, la posizione può essere aperta con un numero Magic diverso da 123 ?

Cioè, un nuovo oggetto sarà creato nella funzione OnTick e il numero magico in esso non sarà uguale a 123.

La posizione sarà aperta con Magic number uguale a "0" - cioè la linea

void OnTick()
{
 CTrade trade;

ricrea l'oggetto e CTrade magic è inizializzato a "0" per impostazione predefinita (nel costruttore della classe) quando si crea un oggetto di classe commerciale:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

La posizione sarà aperta con Magic number uguale a "0" - cioè la stringa

ricreanuovamente l'oggetto e la magia CTrade è inizializzata con zero per impostazione predefinita (nel costruttore della classe) quando si crea l'oggetto della classe commerciale:

Sì? Non crea un nuovo oggetto indipendente?

Motivazione: