Errori, bug, domande - pagina 662

 

Buon pomeriggio!

Si prega di controllare la correttezza della funzione che dovrebbe determinare se una posizione aperta è "congelata".

In particolare, non ho esagerato con Ask/Bid?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

No, tutto ha funzionato correttamente sul server ( account demo MQ). Cioè, gli arresti sono stati attivati quando non ero collegato. Ma quando mi sono collegato, il mercato era già chiuso. Nella finestra di Market Watch è stato registrato il tempo dell'ultimo tick prima che la mia connessione fosse interrotta. Quando ho richiesto la cronologia dei trade specificando TimeCurrent() come secondo valore, non ho ottenuto l'intera cronologia. Anche se l'aiuto per TimeCurrent() dice che:

Cioè, capisco che questa funzione dovrebbe restituire il valore dell'ultimo arrivo della quotazione di uno degli strumenti nella finestra di Market Watch dal server, anche se la connessione è stata interrotta e la connessione è avvenuta quando il mercato era già chiuso. Nel mio caso, questo non è successo e non ho avuto tutta la storia. Non so se Market Watch deve sincronizzare il tempo con il server quando il mercato è chiuso o no, non è menzionato nella Guida.

In questo caso, se è necessario uno storico completo, si può semplicemente aggiungere un numero di giorni più avanti e sarà una garanzia che tutte le offerte saranno scelte. :)

Nel tester, c'è un bug con la funzione HistoryDealsTotal(), e appare nella modalità di visualizzazione. Lì il tempo è modellato correttamente. Solo una stampella aiuta in alcuni casi.


Sì, ho ricordato il succo della cosa, che c'è stata un'interruzione della comunicazione. Sembra che il terminale inizi a controllare e scaricare la storia aggiuntiva solo alla ricezione del tick per uno strumento e non c'è nessun tick nel fine settimana. Naturalmente, è possibile aggiornare i grafici manualmente, e quindi l'ultimo tempo del server sarà aggiornato. E se in modalità automatica, allora dovreste fissare l'interruzione della connessione e, se viene ripristinata durante il fine settimana, avviare la funzione di controllo e scaricamento della storia, CheckLoadHistory(). Usa un timer.

In generale, cose "incredibili" accadono a volte al terminale. Ecco ieri, il portatile funzionava via telefono come modem. Multicurrency Expert Advisor stava lavorando in modalità di monitoraggio (autotrading disabilitato). Si è allontanato per 15 minuti con il telefono, è tornato e si è ricollegato. Il terminale ha ripristinato la connessione con il server. Sembrava che potessi scaricare facilmente le citazioni mancanti. Ma il terminale ha iniziato a scaricare furiosamente la storia - che altro c'è da fare? Tutto si è bloccato: panoramica del mercato, scheda di trading, grafici. Il telefono non supporta il 3G, funziona tramite EDGE, quindi la procedura è stata ritardata. Quando ha raggiunto i 20 MB, ho deciso di controllare se potevo scambiare qualcosa manualmente in una tale condizione. Ho provato a chiudere la posizione, ho ottenuto un rifiuto per mancanza di connessione ed è lì che il download si è fermato. Dopo la riconnessione tutto è andato bene. Ecco un estratto del log del terminale:

OK 0 Rete 09:45:09 '709704': autorizzato su MetaQuotes-Demo via Access Point Singapore
IR 0 Network 09:45:09 '709704': autorizzazione precedente eseguita con successo dal 77.35.11.181 on 2012.03.04 06:10:12
KP 0 Network 09:45:12 '709704': terminale sincronizzato con MetaQuotes Software Corp.
GI 0 Esperti 09:45:12 esperto Fractals_ (EURUSD,H1) caricato con successo
OI 0 Trades 10:43:29 '709704' : deal #8671794 sell 0.10 GBPJPY a 129.268 fatto (basato sull'ordine #9494984) // questo trade è stato eseguito da un Expert Advisor che lavora su un altro computer
RM 0 Trades 10:51:22 '709704' : affare #8671842 vendere 0.10 USDJPY a 81.586 fatto (basato sull'ordine #9495037)// Allo stesso modo
KL 1 Rete 12:00:38 '709704': connessione a MetaQuotes-Demo persa// Gone
IE 0 Network 12:16:15 '709704': Autorizzato su MetaQuotes-Demo tramite Access Point Hong Kong// Came
IS 0 Network 12:16:15 '709704': autorizzazione precedente eseguita con successo da 80.83.239.67 il 2012.03.04 23:45:03
OS 0 Network 12:16:18 '709704': terminale sincronizzato con MetaQuotes Software Corp.// Comunicazione ripristinata
IQ 0 Trades 12:18:12 '709704' : affare #8672388 vendere 0.10 GBPCHF a 1.44540 fatto (basato sull'ordine #9495596) // questo trade è stato eseguito da un Expert Advisor che lavora su un altro computer
DF 0 Trades 12:35:37 '709704' : acquisto istantaneo 0.10 EURGBP a 0.83422 // Ho provato a chiudere la posizione manualmente, prima che la storia venisse scaricata
IN 2 Trades 12:35:44 '709704' : acquisto istantaneo fallito 0.10 EURGBP a 0.83422 [Richiesta rifiutata per mancanza di connessione alla rete] // Negata
JP 1 Rete 12:35:44 '709704': connessione a MetaQuotes-Demo persa
EI 0 Network 12:36:00 '709704': autorizzato su MetaQuotes-Demo via Access Point Hong Kong
IG 0 Network 12:36:00 '709704': autorizzazione precedente eseguita con successo da 80.83.239.67 su 2012.03.05 02:16:12
PG 0 Network 12:36:08 '709704': terminale sincronizzato con MetaQuotes Software Corp.// Comunicazione ripristinata, ulteriore funzionamento normale
MS

 
Il log mostra che prima dell'interruzione il terminale stava lavorando con un server, ma dopo l'interruzione si è collegato a un altro server e ha iniziato a scaricare la storia. Si può concludere che la storia tra i diversi server non è sincronizzata.
 
Valmars:

Sì, ha ricordato il succo del discorso, c'è stata un'interruzione della comunicazione. Sembra che il terminale inizi a scaricare la riconciliazione e la storia solo quando viene ricevuto un tick per lo strumento, e non ci sono tick nel fine settimana. Naturalmente, è possibile aggiornare i grafici manualmente, e quindi l'ultimo tempo del server sarà aggiornato. E se vuoi usare la modalità automatica, allora dovresti risolvere l'interruzione della connessione e, se viene ripristinata durante il fine settimana, avviare il controllo e scaricare la storia, funzione CheckLoadHistory(). Usare un timer.

...

Sì, sembra che ci sia un aggiornamento temporale quando arriva la spunta, ma la cronologia era già lì e poteva essere visualizzata visivamente. Grazie per le opzioni di soluzione. Cercherò di riprodurre di nuovo una situazione simile prima del fine settimana per provare le opzioni di soluzione.
 

Collegato al server AlpariFS-MT5 per testare l'Expert Advisor in diverse condizioni. Il tipo di esecuzione era inizialmente EXECUTION_MARKET - Esecuzione degli ordini per mercato. Ho aperto/chiuso con successo delle posizioni utilizzando i miei pannelli di trading. Poi ho scoperto che la profondità del mercato era disponibile nel menu contestuale del grafico. L'ho aperto e ho scoperto che era possibile eseguire operazioni di compravendita. Come test, ho comprato una posizione e l'ho chiusa nella profondità del mercato. In seguito, il tipo di esecuzione del conto è stato cambiato in EXECUTION_EXCHANGE. Questo è stato chiarito in MQL5 e ci sono solo due opzioni nell'elenco a discesa della finestra Ordine (F9): Esecuzione scambio e Ordine in sospeso. Provare ad accedere di nuovo o ricaricare il terminale non ha risolto il problema. E ora il tipo di esecuzione sul conto demo rimane ancora EXECUTION_EXCHANGE.

Ho contattato il supporto di Alpari, ho descritto il problema e chiarito:

//---

Anatoly | 17:55
Ho capito bene che sui conti demo per MT5 al momento l'opzione EXECUTION_MARKET dovrebbe essere presente?

Sergey | 17:56
Sì, esatto.

//---

Sembra che sia un bug.

 

Alcuni identificatori non sono descritti nell'aiuto:

ORDER_FILLING_FOK, ORDER_FILLING_IOC e ORDER_FILLING_RETURN ci sono maORDER_FILLING_AON e ORDER_FILLING_CANCEL no, anche se portano tutti alla stessa lista con una descrizione.

 
tol64: eORDER_FILLING_AON e ORDER_FILLING_CANCEL non lo sono, anche se portano tutti alla stessa lista con descrizione.
Sono già stati aboliti, li elimineremo anche dagli indici.
 
Rosh:
Sono già stati aboliti, li elimineremo anche dagli indici.

Grazie.

//---

È sorta questa domanda. Il server del concorso è ora disponibile per i test con le stesse restrizioni del concorso(Volume Limit 15 lot / Volume Max 5 lot)? Ho provato a connettermi al vecchio account, ma non c'è connessione al server. Ho cercato su tutti i server dove Metatrader 5 è disponibile per il trading, ma non ho trovato VolumeLimit da nessuna parte, e ho bisogno di testare. O sarà sufficiente per rispondere alla domanda, usando un esempio con i valori del concorso:

Ho una posizione aperta e il suo volume è di 14 lotti. Se provo a piazzare un ordine pendente con un volume di 2 lotti, la richiesta sarà rifiutata? Oppure, l'ordine sarà piazzato con la stessa dimensione, ma sarà eseguito parzialmente, cioè 1 lotto, a condizione che la posizione rimanga con la stessa dimensione(14 lotti).

E viceversa. Abbiamo un ordine pendente di 14 lotti impostato. Se provo ad aprire una posizione con 2 lotti, la richiesta sarà rifiutata?

 

Tenterò la fortuna qui, perché c'è silenzio su Kettles...

Si prega di chiarire:https://www.mql5.com/ru/forum/3775/page113#comment_160125. Sono anche interessato al calcolo software dei calcoli richiesti.

 

Buon pomeriggio.

Come posso accedere al valore dell'indicatore iADX incorporato? Vale a dire, al suo valore un dato numero di barre fa? In mql4 si fa impostando il parametro shift.

Grazie.

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5