Errori, bug, domande - pagina 313

 

Per qualche motivo non riesco a ottenere il profitto del conto corrente nella funzione OnTester

Questo è il modo in cui ottengo 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Ed è così che ottengo il profitto:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
stringo:

Di cosa stiamo discutendo?

PS Ci sarà sicuramente un messaggio (forse qualche riga più sotto)


Glory sono d'accordo - tutti questi argomenti sono così dispendiosi in termini di tempo, al diavolo gli argomenti. :)

Ma così, quello che si chiama sulla gamba - voi, sono sicuro, sapete tutto perfettamente da soli, ma ancora, se questa funzione è esterna e dichiarata solo tramite dichiarazione, ci sono tali modificatori come "const" e "in" e "out". Forse c'è un difetto in questa funzione. Il fatto è che se è un parametro restituibile, nel caso in cui non venga restituito (nel caso in cui venga restituito tramite "return") viene dato un avviso e avendo una seconda forma di funzione, quando il valore di ritorno viene restituito tramite parametro, dovrebbe essere dato anche un avviso, perché è un valore restituibile. Altrimenti, se il risultato di successo/fallimento fosse restituito tramite un parametro e il valore stesso fosse restituito tramite return, sarebbe impossibile. E il successo o il non successo è anche SEMPRE restituito. In altre parole - ( http://users.telenet.be/bart.demeyere/C++InOutParameters.html ) ecco una soluzione che esiste da molto tempo.


Ma la conversazione in generale come ho notato nulla circa. IMHO, è necessario rispondere a tali domande, se non si prevede di cambiare qualcosa cardinalmente nell'attuale implementazione qualcosa come questo :) - "Sì, c'è un tale problema, sarà risolto nelle prossime versioni del programma, ora abbiamo sistemato il codice, e stiamo solo sistemando gli errori". Nessuno (credo che anche i più inadeguati) si offenderà, ma semplicemente risolvere il problema in sé è importante e necessario.


Quindi, se ci saranno o meno in questa versione tali modificatori molto ( MOLTO ) utili in out e altri, essi permettono significativamente di minimizzare gli errori.


***

Ci vorrà mezza giornata per fare tutta questa corrispondenza. Ho finito. :)

 
Erm955:

Per qualche motivo non riesco a ottenere il profitto del conto corrente nella funzione OnTester

Questo è il modo in cui ottengo 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Ed è così che ottengo il profitto:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);


Dichiarare una variabile globale e assegnarle il valore attuale del bilancio in OnInit().

In OnTester() calcola il profitto totale basato sui risultati di tutte le transazioni completate:

Профит=ТекущийБбаланс - Начальный баланс

e lo si emette in OnTester().


E quello che state cercando di ottenere ora è il profitto corrente non fissato , che è zero se tutte le posizioni sono chiuse.

 
Academic:


Glory sono d'accordo - tutti questi dibattiti sono così dispendiosi in termini di tempo, non preoccupatevi di loro (dibattiti). :)

Ci saranno in questa versione tali modificatori molto ( MOLTO ) utili in out e altri, permettono di minimizzare gli errori.

"Di cosa stiamo discutendo?" - è una frase della mia infanzia che significa "di cosa stiamo discutendo?

Passare un parametro per riferimento è esattamente ciò che significa inout. Ci sono semplicemente implementazioni che sono fuori dal controllo del compilatore.

In effetti, è abbastanza facile analizzare il flusso di esecuzione inserendo delle funzioni (l'esempio fornito da Rashid). Abbiamo deliberatamente rifiutato questo approccio. Il vero motivo era che avrebbe aumentato il nostro tempo di compilazione in modo significativo. Ecco perché abbiamo scelto il modo più semplice: mostrare un avvertimento. È meglio non produrre un tale avvertimento? Sì, dovresti. Se fate un'inizializzazione esplicita, non ci sarà nessun avvertimento.

Ripeto anche che abbiamo una stima ridotta per le espressioni logiche. Significa nel vostro caso che se il primo ObjectGetDouble restituisce false (per esempio, perché l'oggetto, notate l'esterno del programma, improvvisamente non esiste), il secondo ObjectGetDouble non sarà chiamato

Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
  • www.mql5.com
Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this - Документация по MQL5
 
stringo:

"Di cosa stiamo discutendo?" - è una frase della mia infanzia che significa "di cosa stiamo discutendo?

Passare un parametro per riferimento è esattamente ciò che significa inout. Ci sono semplicemente implementazioni che sono fuori dal controllo del compilatore.

In effetti, è abbastanza facile analizzare il flusso di esecuzione inserendo delle funzioni (l'esempio fornito da Rashid). Abbiamo deliberatamente rifiutato questo approccio. Il vero motivo era che avrebbe aumentato il nostro tempo di compilazione in modo significativo. Ecco perché abbiamo scelto il modo più semplice: mostrare un avvertimento. È meglio non produrre un tale avvertimento? Sì, dovresti. Se fate un'inizializzazione esplicita, non ci sarà nessun avvertimento.

Ripeto anche che abbiamo una stima ridotta per le espressioni logiche. Significa nel vostro caso che se il primo ObjectGetDouble restituisce false (per esempio, perché l'oggetto, notate l'esterno del programma, improvvisamente non esiste), il secondo ObjectGetDouble non sarà chiamato


Giusto, non sarà chiamato - questo è un comportamento standard nel codice C.

I modificatori in e out possono essere in aggiunta ai riferimenti. E per default sono sempre dentro e fuori per i riferimenti. Ma posso passare un riferimento con il modificatore in, il che significa che il parametro di questa funzione è sempre in ingresso e non è possibile scriverci dentro anche se è passato per riferimento. Hai letto? http://users.telenet.be/bart.demeyere/C++InOutParameters.html


in: il parametro sarà letto (avvertimento quando non viene letto in ogni ramo*)
(in: il parametro sarà letto (avviso quando non viene letto da nessuna parte)
out: il parametro sarà scritto (avvertimento quando non viene scritto in ogni ramo*)
(out): il parametro può essere scritto (avviso quando non viene scritto da nessuna parte)
in senza out: il parametro non può essere scritto
out senza in: il parametro non può essere letto prima di essere scritto.
*in ogni ramo: in tutti i possibili flussi normali attraverso la funzione (entrambi i rami in una dichiarazione if, tutti i rami in una dichiarazione case,... ), ma non quando viene lanciata un'eccezione. Questo è lo stesso vincolo di una dichiarazione di ritorno, per non avere un comportamento indefinito.


E soprattutto, introdurre le parole chiave in e out, può aiutarci a trovare alcuni problemi già al momento della compilazione. E non vogliamo tutti trovare gli errori il più presto possibile

 

C'è un modificatore const. Il passaggio di un riferimento costante implica esplicitamente un parametro in senza alcun out. Sicuramente non introdurremo entità aggiuntive in, out, inout

 
stringo:

C'è un modificatore const. Il passaggio di un riferimento costante implica esplicitamente un parametro in senza alcun out. Sicuramente non introdurremo entità aggiuntive in, out, inout

Se non lo farai, non lo farai. Ma dovete rendervi conto che allora non otterrete un'ottimizzazione decente. E se ci fosse stato OUT in quell'esempio, l'avviso non sarebbe stato generato. Ma tutto invano - IMHO - ci vorranno tre minuti ma ci sono molti meno errori. E se non vuoi usarlo, non usarlo. Allora tutto è come è sempre stato. Proprio come adesso. :)


Come si fa a fare solo OUT senza IN? Il che significa che qualcosa viene sempre restituito, sapete, come il ritorno di una funzione?

 

Sviluppatori.

1. Deduco che lo spread sulle principali coppie è stato martellato dal maggio 1993, circa 930 barre settimanali al momento attuale?

E nella storia profonda i bar sono stati costruiti sulla base dei giorni.

Pertanto, l'Expert Advisor può essere testato a partire esattamente da maggio 1993 (se usiamo un TF non inferiore a D1)?

Possiamo guardare più in profondità del 9 maggio 1993 su GBPUSD (come viene attuato su EURUSD)?
 

Salve.

Puoi spiegare perché quando si crea un oggetto"Tag grafico" manualmente, non ha il file bmp specificato per gli stati on/off?

Ecco il codice:

ObjectCreate(....);

.......

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "Images\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "Images\off.bmp");

L'etichetta viene creata in modo completamente corretto, nella posizione specificata, con i colori specificati, ecc., ma "Images\on.bmp" e "Images\off.bmp" non sono specificati. Se nella guida MT5
cliccate sull'elenco degli oggetti e impostate manualmente questi file per il marcatore, saranno impostati. Ma perché ObjectSetString non lo fa?

Cosa ne pensate?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MathX:

Cosa ne pensate?

Prova

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "\\Images\\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "\\Images\\off.bmp");


I cambiamenti al certificato arriveranno presto.