Imparare e scrivere insieme in MQL5 - pagina 31

 
Urain:

Pushkin inizializzerà la stringa?

Hmmm... Non sono molto bravo a programmare, ma la stringa non dovrebbe essere resettata ogni volta?

Mi interessa il suo valore base, per esempio, il valore di double è zero, bool è 1, ma cosa?

Dabble esempio:

doppio Statys;

void OnTick()
{
se(Statys == 0)
{OpenBuy();}

}

E sembra funzionare))


(Esattamente, non è azzerato). Non li ho mai inizializzati lì).


 
AUser:

Hmm... Non sono bravo a programmare, ma la stringa non dovrebbe essere resettata ogni volta?

Mi interessa il suo valore base, ad esempio il valore di double è zero, bool è 1, ma cos'è?


Esattamente, non è azzerato). E non li ho mai inizializzati lì)

Nella guida di MQL5 è chiaramente indicato nella sezione Inizializzazione delle variabili:

Qualsiasi variabile può essere inizializzata quando viene definita. Se una variabile non è esplicitamente inizializzata, il valore memorizzato in questa variabile può essere quello che volete. L'inizializzazione implicita non viene eseguita.

Siete solo fortunati per un po', ma un giorno sarete sfortunati e cercherete dolorosamente un errore nel vostro codice, senza sapere che il diavolo si nasconde nei dettagli. Non dovete contare sul 'avrò fortuna'.
 
Rosh:

La sezione Inizializzazione delle variabili della guida di MQL5 afferma esplicitamente:

Siete solo fortunati per il momento, ma un giorno sarete sfortunati e starete agonizzando alla ricerca di un bug nel vostro codice, senza sapere che il diavolo si nasconde nelle minuzie. Non devi contare su "sarò fortunato".
Si, grazie)) Lo farò bene)))
 

Sto scrivendo una semplice funzione per controllare la direzione dell'indicizzazione in un array. Gli array stessi sono presi da OnCalculate(), cioè hanno tipi diversi (double, datetime, ecc.). Ci sono esempi di funzioni terminali nel riferimento che usano il tipo di intestazione f(void &array[]) quando processano array di tipi diversi. Ma il compilatore giura di usare il tipo void nella funzione utente. C'è un modo universale per dire al compilatore che il tipo di parametro dell'array non è importante per una funzione utente?

 

Vorrei chiarire la struttura del risultato della richiesta di compravendita (MqlTradeResult)

double price; // Prezzo nella negoziazione, confermato dal broker

Non restituisce il prezzo di un ordine in sospeso? L'Expert Advisor ha scritto il seguente codice:

double Statys = 0;
void OnTick()
{
if (Statys == 0)
{OpenBuy();}
}

void OpenBuy()
{
MqlTradeRequest o; MqlTradeResult p;
double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);

o.action = TRADE_ACTION_PENDING;
o.symbol = _Symbol;
o.volume = 1;
o.prezzo = 82.000;
o.sl = 81.800;
o.tp = 82.200;
o.tipo = ORDER_TYPE_BUY_STOP;
o.type_filling = ORDER_FILLING_AON;
o.type_time = ORDER_TIME_GTC;
OrderSend(o,p);
Statistiche = p.prezzo;
}


A giudicare dal fatto che abbiamo un sacco di scambi aperti, mi azzardo a indovinare che la risposta è prezzo = 0. Però è un po' strano.


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

C'è un modo universale per dire al compilatore che il tipo del parametro dell'array non è importante per una funzione utente?

Fare una funzione di sovraccarico su diversi tipi di dati nell'array.
Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
AUser:

Vorrei chiarire la struttura del risultato della richiesta di compravendita (MqlTradeResult)

double price; // Prezzo nella negoziazione, confermato dal broker

Non restituisce il prezzo di un ordine in sospeso? L'Expert Advisor ha scritto un tale codice:


A giudicare dal fatto che ci sono molti scambi aperti, mi azzardo a indovinare che la risposta è prezzo = 0. Questo è un po' strano però.


Un ordine pendente non implica la conclusione di un accordo. Date un'occhiata alla guida alla struttura di MqlTradeResult:

Descrizione del campo

Campo

Descrizione

retcode

Codice di ritorno del server commerciale

affare

Deal ticket, se è stato eseguito un accordo. Riportato nell'operazione commerciale TRADE_ACTION_DEAL

ordine

Ordine del biglietto, se è stato inserito un biglietto. Notificato durante un'operazione commerciale TRADE_ACTION_PENDING

volume

Volume del commercio confermato dal broker. Dipende dal tipo di riempimento dell'ordine

prezzo

Prezzo dell'affare, confermato dal broker. Dipende dal campo di deviazione nella richiesta di compravendita e/o dal tipo di compravendita

offerta

Prezzo di offerta corrente di mercato (prezzo di requote)

chiedere a

Prezzo d'offerta attuale del mercato (prezzi di requote)

commento

Commento del broker alla transazione (di default, riempito con una decrittazione)

Inoltre, si prega di inserire il codice correttamente.
 
Ok, basta. Dobbiamo anche inizializzare le stringhe? Non è un tipo atomico.
 
Rosh:

Un ordine in sospeso non costituisce una negoziazione. Guardate l'aiuto per la struttura MqlTradeResult:

Inoltre, si prega di inserire il codice correttamente.
Capito)
 
TheXpert:
Ok, basta. Dobbiamo anche inizializzare le stringhe? Non è un tipo atomico.
Non dovreste fare affidamento sull'inizializzazione predefinita. Mai.
Motivazione: