Errori, bug, domande - pagina 734

 
Vitya:
Forse abbiamo bisogno di PositionTotal()?

E cosa ha a che fare questo con la posizione se chiedo a OrdersTotal() quanti ordini sono attualmente piazzati?

E richiedo questa informazione in OnTrade(), il momento in cui l'ordine esiste non può essere perso.

Ma in realtà, si scopre che questo momento viene perso comunque e le richieste vengono elaborate o quando l'ordine non è ancora presente o quando è già presente.

Ma il momento in cui esiste non viene rilevato in OnTrade(), o altrimenti, la OrdersTotal() mente.

 

Per evitare di lamentarsi dell'imperfezione del codice, ecco il codice MetaQuotes con il mio miglioramento dello script nell'Expert Advisor.

Aggiunta la funzione OnTrade() e messo il codice dello script in OnInit().

Nessuna delle stampanti ha emesso un messaggio che indica la presenza di un ordine.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Posso rispondere solo con un articolo Eventi commerciali in MetaTrader 5:

Заключение

Tutte le operazioni nella piattaforma analitica e di trading MetaTrader 5 sono asincrone, e tutti i cambiamenti nel conto di trading sono riportati indipendentemente l'uno dall'altro. Pertanto non si dovrebbe cercare di tracciare un singolo evento secondo la regola "Una richiesta - Un evento di trading". Se vogliamo determinare esattamente cosa è cambiato dopo l'evento Trade, dobbiamo analizzare tutte le transazioni, posizioni e ordini ad ogni chiamata del gestore OnTrade e confrontarli con lo stato che avevamo prima che l'evento apparisse.
Questo significa che l'ordine, che stai cercando di catturare, probabilmente ha già bisogno di essere cercato usando HistoryOrdersTotal
 
Rosh:

Posso rispondere solo con l'articolo Trading Events in MetaTrader 5:

Questo significa che l'ordine che stai cercando di catturare dovrebbe probabilmente già essere ricercato usando HistoryOrdersTotal

Sono guidato da questo articolo. Vorrei trovare la risposta alla domanda: com'è possibile che un evento commerciale manchi il momento in cui un ordine è piazzato ma non è ancora stato eseguito?

Gli eventi commerciali sono generati dal server nei seguenti casi

  • Cambiamenti negli ordini attivi,
  • cambiamenti di posizione,
  • cambiamenti nei mestieri,
  • cambiamenti nella storia del trading.

Ho il sospetto che OrderTotal() fallisca. Ma non posso provarlo con questa funzionalità.

Anche se come opzione non rifiuto che OrderTotal() prenda i dati non dove penso che siano (cioè non sul server).

 
Urain:

Sto seguendo questo articolo. Vorrei trovare la risposta alla domanda: com'è possibile che un evento commerciale manchi il momento in cui un ordine è stato piazzato ma non ancora eseguito?

Semplicemente, quando arriva un evento Trade, l'ordine è già stato piazzato ed è già stato eseguito. Ecco perché non è nella storia ed è già in vigore.
 
Rosh:
Nel momento in cui gli eventi commerciali arrivano, l'ordine è già stato piazzato ed eseguito. Pertanto, non è tra gli ordini attivi ed è già stato aggiunto alla storia.

Sì, sì, i miei pensieri fluttuano intorno a questa risposta.

Risponderei così, al momento dell'ordine, il server genera un evento "trades" e lo invia al terminale, quando il terminale lo riceve, il codice fa una richiesta per il numero di ordini, ma quando questa richiesta arriva al server, il server ha già eseguito l'ordine.

Non ho altre spiegazioni.

 
Urain:

Gli eventi commerciali sono generati dal server nei seguenti casi:

  • Cambiamento degli ordini attivi,
  • cambiamenti di posizione,
  • cambiamenti nei mestieri,
  • cambiamenti nella storia del trading.

Ho il sospetto che OrderTotal() fallisca. Ma non posso provarlo con questa funzionalità.

Ho capito bene che la lista degli ordini attivi include sia gli ordini pendenti attivi che gli ordini per aprire una posizione?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

Cosa significa questo?

Qualcosa come "Nessuna parte della memoria utilizzata è stata rilasciata dopo che il programma è stato terminato". In particolare, un messaggio simile si verifica quando un programma crea un oggetto dinamico usando l'operatore new, ma non lo elimina successivamenteusando l'operatore delete.
 
papaklass:
... nella scheda "Esperti" appare questo messaggio. Non è un errore, è un avvertimento. Un avvertimento su cosa?

Beh, non ho detto "errore". Che sia un "avvertimento". Ho già detto la mia versione con un esempio. Dai un'altra occhiata alla discussione da qui (sulla perdita di linea - leggi fino alla fine della pagina): https://www.mql5.com/ru/forum/1111/page345#comment_54616

Potresti dover andare al BOD, con i dettagli della tua situazione.

 

Ho trovato una "confusione".

Perché al compilatore non piace la seconda definizione della variabile b?

E in generale, come gestire questa situazione?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}