[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 180

 

Quando si lavora con numeri di tipo doppio, quando è necessario assegnare un certo valore a una variabile (per esempio, zero), autori diversi hanno grafie diverse. Per esempio, a=0; o a=0.0; o a=0.0000; C'è qualche differenza in termini di funzionamento corretto del programma?

 

se ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) || (OrderMagicNumber()==55)) && (ticket==0)){

OrderDelete(OrderTicket());

int err1=GetLastError();

Print(err1);}

Questo pezzo di codice funziona bene da poco...ora viene restituito un errore ERR_OFF_QUOTES. Da notare che l'errore viene restituito da OrderDelete, anche se il numero del biglietto viene inserito manualmente. Qualcuno può chiarire la situazione? Grazie.

 
Elenn:

Quando si lavora con numeri di tipo doppio, quando è necessario assegnare un certo valore a una variabile (per esempio, zero), autori diversi hanno grafie diverse. Per esempio, a=0; o a=0.0; o a=0.0000; C'è qualche differenza in termini di funzionamento corretto del programma?


No, non c'è nessuna regola. Ma personalmente, preferisco scrivere valori doppi costanti usando un punto.

Per esempio:

if ( a == 1.0 )
{}

// ...

b = 3.0;

Innanzitutto, una rapida occhiata al testo mostra che il tipo di valore è doppio.

In secondo luogo, evita alcuni errori. Confronta:

double a=2/3;
double b=2.0/3.0;

Print("a=",a," b=",b);
 

Per favore, aiutatemi. Non vuole eseguire il codice:

int start()
{
int pre12;
{
se(PREZZO_CHIUSO>PREZZO_APERTO)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
ritorno;

}

Cioè, come previsto, se la candela è ascendente - aperta.

Tutto si compila. Ma non succede niente durante il test. Cioè non fa nessun ordine. Fate un buco nell'errore, per favore...

 
NaVolne:

Per favore, aiutatemi. Il codice non vuole essere eseguito:

int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
ritorno;

}

Cioè, se la candela sta salendo, si apre.

Tutto si compila. Ma non succede niente durante il test. Cioè non piazza nessun ordine. Per favore, puntate il dito sull'errore.

Qual è la candela corrente sul grafico? La candela del giorno precedente? La candela della settimana precedente? Se è la candela del giorno precedente, per esempio... sarebbe così

if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) l'helplet iOpen/iClose descrive chiaramente tutto

 
NaVolne:

Per favore, aiutatemi. Non vuole eseguire il codice:

int start()
{
int pre12;
{
se(PREZZO_CHIUSO>PREZZO_APERTO)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
ritorno;

}

Cioè, come previsto, se la candela sta salendo, si apre.

Tutto si compila. Ma non succede niente durante il test. Cioè non fa nessun ordine. Fate un buco nell'errore, per favore...

Il punto è che PRICE_CLOSE e PRICE_OPEN sono costanti, non funzioni e non array di serie temporali. Per ottenere i valori dei prezzi di apertura e chiusura delle candele, dobbiamo fare riferimento a funzioni(iOpen e iClose) o ad array di serie temporali(Open e Close).

Per saperne di più, leggete il tutorial, per esempio questa sezione spiega le variabili predefinite (che includono gli array di serie temporali che volete, Open e Close).

 
Elenn:

Quando si lavora con numeri di tipo doppio, quando è necessario assegnare un certo valore a una variabile (per esempio zero), autori diversi hanno grafie diverse. Per esempio, a=0; o a=0.0; o a=0.0000; C'è qualche differenza in termini di funzionamento corretto del programma?

Capisco che nel caso di

double a = 1;

Il compilatore prende "1" come valore di tipo int e viene eseguita la conversione di tipo (da int a tipo double di destinazione).

E in caso di:

double a = 1.0

o (non c'è differenza)

double a = 1.0000

il compilatore vede "1.(xxxx)" come un valore di tipo doppio e la conversione di tipo non viene eseguita.


P.S.: Grazie a PapaYozh per l'esempio. I pensieri di cui sopra sono venuti dopo.

Immagino che sia più facile per il compilatore quando non cita i tipi troppe volte. O forse ci sono linee con tipi "non convertiti" anche in ex4? Significa che le prestazioni stanno rallentando? Anche se il compilatore dovrebbe ottimizzare il codice.

Lasciate che i programmatori più esperti di MQL4 mi correggano.

 
Grazie per le mega risposte. Leggere, scavare.
 
NaVolne:
Grazie per le mega risposte. Leggere, scavare.
Dovresti leggere il libro di testo, non le nostre risposte! :)) Da crosta a crosta, naturalmente.
 
LexAlex:

Questo pezzo di codice ha funzionato bene fino a poco tempo fa... ora viene restituito l'errore ERR_OFF_QUOTES. Si noti che l'errore viene restituito da OrderDelete, anche se il numero del biglietto è scritto a mano. Qualcuno può chiarire la situazione? Grazie.

Forse è nel livello di congelamento. Forse c'è qualcosa che non va con il conto e il broker ha fermato il flusso a causa delle frequenti transazioni sul conto.