MetaTrader 4 Build 529 beta rilasciato con un nuovo compilatore - pagina 27

 
Barbarian:

Probabilmente non hai letto il mio post sopra dove ho descritto ciò che viene scritto per ora usando versioni beta di MT4. In nix ognuno lavora completamente nella propria sandbox, solo l'utente root mette programmi comuni e distribuisce i diritti per il loro uso da parte di altri utenti. Lì l'ideologia è completamente diversa, anche se sembra simile a quella di Microsoft. A proposito, non mi dispiace che la versione beta scriva le impostazioni dell'utente in X:Usersxxx\AppData\Roaming\MetaQuotes\Terminal\, mi dispiace quanto segue:

1. Che crea una sottodirectory X:-Users\xxx\AppData\Roaming\MetaQuotes\Terminal\B5589D10299052C8D921603EBD1F9752\ che fino a quando non ci si arriva non si conosce il suo nome, inoltre cambia il nome ad ogni aggiornamento.

2. Questo percorso viene utilizzato non solo per scrivere le impostazioni dell'utente, ma anche per i file eseguibili - indicatori, Expert Advisors, script, ecc, in generale, tutte le cose per le quali non lascerete entrare un estraneo nel vostro PC, anche con un nome utente diverso. Anche se questo, naturalmente, può essere evitato in seguito, ma a quale prezzo.

Ho più paura del primo punto, perché utilizzando la lettura / scrittura su file, il codice per utilizzare queste operazioni diventerà più complicato.


L'ho letto e sono totalmente d'accordo con te. Quello che ho scritto - non sarebbe una cattiva idea configurare il percorso nel terminale. A volte è utile condividere impostazioni, file, EA... A volte no.
 
Antonsan:

Scrivo in spagnolo. E traduco con Google.

La traduzione in inglese è altrettanto cattiva, che la traduzione russa.

Questo indicatore è preparato per EA e disegna solo poche barre.
Cambiando il timeframe ho osservato che a volte l'indicatore è spesso ripetuto sullo schermo.
A volte sembra eseguire più volte e disegnare correttamente la linea, altre volte sembra che siano copie identiche disposte nella storia.

Questo aveva tre copie identiche nella storia, ma per ridurre lo screenshot, ne ha viste solo due.

Si verifica quando il terminale scarica la storia di altri TF.

Dovreste cancellare tutto il buffer dopo l'inizializzazione dell'indicatore. O disegnare tutte le barre.

 
ALXIMIKS:


Ho descritto la mia idea (far oscillare il grafico, mettendo il presente nel passato e inventando il futuro), se non è molto chiaro, allora ahimè........

Sarei felice se poteste suggerire un altro modo per disegnare ciò che è necessario sulle barre meno con valori adeguati sulle barre più.

Cosa mettere dove non è importante. Ciò che è importante è ciò che dovrebbe essere disegnato come risultato.

Se avete bisogno di una fetta del passato e del futuro, avete bisogno di un buffer e di SetIndexShift per il numero necessario di barre nel futuro (è preso in prestito dal passato).

Se è necessario solo il futuro - ancora un buffer, SetIndexShift( bars ), e riempire solo i valori "bars".

E se avete bisogno di passato completamente (critico, anche le barre più a sinistra dovrebbero essere riempite) e una parte di futuro, allora 2 buffer, ognuno per il suo.

In generale, non vedo il problema.

 

Ora è stato risolto il bug per cui i parametri esterni dichiarati come stringa perdevano i valori. Grazie

Il prossimo problema è con le chiamate iCustom(). Se l'indicatore chiamato contiene parametri stringa, si verifica il seguente errore:


Codice per "_master" :

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave","",0,0);
   Comment(firstBuffer[0]);
   return(0);
}

Codice per "_slave" :

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

Un errore diverso accade quando il parametro non è di tipo stringa

Quando è dichiarato come intero, ricarica l'istanza "_slave" più e più volte (come nel caso in cui il tipo di parametro è sbagliato)

Codice per "_master integer" (utilizzando un parametro di tipo intero nella chiamata iCustom():

#property indicator_chart_window
#property indicator_buffers 1

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave integer",(int)0,0,0);
   Comment(firstBuffer[0]);
   return(0);
}

E il codice per "_slave integer" :

#property indicator_chart_window
#property indicator_buffers 1

extern int dummy = 0;

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

Quando il parametro nell'indicatore chiamato è dichiarato come doppio, allora funziona bene

 

Penso che ci debba essere qualche problema con il terminale, che non cancella correttamente la memoria dati, o qualche altro problema che non conosci.

Se queste situazioni possono capitare a un esperto, sicuramente riceverà dati errati.

Questo è più un programma di disegno per alberi di Natale.

 
mladen:

Quando il parametro nell'indicatore chiamato è dichiarato come doppio, allora funziona bene


Lo controlleremo al più presto. Grazie
 
Antonsan:

Scrivo in spagnolo. E traduco con Google.

La traduzione in inglese è altrettanto cattiva, che la traduzione russa.

Questo indicatore è preparato per EA e disegna solo poche barre.
Cambiando il timeframe ho osservato che a volte l'indicatore è spesso ripetuto sullo schermo.
A volte sembra eseguire più volte e disegnare correttamente la linea, altre volte sembra che siano copie identiche disposte nella storia.

Questo aveva tre copie identiche nella storia, ma per ridurre lo screenshot, ne ha viste solo due.

Hola! Escriba en el español! Se lo traduce al russo! Suerte!
 
Antonsan:

Penso che ci debba essere qualche problema con il terminale, che non cancella correttamente la memoria dati, o qualche altro problema che non conosci.

Se queste situazioni possono capitare a un esperto, sicuramente riceverà dati errati.

Questo è più un programma di disegno per alberi di Natale.

Il terminale non dovrebbe cancellare i buffer. Basta inizializzarli una volta dopo il lancio dell'indicatore.
 
stringo:

Corretto

Corretti anche i punti 1 e 2

Punto 3, stiamo lavorando sul debugger.

Per i punti 4, 5 dobbiamo sapere come riprodurre. Passo dopo passo. Non è riproducibile al volo.

Grazie per il feedback. Codice inviato a servicedesk, #880536.
 

Errore di documentazione:

datetime iVolume

dovrebbe essere

doppio iVolume