Errori, bug, domande - pagina 624

 
ivandurak:

Errore nel caricamento del file in Expert Advisor. Trova 10 differenze. Il primo codice si riferisce allo script, il secondo all'Expert Advisor, sono identici Ctrl-C Ctrl-V. Il codice funziona nello script, non funziona nell'Expert Advisor.

Per trovare 10 differenze, è necessario guardare il codice di apertura dei file. (e aggiungere a questo codice aperto l'uscita del codice di errore in caso di fallimento)

In secondo luogo, se volete testare l'EA con questo file aggiungete la linea #property tester_file "KitMaRsi.csv" al codice EA

 
Salve. In MQL4, l'errore ERR_HISTORY_WILL_UPDATED(4066) può verificarsi durante l'esecuzione di un programma. La funzione GetLastError() restituisce il codice di errore. Avete un errore simile in MQL5? Ho cercato quihttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes ma non ho trovato nulla di simile.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения - Документация по MQL5
 
Druide:
Salve. In MQL4, quando si esegue un programma, può verificarsi l'errore ERR_HISTORY_WILL_UPDATED(4066), il cui codice è restituito dalla funzione GetLastError(). Avete un errore simile in MQL5? Ho cercato quihttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes ma non ho trovato nulla di simile.

Non dirò nulla sull'errore. Il terminale stesso si assicura che i dati siano sincronizzati, è possibile sincronizzare (caricare) i dati e controllare se la storia è sincronizzata o meno.

L'organizzazione dell'accesso ai dati è descritta qui (c'è un esempio di script di caricamento della storia).

Funzioni che possono essere necessarie: SeriesInfoInteger e SymbolIsSynchronized

 
awkozlov:

L'interruttore con le variabili di carattere non sembra funzionare...

Invece di:

'Tipo' - tipo di espressione switch illegale
'Buy' - l'espressione costante non è integrale


Usare identificatori piuttosto che testo. Che sarebbe più semplice e più logico...

//Что-то типа такого (или свои идентификаторы). Написать функцию конвертирующую текст в идентификатор и обратно (при необходимости) достаточно просто.
//Да и выглядит это более профессионально в конечном итоге.
  switch(type)
  {
  case ORDER_TYPE_BUY: {direction = type;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case ORDER_TYPE_SELL: {direction = type; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }

  switch(type)
  {
  case OP_BUY: {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case OP_SELL: {direction = RDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }
 
awkozlov:

L'interruttore con le variabili di carattere non sembra funzionare...

Invece:

'type' - tipo di espressione switch illegale
'Buy' - l'espressione costante non è integrale

Devo disegnarlo così:

Non è così chiaro ed è storto.

Funziona bene in altre lingue.

Devo scriverlo in un altro modo?

Ho fatto questo.

#define  OP_BUY               0
#define  OP_SELL              1
#define  OP_BUYLIMIT          2
 
Interesting:

Non dirò nulla sull'errore. Il terminale stesso si assicura che i dati siano sincronizzati, è possibile sincronizzare (caricare) i dati e controllare se la storia è sincronizzata o meno.

L'organizzazione dell'accesso ai dati è descritta qui (c'è un esempio di script di caricamento della storia).

Funzioni che potrebbero essere necessarie: SeriesInfoInteger e SymbolIsSynchronized

Grazie! Capito.
 

Ci sono analoghi di tali librerie come stdlib.mqh, WinUser32.mqh, stderror.mqh in MQL5, in particolare, sono interessato alla funzione PostMessageA?

 

Quando si ottimizza con più agenti, i risultati vengono visualizzati sul grafico nell'ordine in cui vengono elaborati, cioè alternati. È possibile fare l'ordine di visualizzazione dei risultati in base alla selezione dei parametri, come in MT4? Cioè, il risultato che veniva dopo sarebbe stato inserito nel giusto ordine. Sto solo dicendo che non è conveniente seguire le tendenze e le regolarità durante l'ottimizzazione e i risultati possono essere analizzati solo dopo aver fatto i calcoli.

++: Si tratta di ottimizzazione con piena forza bruta - naturalmente non ha senso sulla genetica.

 
Konstantin83:

Descrizione nel manuale

Infatti

bool ObjectCreate(
long chart_id, // identificatore del grafico
stringa name, // nome dell'oggetto
ENUM_OBJECT type, // tipo di oggetto
intn win, // indice della finestra);


Grazie, corretto.
 
x100intraday ha scritto https://www.mql5.com/ru/forum/1111/page610#comment_130250:

Eseguiamo il codice di esempio di iFractals dall'aiuto su M1, che usa la seconda forma - completa - della chiamata alla funzione OnCalculate(). Ma prima, all'interno di questa funzione, correggiamo

a

per non perdere di vista una sola linea con l'output (se la lasciamo così com'è, visivamente 1 sarà sempre visibile, perché gli altri valori sono rari e immediatamente sostituiti da 1, quindi sembra che 1 sia sempre visualizzato) Dopo il runtime vediamo che i valori non unitari si verificano ogni minuto, cioè su ogni nuova barra, il che indica inequivocabilmente che l'indicatore viene ridisegnato ogni minutocompletamente nonostante il fatto che il codice usialgoritmo economico. I dubbiosi possono aggiungere diverse linee di codice, disegnando, diciamo, linee verticali su ogni frattale e poi rimuoverle dopo il primo disegno e aspettare che l'insieme completo delle stesse linee appaia dopo un minuto con una nuova barra. Tutto ciò che riguarda il finire solo l'ultimo frattale o linea è fuori questione per qualche motivo.

Sì, infatti, l'indicatore dell'esempio alla funzione iFractals() aggiorna i suoi buffer di indicatori con i valori dell'indicatore incorporato. La seconda condizione nella linea (evidenziata in giallo) è "da biasimare" per questo:

//--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iFractals
//--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
     {

Spiegazione: ad ogni tick questi due valori sono confrontati e c'è un'assegnazione alla fine della funzione

//--- запомним количество значений в индикаторе Fractals
   bars_calculated=calculated;

E la differenza tra loro può nascere nello spirito:

  1. la storia stessa, sulla quale viene calcolato l'indicatore frattale, è cambiata (paginazione della storia da parte dell'utente)
  2. occorrenza di un nuovo evento bar

In questo caso la separazione dei due eventi non è fatta, lo avete scoperto. Non posso ancora dire se sistemeremo questo esempio in modo da non avere queste domande.