Errori, bug, domande - pagina 460

 
voix_kas:

L'EA richiede l'accesso a un indicatore. Potete ottenerlo in almeno tre modi: IndicatorCreate(...) o iCustome(...) o, se si tratta di un indicatore standard, per esempio, iMA(...).

Da quanto ho capito, quando si utilizza una qualsiasi variante, è necessario rilasciare esplicitamente l'handle risultante (IndicatorRelease).

La domanda riguarda la scelta del modo di chiamare l'indicatore. Quali sono i pro e i contro di ogni metodo? Interesse prioritario per la velocità di elaborazione.

IndicatorCreate - per gli indicatori standard, in modo che nel caso del polso siano gli analoghi della chiamata iMA. iCustom - per indicatori personalizzati "custom". Cioè essenzialmente cose diverse.

La velocità di chiamata di iMA e IndicatorCreate(IND_MA) dovrebbe essere comparabile, ma non l'ho controllata.

Per quanto riguarda IndicatorRelease - ha senso chiamarlo, se non avrete bisogno di tornare a questo indicatore dopo il calcolo. Non ho queste situazioni - se qualche indicatore è necessario (con un dato set di parametri), allora sarà necessario per un ulteriore calcolo/ricalcolo, e se i parametri di input dello script cambiano, allora tutto sarà reinizializzato e saranno creati nuovi handle.

 

Infatti, il 99% delle volte, chiamare IndicatorRelease è un errore logico da parte del programmatore.

La creazione di un indicatore è una delle operazioni più costose, che innesca meccanismi molto profondi del loro calcolo. Cercare di chiudere la maniglia di un indicatore è anche un'operazione molto costosa, se si pensa ai processi reali della sua implementazione. La frequente creazione e chiusura di indicatori mostra che lo sviluppatore non capisce affatto l'essenza delle operazioni.

È molto facile da capire.

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorRelease
  • www.mql5.com
Доступ к таймсериям и индикаторам / IndicatorRelease - Документация по MQL5
 
Renat:

Infatti, nel 99% dei casi, chiamare IndicatorRelease è un errore logico da parte del programmatore.

La creazione di un indicatore è una delle operazioni più costose che innesca meccanismi molto profondi per calcolarli. Cercare di chiudere la maniglia di un indicatore è anche un'operazione molto costosa se si pensa ai reali processi sottostanti alla sua implementazione. La frequente creazione e chiusura di indicatori mostra che lo sviluppatore non capisce affatto l'essenza delle operazioni.

È molto facile da capire.

Permettetemi di intervenire nella conversazione e dire: i meccanismi di m-programma, terminale, forex (infatti, perché siamo riuniti qui)

Il motivo per cui siamo qui sono semplici verità, quindi cosa ci impedisce di capirle e di falciare i rubli - o il software che stiamo per vendere,

E se non c'è la possibilità di farlo dobbiamo tacere fino a quando non avviene un "miracolo"!

 
Im_hungry:

Permettetemi di intervenire nella conversazione e dire: i meccanismi del programma, il terminale, il forex (fondamentalmente ciò per cui siamo qui)

Dobbiamo stare attenti a quello che facciamo e a quello che non vogliamo fare,

Dovremmo tacere fino a quando non accadrà un "miracolo"!

Un bellissimo esempio di flusso di pensiero incomprensibile. Invidio tali capacità.
 
Renat:
Un bell'esempio di flusso di pensiero incomprensibile. È invidiabile poterlo fare.

Sicuramente un Jedi di livello 80, il Maestro Yoda sta tranquillamente meditando in disparte :)

E non c'è dubbio, hanno "aiutato i bambini senza casa in caso di problemi" (da 12 Chairs).

 

Non molto tempo fa, il mio codice funzionante ha smesso di compilare.

Sta dando la colpa al codice della libreria standard:

'GetLastError' - ambiguous call to overloaded function with the same parameters SymbolInfo.mqh  718     10
'GetLastError' - ambiguous call to overloaded function with the same parameters	SymbolInfo.mqh	725	57
Apparentemente a causa di quello che c'è nel mio codice:
#import "kernel32.dll"
uint GetLastError();
#import
.....
kernel32::GetLastError() 
.... 

Come faccio a "digerire" questo per far funzionare di nuovo il mio programma? Non sono sicuro di cosa sia cambiato nella nuova build di MQL.

Le funzioni importate non possono avere lo stesso nome di quelle integrate? Come continuare a vivere?

 
7134956:

Come faccio a "digerire" questo in modo che il mio programma funzioni di nuovo? Non capisco bene cosa sia cambiato nella nuova build di MQL.

basta aggiungere un parametro all'interno di

#import "Kernel32.dll"
uint GetLastError(int);
#import
 
sergeev:

aggiungere un semplice parametro all'interno di

Grazie! Sembra che abbia aiutato. Ma è una specie di stampella passare un parametro che è ridondante.
 
Pensiamo a questo come a una caratteristica o a un autobug.
 
sergeev:
Pensiamolo come una caratteristica o un autobug.

Potresti toglierlo e avvolgerlo in una libreria separata, rinominandolo.

Potresti anche provare a chiedere spazi nominativi, ma probabilmente è inutile.