Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 853

 
Priffekt:
Buon pomeriggio, ho cambiato tutti i valori, ma mi interessa la possibilità di disabilitare la funzione stessa nelle impostazioni EA.

Buongiorno.

Quando incolli un pezzo di codice, usa il tasto </>, sarà molto più leggibile, ti ho scritto sopra che "è meglio allegare in questo modo".

Nel post 8518 ti ho inviato il tuo codice in cui ho già aggiunto l'interruttore. Hai solo bisogno di separare la prima linea alle variabili in entrata, la seconda linea a OnTick.

 
Sergey Voytsekhovsky:

Certo, non sono molto adatto al ruolo di consigliere, ma il compito sembra non essere difficile.

Tieni presente che non sono entrato nel tuo codice in sé, c'è molta polemica, anche per me (dummies), a cominciare dal fatto che la tua funzione è di tipo void. Questo tipo è usato sia per indicare che la funzione non restituisce un valore, sia come parametro della funzione indica l'assenza di parametri. E avete return(Exist) alla fine del vostro codice;

Dichiarate una variabile di ingresso, scrivetela come parametro per la vostra funzione e uscite dalla funzione se impostate 'questa variabile su False.

L'evidenziato è assolutamente sbagliato. Nessuno vieta di gestire variabili dichiarate globalmente.

int n = 0;

int OnInit()
 {
  f();
 }

void OnTick()
 {
  Print(n);
  f();
 }

void f()
 {
  n += n*3+12;
 }
 
Priffekt:
Buon pomeriggio, ho cambiato tutti i valori, ma sono interessato alla possibilità di disabilitare la funzione stessa nelle impostazioni EA.

Se volete essere in grado di disabilitare una funzione nelle impostazioni EA, dovete impostare un flag variabile

input bool flag = true; // флаг отключения

void OnTick()
 {
  if(flag)
   f();
 }

void f()
 {
  // что-то выполняем
 }
La funzione f() sarà eseguita solo se flag == true;
 
Alexey Viktorov:

Questo non è assolutamente corretto. Nessuno vieta l'elaborazione di variabili dichiarate a livello globale.

Strano, questa è in realtà una citazione dal manuale MQL5, in pieno sembra così:

"Il tipo void e la costante NULL.

Il tipo void è un tipo fondamentale, insieme ai tipi char, uchar, bool, short, ushort, int, uint, color, long, ulong, datetime, float, double e string. Questo tipo è usato sia per indicare che la funzione non restituisce un valore, sia come parametro di funzione per indicare l'assenza di parametri.

Una variabile costante predefinita NULL è di tipo nullo. Può essere assegnato a variabili di qualsiasi altro tipo fondamentale senza trasformazione. È anche permesso confrontare variabili di tipi fondamentali con NULL".


Ho citato questo frammento perché la funzione nel testo dell'autore ha il tipo void, cioè non dovrebbe restituire altro che ".return(Exist);". Il che probabilmente è sbagliato, non credi?

Tutta la discussione sulla gestione dei dati non è mai passata. Potrei sbagliarmi da qualche parte, dato che sto appena imparando le basi, ma grazie comunque per le informazioni.

 
 
 
Alekseu Fedotov:

"...return(Exist);" ,

valore di ritorno, per funzione

come questo

Sì, hai ragione, sono stato disattento e ho attribuito questo ritorno alla funzione precedente (sopra la quale).

 
Alexey Viktorov:

Non si tratta di questo... Solo che non ho letto attentamente quello evidenziato.

Viod evidenziato significa nessun parametro. Ma non è necessario scriverlo. Nessun parametro, quindi non...

Sì, hai ragione, anch'io sono stato disattento.

 

Domanda per gli esperti.

Sto cercando di scrivere un EA, ho trovato uno script che si adatta alle mie esigenze in termini di funzionalità. Voglio farne una funzione, sto preparando l'ambiente, ovviamente ci sono intersezioni nelle librerie standard. Voglio capire la differenza tra queste voci e se il segno " * " in sé ha un significato segreto, è possibile rinominarle in un unico tipo all'interno delle funzioni future?

CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;


CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 

 

Aiuto, come faccio a trovare la prima coordinata temporale della linea di tendenza?

price = NormalizeDouble(ObjectGetValueByShift("trend",0),Digits);//ЦЕНА НА ТЕКУЩЕМ
Motivazione: