Errori, bug, domande - pagina 2411

 
Aleksey Sergan:



Si prega di eseguire questo codice:Multicurrency iMA Trend 2.

Specificare "EURUSD,GBPUSD" nelle impostazioni ( parametro Symbols).

Sulla mia configurazione

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

tutti gli SL hanno chiuso ai prezzi dei loro simboli. Cioè, non c'è nessun errore di sovrapposizione dei prezzi.

 
Vladimir Karputov:

Si prega di eseguire questo codice:Multicurrency iMA Trend 2.

Specificare "EURUSD,GBPUSD" nelle impostazioni ( parametro Symbols).

Sulla mia configurazione

tutti gli SL hanno chiuso ai prezzi dei loro simboli. Cioè, non c'è nessun errore di sovrapposizione dei prezzi.

Grazie, l'errore è stato localizzato. Posta qui sotto.

 
Andrey Barinov:

ci sono due errori.

№1. Il tuo errore. Da qualche parte nel codice. Stai impostando SL per la posizione EURUSD usando il prezzo GBPUSD. Il terminale non dovrebbe avere nulla in contrario.

№2. Bug nel terminale. Se questo SL viene attivato ad un prezzo che non esiste in quel momento nel flusso EURUSD, utilizzando il prezzo GBPUSD.

Andrey Barinov:

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

A quanto pare, quando si invia una richiesta di modifica, il campo posizione ha la priorità sul simbolo. Stampareq.position

Sì, hai dimostrato di avere ragione, il mio errore è logico:

nella struttura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

numero di posizione attuale per GBPUSD #4

quando OrderSend viene eseguito, il tester imposta uno stop per il simbolo corrispondente alla posizione #3, che è eurusd.

Bug dei tester:

- non riesce a controllare se m_request.position e m_request.symbol corrispondono;

- imposta uno stop a 1,60704 per la posizione di acquisto, il simbolo eurusd, che ha un prezzo corrente di 1,30935;

- sul prossimo tick imposta uno stop a 1,60704, anche se il prezzo attuale è 1,30935.

Grazie a tutti. Spero che gli sviluppatori della piattaforma vedano il post.

 
Aleksey Sergan:

Sì, hai dimostrato di avere ragione, il mio errore è logico:

Nella struttura:

MqlTradeRequest m_request;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

numero di posizione attuale per GBPUSD #4

quando OrderSend viene eseguito, il tester imposta uno stop per il simbolo corrispondente alla posizione #3, che è eurusd.

Bug dei tester:

- non riesce a controllare se m_request.position e m_request.symbol corrispondono;

- imposta uno stop a 1,60704 per la posizione di acquisto, il simbolo eurusd, che ha un prezzo corrente di 1,30935;

- sul prossimo tick imposta uno stop a 1,60704, anche se il prezzo attuale è 1,30935.

Grazie a tutti. Spero che gli sviluppatori della piattaforma vedano il post.

L'esecuzione di uno stop per una posizione di acquisto a 1.60704 al prezzo attuale 1.30935 non è un errore. Ma impostare un buy stop al livello di 1.60704 al prezzo attuale di 1.30935 è un errore.

 

Costruire 2007

Funzione:

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

dovrebbe emettere il risultato finanziario della transazione nella variabile profitto, ma risulta sempre essere 0,0, e il valore nella variabile lotto è sempre corretto.

C'è un errore? - O sto facendo qualcosa di sbagliato?

 
Andrey Dik:

Costruire 2007

Funzione:

dovrebbe emettere il risultato finanziario della transazione nella variabile profitto, ma risulta sempre essere 0,0, e il valore nella variabile lotto è sempre corretto.

C'è un errore? - O sto facendo qualcosa di sbagliato?

DEAL_ENTRY_OUT o INOUT dovrebbe essere controllato. I trade _IN hanno un profitto di 0

 
Andrey Barinov:

DEAL_ENTRY_OUT o INOUT devono essere guardati. I trade _IN hanno un profitto di 0

Bene, il primo dalla fine della lista è preso, dovrebbe essere OUT

 
Andrey Dik:

Beh, è il primo dalla fine della lista, dovrebbe essere OUT

Se passate TimeCurrent() in endDate, sostituitelo con TimeCurrent()+60 o qualcosa del genere. Questo dovrebbe aiutare.

 
Andrey Barinov:

Se passate TimeCurrent() in endDate, sostituitelo con TimeCurrent()+60 o qualcosa del genere. Questo dovrebbe aiutare.

No, è ancora 0.0.

 
Andrey Dik:

No, è ancora 0.0.

Poi fate il debug. Stampare i biglietti delle transazioni e vedere nel tester cosa viene effettivamente selezionato lì. Aggiungere un filtro per tipo di commercio.

Motivazione: