C'è un MA con qualche spostamento. Sia MA_shift = 5;
Perché è possibile ottenere il giusto valore di MA dalla barra zero del grafico solo se si passa un doppio spostamento negativo a CopyBuffer? CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
C'è un MA con qualche spostamento. Sia MA_shift = 5;
Perché è possibile prendere il valore corretto di MA dalla barra zero del grafico, solo se si passa un doppio spostamento negativo in CopyBuffer? CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] ha ora il valore corretto.
Disegna prima un'immagine e specifica cos'è la "barra zero" per il tuo indicatore con il parametro shift.
il tempo di accesso è lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi usate quello che vi conviene.
secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build
Potete dirmi il modo più semplice e veloce per ottenere il risultato dell'ultima transazione per il simbolo corrente? Perché dalla documentazione tutto è così complicato. Per ottenere il risultato bisogna prima trovare il biglietto dell'affare richiesto, per trovare il biglietto bisogna trovare l'affare nella storia per il suo indice, l'indice deve essere cercato nella storia, senza contare che bisogna anche filtrare per il simbolo.
WinZip: Potreste consigliarmi come ottenere facilmente e rapidamente il risultato dell'ultimo scambio con il simbolo corrente? Perché la documentazione è molto complessa. Per ottenere il risultato, è necessario trovare prima il biglietto del trade richiesto, per trovare il biglietto è necessario trovare il trade nella storia per il suo indice, l'indice deve essere cercato nella storia, senza contare che dovremmo filtrare il filtro per il simbolo.
Per evitare di andare nella storia del trading ogni volta - basta prendere l'affare inOnTradeTransaction con il tipo
TRADE_TRANSACTION_DEAL_ADD - aggiungere una transazione alla storia
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_ticket =0;
long deal_order =0;
long deal_time =0;
long deal_time_msc =0;
long deal_type =-1;
long deal_entry =-1;
long deal_magic =0;
long deal_reason =-1;
long deal_position_id =0;
double deal_volume =0.0;
double deal_price =0.0;
double deal_commission =0.0;
double deal_swap =0.0;
double deal_profit =0.0;
string deal_symbol ="";
string deal_comment ="";
string deal_external_id ="";
if(HistoryDealSelect(trans.deal))
{
deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME);
deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON);
deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT);
deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
}
elsereturn;
ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
{
if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
{
...
}
}
}
}
Cioè il tempo di accesso è uno e lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi qualunque cosa sia conveniente, usatela.
secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build
Sono d'accordo che l'ottimizzatore funziona bene, ma affidarsi sempre all'ottimizzatore del compilatore è sbagliato. Dovete pensare in anticipo a come il codice viene eseguito a livello di memoria, inizializzazione e ritorno di valore. Cioè, calcola il numero di azioni eseguite per operazione e se ci sono meno azioni, il codice è più veloce. E prendete come pratica quella di scrivere un codice ottimale in una volta sola. Nei codici brevi forse non c'è differenza, ma quando c'è un progetto con centinaia di file, è allora che appaiono i ritardi, e ci sarà solo un profiler e riscrivere il codice. Ognuno sceglie il proprio rastrello )).
Se è stato inserito, allora c'è una differenza.
La lettura di una variabile inizializzata è sempre più veloce della lettura di una funzione.
Non c'è differenza. Non riesco a trovare il link ora - ma la risposta è stata data molto tempo fa.
Non c'è differenza. Non riesco a trovare il link ora - ma la risposta è stata data molto tempo fa.
Per Juan e gli avvertimenti del compilatore, non c'è differenza ))
Non c'è differenza. Quando si compila tutto, si riunisce tutto in una sola chiamata. Ecco perché è meglio fare tutto attraverso le funzioni.
E iniziamo anche un thread separato su questo e discutiamone come per i pip e i punti... Questo darà alla gente qualcosa da fare...
Voi amate imporre le vostre opinioni a tutti...
C'è un MA con qualche spostamento. Sia MA_shift = 5;
Perché è possibile ottenere il giusto valore di MA dalla barra zero del grafico solo se si passa un doppio spostamento negativo a CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] ha ora il valore corretto.
C'è un MA con qualche spostamento. Sia MA_shift = 5;
Perché è possibile prendere il valore corretto di MA dalla barra zero del grafico, solo se si passa un doppio spostamento negativo in CopyBuffer?
CopyBuffer(hMA, 0, -2*5, rates_total, MA_Buf);
MA_Buf[0] ha ora il valore corretto.
Disegna prima un'immagine e specifica cos'è la "barra zero" per il tuo indicatore con il parametro shift.
Lettura di una variabile, più veloce di una funzione.
Non proprio, ho controllato quale è più veloce di _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905.
il tempo di accesso è lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi usate quello che vi conviene.
secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build
Potreste consigliarmi come ottenere facilmente e rapidamente il risultato dell'ultimo scambio con il simbolo corrente? Perché la documentazione è molto complessa. Per ottenere il risultato, è necessario trovare prima il biglietto del trade richiesto, per trovare il biglietto è necessario trovare il trade nella storia per il suo indice, l'indice deve essere cercato nella storia, senza contare che dovremmo filtrare il filtro per il simbolo.
Per evitare di andare nella storia del trading ogni volta - basta prendere l'affare inOnTradeTransaction con il tipo
TRADE_TRANSACTION_DEAL_ADD - aggiungere una transazione alla storia
m_symbol.Name() - simbolo corrente, InpMagic - identificatore unico dell'Expert Advisor
non è un fatto, ho controllato che è più veloce di _Symbol o Symbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905
Cioè il tempo di accesso è uno e lo stesso, l'ottimizzazione del codice in MQL è molto cool, quindi qualunque cosa sia conveniente, usatela.
secondo i miei test il tempo di accesso può essere diverso a seconda di dove la variabile è descritta e con quali modificatori, ma c'è un 2-5% di velocità, che in linea di principio può essere attribuito all'implementazione in una particolare build, dipende dal numero di build
Sono d'accordo che l'ottimizzatore funziona bene, ma affidarsi sempre all'ottimizzatore del compilatore è sbagliato.
Stranamente, sono in mql come non documentati.Dovete pensare in anticipo a come il codice viene eseguito a livello di memoria, inizializzazione e ritorno di valore.
Cioè, calcola il numero di azioni eseguite per operazione e se ci sono meno azioni, il codice è più veloce. E prendete come pratica quella di scrivere un codice ottimale in una volta sola.
Nei codici brevi forse non c'è differenza, ma quando c'è un progetto con centinaia di file, è allora che appaiono i ritardi,
e ci sarà solo un profiler e riscrivere il codice. Ognuno sceglie il proprio rastrello )).
Anche google per le parole chiave