Errori, bug, domande - pagina 2021

 

Giocare l'insetto

  1. Vai a Metaquotes-Demo.
  2. Solo AUDJPY è nella panoramica del mercato e aprire il suo grafico.
  3. Ricaricate il terminale e aspettate una connessione completa - le citazioni stanno arrivando.
  4. Esegui lo script sul grafico

void OnStart()
{  
  for (int i = 0; i < 5; i++)
    Print(SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE));
}


Il risultato è il seguente

2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0


Riavviare.

2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851


CioèSYMBOL_TRADE_TICK_VALUE restituisce degli zeri alla prima esecuzione se Sleep() non è usato;


HI A proposito del simbolo invisibile in Market Watch. Se provate ad aprire il grafico USDJPY (premete Enter e inserite "USDJPY") prima dell'inizio dello script, non funzionerà. Se dopo aver eseguito lo script funziona. Anche se il Market Watch non è cambiato.

 
fxsaber:

Giocare l'insetto

  1. Vai a Metaquotes-Demo.
  2. Solo AUDJPY è nella panoramica del mercato e aprire il suo grafico.
  3. Ricaricate il terminale e aspettate una connessione completa - le citazioni stanno arrivando.
  4. Esegui lo script sul grafico


Il risultato è il seguente


Riavviare.


CioèSYMBOL_TRADE_TICK_VALUE restituisce degli zeri alla prima esecuzione se Sleep() non è usato;


HI A proposito del simbolo invisibile in Market Watch. Se provate ad aprire il grafico USDJPY (premete Enter e inserite "USDJPY") prima dell'inizio dello script, non funzionerà. Se dopo aver eseguito lo script funziona. Anche se il Market Watch non è cambiato.

Aggiungete questo ciclo all'inizio dello script

   for(int i = 0; i < SymbolsTotal(true); i++)
     Print(SymbolName(i, true));

E vedere quanti simboli vengono stampati.

Alla prima esecuzione, l'accesso a AUDJPY aggiunge solo AUDUSD e USDJPY alla panoramica del mercato e solo alla seconda chiamata attraverso queste coppie ottiene la proprietà del simbolo. Questo è ciò che causa il problema con OrderCalcMargin nel mio caso.

 
fxsaber:

È stato scritto molte volte. Non lo correggono per qualche motivo.

Ho avuto una risposta dall'ufficio assistenza. Lo aggiusteranno.
 

Ciao a tutti!

Aiuto per un principiante, per favore.

Viene eseguita la funzione per trovare il prezzo massimo. Come è possibile calcolare e restituire al codice il NUMERO DI BARRE con un certo prezzo massimo?

 
Alexey Viktorov:

Aggiungete un ciclo come questo all'inizio dello script

E vedere quanti caratteri vengono stampati.

Alla prima esecuzione, l'accesso a AUDJPY aggiunge solo AUDUSD e USDJPY alla panoramica del mercato e solo alla seconda chiamata attraverso queste coppie ottiene la proprietà del simbolo. Questo è ciò che causa il problema con OrderCalcMargin nel mio caso.

Credo che si troverà il modo di farlo.

Anatoli Kazharski:
Ho ricevuto la risposta dal Service Desk. Lo aggiusteranno.

Grazie.

 

Per quanto riguarda il bug "intorno" a OrderCalcMargin() ha fatto un'applicazione al SR

 
Kirill Belousov:

È difficile essere sicuri quando c'è unacontraddizione diretta nella guida di MQL4/5:

...Ricordate che i parametri vengono passati all'indietro nella funzione, cioè l'ultimo parametro viene calcolato e passato per primo, poi il penultimo, e così via. Il parametro che viene prima dopo la parentesi di apertura viene calcolato e passato a sua volta.


..
.Si noti che l'ordine delle espressioni x1,..., xn è garantito.

Qual è la contraddizione qui? È al contrario e questo è tutto. Non c'è un'affermazione inversa.
 
Alexey Navoykov:
Qual è la contraddizione? All'indietro, tutto qui. Non c'è nessuna dichiarazione contraria.

- Queste due raccomandazioni sono in sezioni separate della guida.

Quando si legge sotto

"Chiamare una funzione con argomenti x1, x2,..., xn"

l'ordine delle espressioni x1,....,xn è garantito, a quale ordine stai pensando?

Sull'ordine x1,...,xn o sull'ordine xn,....,x1 ?

 
Kirill Belousov:

- Queste due raccomandazioni sono in sezioni separate della guida.

Quando si legge sotto

"Chiamare una funzione con argomenti x1, x2,..., xn"

l'ordine delle espressioni x1,....,xn è garantito, a quale ordine state pensando?

L'ordine x1,...,xn o l'ordine xn,....,x1 ?

Sì, hai ragione, è confuso.

Tuttavia, penso che sia una cattiva pratica stabilire la logica del proprio algoritmo su un particolare ordine di argomenti in ogni caso. Tanto più quando questi calcoli da destra a sinistra confondono la comprensione del codice. Ecco perché se volete applicarlo, dovreste farlo solo in alcuni posti non critici come le stampe.

 
Kirill Belousov:

L'ordine di calcolo delle espressioni in Print() è da destra a sinistra. Più o meno... Ciao... L'ho anche controllato prima :)

MQL5 Reference\Base del linguaggio\Operazionied espressioni\Altre operazioni

Chiamata di funzione con argomenti x1, x2,..., xn

Si noti che l'ordine delle espressioni x1,..., xn è garantito.

Dimostra ancora una volta l'utilità della parola chiave C++ inline (c'era un'opinione qui che è presumibilmente obsoleta).
Tra l'altro, inline significa effettivamente che il programmatore si rifiuta di usare l'ordine di calcolo dei parametri della funzione e se il compilatore decide di rendere una funzione inline, il compilatore può usare l'ordine di calcolo in avanti come più efficiente (l'ordine di calcolo inverso è ovviamente efficiente solo per le funzioni richiamabili).
Allo stesso tempo, se il compilatore decide di incorporare una funzione non inline, dovrebbe usare l'ordine (generale) inverso di valutazione, anche se questo porta a una perdita di efficienza (perché il programmatore ha assunto questo ordine senza aver dichiarato la funzione inline)

inline sarebbe anche appropriato in MQL, dove l'ordine di calcolo non può essere controllato esplicitamente