Errori, bug, domande - pagina 445

 
komposter:

Seguire la normalizzazione del lotto

Ragazzi, perché teorizzare?

Per ridere e non per arrugginire la testa.

Tutto deve essere con moderazione. Ho lavorato con soldi veri per più di 5 anni, con diversi broker, tipi di conti e strumenti, e non ho mai fatto un errore.
Non ho mai commesso un errore e non lo farò mai. Non importa, non siamo seri.
 
komposter:

Il passo dovrebbe essere un multiplo del lotto minimo.

Cosa ti rende così sicuro? Pratica - capisco, ma non la limitazione del motore.
Gli argomenti delle parti sono chiari. In ogni caso, apprezzo sinceramente la simpatia. :)

Cigno:

Guardate, tutti gli strumenti sono scambiati allo stesso tempo nei conti del campionato. Registro)

Sì, sembra essersi registrato. Questo è quello su cui ho trovato l'errore.

Cigno:

Potrei fare un altro tentativo:

if(prezzo corrente == 0,0) ritorno;

Grazie per l'idea! Dovrò provare questa opzione. :)

 

voix_kas:

Sì, credo di essere registrato. È lì che sto trovando questo errore.

C'è una barra dei minuti su GBPCHF 2011.01.03 alle 00:00. Non avete contattato servicedesk?
 
Swan:
Su GBPCHF 2011.01.03 alle 00:00 c'è una barra dei minuti. Avete contattato servicedesk?

Non sono andato alla SD.

Ecco la situazione. Sto scrivendo un EA multivaluta. Lo metto sul grafico di Eurobucks e cerco di tracciare tutte le coppie di valute valide passate all'Expert Advisor come parametro.

Mancanza di metodologia/documentazione. Ecco alcune domande per esempio:

1. Perché il prezzo può essere zero? Dopo tutto, in quel momento (2011.01.03 00:00:00) l'ultimo prezzo conosciuto (sia Bid che Ask) esisteva ancora? Su quali principi lo dà il terminale.

2. c'è una sessione di quotazione. In che modo è diverso, in linea di principio, da una sessione di trading? È logico supporre che sia possibile fare trading durante il secondo. E se non possiamo fare trading durante la prima sessione (di quotazione), allora perché le quotazioni cambiano? Le quotazioni cambiano a causa di, scusatemi per questa interpretazione, "squilibrio della domanda e dell'offerta".

3. Supponiamo di aver ricevuto un Tick su una coppia di valute. Nello stesso evento cerchiamo di "vedere" lo stato di un'altra coppia. Dov'è la garanzia che l'ultimo preventivo arrivato per l'altra coppia sia ancora valido? Qual è la durata di una citazione? La spiegazione più razionale è il controllo dell'ultima quotazione con il controllo simultaneo del volume dei lotti sul mercato. Cioè come la vedo io: N quota di eurusd è ricevuta. Non viene per niente, ma un'opzione è posta a questa quotazione per un certo volume. Quelli che vogliono comprare/vendere si stanno accaparrando la torta. A un certo momento, essa (la torta) finisce e questa citazione "smette di vivere". Poi il terminale dà la prossima quotazione (meno attraente). E se non c'è nessuna quotazione (nessuno vuole vendere/acquistare valuta)? Allora il prezzo è uguale a zero?

Comunque, non sono un esperto di borsa/forex.

Sarei grato se qualcuno potesse darmi una risposta dettagliata alle domande poste. Com'è realmente, e come sono presentate queste o quelle situazioni nel terminale MT5?

 
voix_kas:

Non sono andato alla SD.

Ecco la situazione. Sto scrivendo un EA multivaluta. Lo metto sul grafico di Eurobucks e cerco di tracciare tutte le coppie di valute valide passate all'Expert Advisor come parametro.

Mancanza di metodologia/documentazione. Ecco alcune domande per esempio:

1. Perché il prezzo può essere zero? Dopo tutto, in quel momento (2011.01.03 00:00:00) l'ultimo prezzo conosciuto (sia Bid che Ask) esisteva ancora? In base a quali principi il terminale dà questo.

2. c'è una sessione di quotazione. In che modo è diverso, in linea di principio, da una sessione di trading? È logico supporre che sia possibile fare trading durante il secondo. E se non possiamo fare trading durante la prima sessione (di quotazione), allora perché le quotazioni cambiano? Le quotazioni cambiano a causa di, scusatemi per questa interpretazione, "squilibrio della domanda e dell'offerta".

3. Supponiamo di aver ricevuto un Tick su una coppia di valute. Nello stesso evento cerchiamo di "vedere" lo stato di un'altra coppia. Dov'è la garanzia che l'ultimo preventivo arrivato per l'altra coppia sia ancora valido? Qual è la durata di una citazione? La spiegazione più razionale è il controllo dell'ultima quotazione con il controllo simultaneo del volume dei lotti sul mercato. Cioè come la vedo io: N quota di eurusd è ricevuta. Non viene per niente, ma un'opzione è posta a questa quotazione per un certo volume. Quelli che vogliono comprare/vendere si stanno accaparrando la torta. A un certo momento, essa (la torta) finisce e questa citazione "smette di vivere". Poi il terminale dà la prossima quotazione (meno attraente). E se non c'è nessuna quotazione (nessuno vuole vendere/acquistare valuta)? Allora il prezzo è uguale a zero?

Comunque, non sono un esperto di borsa/forex.

Sarei grato se qualcuno potesse darmi una risposta dettagliata alle domande poste. Com'è nella realtà, e come queste o quelle situazioni sono rappresentate nel terminale MT5?

Affrontiamo la questione punto per punto. Un Expert Advisor è multivaluta, quindi dovrebbe comportarsi di conseguenza.

1. Escludiamo il principale possibile problema di ottenere il prezzo 0 - l'elenco dei simboli che si suppone siano scambiati selettivamente selezionati (cioè, non è necessario preoccuparsi della disponibilità dei simboli necessari in MarketWatch)?

2. Sulle sessioni di trading e quotazione, il commento è già stato dato dagli sviluppatori (in particolare, Rashid Umarov lo ha commentato qui). A proposito di una situazione in cui c'è una quotazione, ma non si può commerciare - è abbastanza normale (soprattutto per il mercato azionario). Inoltre nessuno garantisce che le quotazioni vengano aggiornate durante una sessione di trading. 3.

3. sul vetro - e dove prendere il vetro (soprattutto, cosa metterci dentro) nel mercato Forex? Per le domande le risposte sono così (se tutto è ok e c'è una connessione al server):

(a) "Last Quote" (informazioni sull'ultimo tick) è valido dal momento in cui si verifica un tick fino a quando appare un nuovo tick. Nel terminale, l'ora dell'ultima quotazione può essere visualizzata nella "panoramica del mercato".

b) Se si raccolgono informazioni sui tick solo nel gestore OnTick() di un Expert Advisor multicurrency, nessuno può garantire che tra i tick della coppia principale non ci siano una dozzina di tick di altre coppie. Perché a seconda di una coppia e dell'attività di trading su di essa, tra i tick può passare da una frazione di secondo a diversi minuti.

Naturalmente per il mercato Forex (specialmente per EURUSD) non è molto essenziale, ma deve essere ricordato e preso in considerazione nella logica dell'Expert Advisor.

c) È possibile determinare programmaticamente il tempo dell'ultima quotazione analizzando la struttura di MqlTick e confrontando il tempo dell'ultima quotazione con un certo valore, è possibile determinare facilmente la rilevanza di una quotazione.

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) Come ho già detto sopra, dovresti monitorare la connessione con il server e, se possibile, controllare/ricevere le quotazioni non solo in OnTick(), ma anche in OnTimer().

 

Andiamo al contrario. In quali circostanze il prezzo (bid/ask) può assumere valori nulli nel terminale?

Poi arriva la seconda domanda. Bene, abbiamo scoperto che l'ultima quotazione di questo simbolo è stata ricevuta 2 secondi/minuti/ora fa. La sessione di trading non si è chiusa. Come possiamo evitare l'errore "nessun prezzo"?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

Andiamo al contrario. In quali circostanze il prezzo (bid/ask) può assumere valori nulli nel terminale?

Poi arriva la seconda domanda. Bene, abbiamo scoperto che l'ultima quotazione di questo simbolo è stata ricevuta 2 secondi/minuti/ora fa. La sessione di trading non si è chiusa. Come possiamo non ottenere un errore "nessun prezzo"?

Avete, quando avete ricevuto un prezzo zero, chiesto GetLastError?
 
stringo:
Quando hai ottenuto il prezzo zero, hai chiesto GetLastError?

Codice di errore: 4756. Potete vederlo nello screenshot.

Inoltre. Ecco lo stesso errore ricevuto. Allo stesso tempo, il marketwatch mostra la presenza del prezzo e lo strumento è sincronizzato nei log.

 
voix_kas:

Codice di errore: 4756. Potete vederlo nello screenshot.

Inoltre. Ecco lo stesso errore ricevuto. Mentre il mercato mostra la disponibilità dei prezzi e lo strumento è sincronizzato nei registri.

Hai bisogno di un codice di errore dopo "no price...", non dopo "failed...".
 
uncleVic:
Hai bisogno del codice di errore dopo "no price...", non dopo "failed...".
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

E come faccio a prendere il codice di errore nel punto che indicate? Registro l'errore nell'ultima riga del codice di cui sopra.

Questo errore non appare se il seguente termine viene aggiunto subito prima di questo codice:

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;