Imparare e scrivere insieme in MQL5 - pagina 34

 
Yedelkin:

Un semplice script come questo mi dà strani risultati

Forse qualcuno può spiegare qual è la ragione? Quando il numero 254 è esplicitamente convertito in uchar, funziona come previsto.

Grazie per il messaggio, diamo un'occhiata.
 
Rosh:
Grazie per il messaggio, lo risolveremo.

Stessa storia con ushort:

void OnStart()
  {
   for(ushort i=32760;i<32775;i++)
     {
      switch(i>USHORT_MAX-2)
        {
         case   true:  Print(__FILE__," ",__FUNCTION__,": ",i,">(USHORT_MAX-2) - true");   break;
         case  false:  Print(__FILE__," ",__FUNCTION__,": ",i,">(USHORT_MAX-2) - false");  break;
        }
     }
  }
 

Come si potrebbe fare in modo che quando si verifica una condizione, la musica si accenda? Heh-heh, è un'applicazione un po' strana di mql)) Ma guardare l'immagine aspettando il momento giusto è noioso, e lasciare completamente tutto il lavoro al robot in qualche modo non è così sensato. Così ho deciso di lasciare che la musica suoni quando voglio io, e poi lo farò io stesso))

Ho cercato nel libro di riferimento, o forse stavo cercando troppo intensamente o qualcosa del genere, ma non sono riuscito a trovarlo).

 
Controlla la funzione PlaySound()
 
Rosh:
Controlla la funzione PlaySound()

Grazie mille).
 

Domanda sul tracciamento delle riquotazioni.

La descrizione della funzione OrderSend() dice che "Quando si piazza un ordine a mercato, il completamento con successo del metodo OrderSend() non significa sempre l'esecuzione con successo dell'operazione. È necessario controllare il ... il valore del retcode". Cioè, si può dedurre che se OrderSend()==true, possiamo ancora ottenere un requote. Ok.

Ma nell'esempio ("Invio di una richiesta di compravendita con gestione del risultato") alla sezione"Struttura del risultato della richiesta di compravendita" il messaggio su un requote è controllato solo se OrderSend() ==false.

Quindi in quali casi controlliamo le requote: a qualsiasi valore restituito da OrderSend(), o solo se OrderSend() ==false?

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

Domanda sul tracciamento delle riquotazioni.

La descrizione della funzione OrderSend() dice che "quando si piazza un ordine a mercato, il completamento con successo del metodo OrderSend() non significa sempre una transazione riuscita.

L'esecuzione di successo di OrderSend() significa solo che la richiesta viene controllata per la correttezza e messa in coda per l'esecuzione. Ma il suo ulteriore destino non è garantito - l'ordine può essere cancellato durante la sua elaborazione, per esempio, a causa di una politica di riempimento.

Ma in generale, se c'è stato un requote, OrderSend() è chiaramente fallito.

 
Rosh:

L'esecuzione riuscita di OrderSend() significa solo che la richiesta è stata controllata per la correttezza e messa in coda per l'esecuzione. Ma il suo ulteriore destino non è garantito - l'ordine può essere cancellato durante la sua elaborazione, per esempio, a causa della politica di riempimento.

Ma in generale, se c'è stato un requote, OrderSend() è chiaramente fallito.

In altre parole, un requote significa che la richiesta inizialmente non ha superato il controllo di correttezza?
 
Yedelkin:
In altre parole, un requote significa che la richiesta inizialmente non ha superato il controllo di correttezza?

Ebbene, sì, il prezzo indicato nella richiesta non corrispondeva e vi viene richiesto di prendere in considerazione i nuovi prezzi che possono essere ottenuti dalla struttura di risposta del server MqlTradeResult:

struct MqlTradeResult
  {
   uint     retcode;          // Код результата операции
   ulong    deal;             // Тикет сделки, если она совершена
   ulong    order;            // Тикет ордера, если он выставлен
   double   volume;           // Объем сделки, подтверждённый брокером
   double   price;            // Цена в сделке, подтверждённая брокером
   double   bid;              // Текущая рыночная цена предложения (цены реквота)
   double   ask;              // Текущая рыночная цена спроса (цены реквота)
   string   comment;          // Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
  };

 
Rosh:

Ebbene sì, il prezzo indicato nella richiesta non corrispondeva e ti viene chiesto di prendere in considerazione i nuovi prezzi, che possono essere ottenuti dalla struttura di risposta del server MqlTradeResult:

OK!

Probabilmente sto esagerando, ma ecco un'altra domanda. Prima di inviare una richiesta per piazzare un ordine a mercato (per aprire una posizione), azzero il trade ticket, cioè faccio result.deal=0. Possiamo aspettarci che il server restituisca un trade ticket nullo nella struttura di risposta MqlTradeResult, ma un po' più tardi, il trade sarà eseguito e la posizione sarà aperta? O il ritorno di un trade ticket nullo da parte del server garantisce che la posizione non ha potuto essere aperta e non sarà ulteriormente aperta sulla base di questa richiesta?