Errori, bug, domande - pagina 932

 
notused:

Gli agenti remoti hanno abbandonato regolarmente (un paio di volte a settimana) per diversi mesi a causa della mancanza di spazio:

o

e i registri dell'agente sono puliti o:

e c'è davvero molto spazio:

Appare quando si testa qualcosa di pesante (voglio dire, una multivisione di 10 strumenti su un periodo di un anno o due). Sembra che a un certo punto l'agente voglia creare un megafile (anche se non ci sono stampe o lavori con file nell'EA). Tutto sommato, è diventato davvero difficile lavorare

Conteggio: un anno di storia dei tick (tutti i tick in modalità M1) richiede circa 3Gb di spazio su disco per i file temporanei (guarda la cartella "...\tester\Agent-0.0.0.0-xxxxx\temp", quando un lavoro pesante è in esecuzione). Moltiplicare per il numero di agenti. 17 Gb sono già sull'orlo del baratro (e se hai 8 agenti, sei oltre).

Un nome divertente per un Expert Advisor. ;)

PS.il tester (743) si impantana in limiti senza nome...

 

Aiuto, per favore. Perché non trova il commercio (errore 4755)?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistoryDealSelect(trans.deal)) {
      long DealMagic;
      if (HistoryDealGetInteger(trans.deal, DEAL_MAGIC, DealMagic)) {
        //
      }
      else Print("HistoryDealGetInteger(" + (string)trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = ", GetLastError());
    }
    else Print("HistoryDealSelect(" + (string)trans.deal + ") = false! GetLastError() = ", GetLastError());
  }
}

Elenco dei terminali:

2013.02.07 10:31:52   instant sell 0.01 EURUSD at 1.35354 (1.35354 / 1.35364 / 1.35354)
2013.02.07 10:31:52   deal #1028 sell 0.01 EURUSD at 1.35354 done (based on order #1028)
2013.02.07 10:31:52   deal performed [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   order performed sell 0.01 at 1.35354 [#1028 sell 0.01 EURUSD at 1.35354]
2013.02.07 10:31:52   HistoryDealGetInteger(1028, DEAL_MAGIC, DealMagic) = false! GetLastError() = 4755
 
Ashes:

Fai i conti: un anno di storia dei tick (con tutti i tick su M1) richiede circa 3Gb di spazio su disco per i file temporanei (guarda la cartella "...\tester\Agent-0.0.0.0-xxxxx\temp" quando hai un lavoro pesante). Moltiplicare per il numero di agenti. 17 Gb sono già al limite (e se hai 8 agenti, sei oltre).

Un nome divertente per un Expert Advisor. ;)

Grazie! Non avrei mai immaginato che 16GB potessero non essere sufficienti. Trasferirà gli agenti su un'altra unità - si spera che 650GB siano sufficienti.

Lo vedevo anch'io - soprattutto quando il mio computer è occupato. Ma ultimamente, quando il computer viene caricato, l'esecuzione di un singolo test uccide il terminale (non è per mancanza di spazio - il terminale si trova dove ci sono 650 GB di spazio libero). Ma se si uccidono tutti i processi possibili - tutto va bene.
 
voix_kas:

Aiuto, per favore. Perché non trova un trade (errore 4755)?

Potrebbe esserci un problema con HistoryDealSelect se il codice è stato testato nel tester della strategia.

link


 
sion:

Potrebbe esserci un problema con HistoryDealSelect se il codice è stato testato nel tester della strategia.

ping


Se uso una costruzione con HistorySelect(), tutto funziona bene.

Non funziona con OnTradeTransaction. Questo evento probabilmente si verifica prima che le informazioni sul commercio siano messe in qualche database. Nonostante l'indicazione esplicita nella documentazione:

TRADE_TRANSACTION_DEAL_ADD -aggiunta di un trade alla storia. Viene eseguita come risultato dell'esecuzione di un ordine o di operazioni di saldo del conto.

 
voix_kas:

Se uso HistorySelect(), tutto funziona bene.

OnTradeTransaction non funziona. Probabilmente, questo evento si verifica prima che le informazioni sulla transazione siano memorizzate in qualche database. Nonostante l'indicazione esplicita nella documentazione:

TRADE_TRANSACTION_DEAL_ADD -aggiunta di un trade alla storia. Viene fatto come risultato dell'esecuzione di un ordine o facendo una transazione nel saldo del conto.

Qui abbiamo testato che funziona attraverso HistorySelect(), la stessa richiesta attraverso HistoryDealSelect già fallisce. Su questo esempio, la velocità di inserimento nel database non ha avuto alcun effetto.

Quindi nel tester di strategia, si controlla? Sul reale, molto probabilmente, funzionerà bene.

 
sion:

Qui abbiamo testato, ha funzionato attraverso HistorySelect(), la stessa richiesta attraverso HistoryDealSelect già fallisce. In questo esempio, la velocità di inserimento nel database non ha avuto alcun effetto.

Quindi nel tester di strategia, si controlla? Sul reale, è probabile che funzioni bene.

Confermo, questo codice con castelletto come HistorySelect() funziona bene:

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result) {
  if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol)) {
    if (HistorySelect(0, TimeTradeServer())) {
      for (int i = 0; i < HistoryDealsTotal(); i++) {
        ulong Ticket = HistoryDealGetTicket(i);
        if (trans.deal == HistoryDealGetInteger(Ticket, DEAL_ORDER)) {
          Print(HistoryDealGetInteger(Ticket, DEAL_MAGIC));
          break;
        }
      }
    }
    else Log("HistorySelect(0, TimeTradeServer() = false! GetLastError() = ", GetLastError());
  }
}

Resta da aspettare quando lo sviluppatore correggerà il bug evidente.

 
Sì, controllo nel tester di strategia. Non c'è nessun problema in tempo reale.
 
voix_kas:
Sì, controllo nel tester di strategia. Nessun problema in tempo reale.
Younz. Potrebbe essere utile, probabilmente non è cambiato nulla.
 
sion:
Yountz. Può tornare utile, probabilmente non è cambiato nulla.

Comunque, ho trovato un workaround per il mio bisogno. SenzaOnTradeTransaction.

C'è un'altra domanda sulla funzioneHistoryDealGetTicket().

La documentazione dice che restituisce il numero del biglietto della transazione. Tuttavia i casi di ritorno dell'errore non sono descritti esplicitamente, per esempio, il valore restituito deve essere controllato per ">0"?

Allo stesso modo con HistoryOrderGetTicket(). Tuttavia, quest'ultimo esempio contiene il controllo del valore positivo restituito.

Una ricerca nel forum mostra che la gente controlla il valore di ritorno sia nel caso di un ordine che nel caso di una transazione.

Molto probabilmente, un tale controllo dovrebbe essere fatto nel caso, per esempio, di una richiesta di transazione con un numero d'ordine maggiore di HistoryDealTotal()-1. Ma sono stato grato agli sviluppatori per la chiarezza della documentazione del linguaggio MQL5.