Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1190

 
MakarFX:

Chiusura del server demo MetaQuotes

MetaQuotes Software Corp.

4 marzo 2009

Il 5 aprile 2009 il server "demo.metaquotes.net" sarà chiuso. Tuttavia, il Centro Storico con la storia minuta continuerà il suo lavoro.

Da questo giorno la nostra azienda si rifiuta di usare il server demo. Al giorno d'oggi, il numero di aziende che eseguono la piattaforma MetaTrader 4 è così alto, che non vediamo la necessità di mantenere il nostro server.

Questa è una specie di antichità (si parla di un altro server). È stato fatto molte volte quest'anno, l'ultima volta è stato un mese fa su MetaQuotes-Demo un nuovo conto demo è stato creato normalmente.

Inoltre, se il server è stato rimosso, perché viene mostrato e pingato nella procedura guidata di apertura dell'account? L'inceppamento avviene solo nell'ultimo passo.

 
Artyom Trishkin:

La prima volta che si accede ai dati storici dall'indicatore, se non ci sono dati locali sufficienti, i dati vengono caricati e la funzione restituisce un errore.

Questo lo capisco perfettamente. Se si trattasse di barre insufficienti nella storia, entrambe le funzioni restituirebbero 0. Tuttavia, una di esse restituisce 0, mentre l'altra restituisce correttamente il numero di barre nella storia. Inoltre, sono chiamati uno dopo l'altro:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Solo i dati nel primo caso sono presi dai premembri pronti (symbol e timeframe) della classe Loader (correttamente inizializzati), ma nel secondo caso, dalle funzioni Symbol() e Period() (che restituiscono esattamente gli stessi valori scritti in symbol e timeframe). I valori delle variabili sono identici a quelli delle funzioni (ho controllato). Ma non è chiaro dove iBars(symbol, timeframe) si incasina con simbolo e timeframe assolutamente corretti. Mentre iBars(Symbol(), Period()) non fa un errore. Così ho deciso che deve essere un errore nel terminale stesso o una compilazione errata del codice sorgente.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

Lo capisco molto bene. Se si trattasse di mancanza di barre nella storia, allora entrambe le funzioni restituirebbero 0. Ma così com'è, una funzione restituisce 0, mentre l'altra restituisce correttamente il numero di barre nella storia. Inoltre, sono chiamati uno dopo l'altro:

Solo i dati nel primo caso sono presi dai premembri pronti (symbol e timeframe) della classe Loader (correttamente inizializzati), ma nel secondo caso, dalle funzioni Symbol() e Period() (che restituiscono esattamente gli stessi valori scritti in symbol e timeframe). I valori delle variabili sono identici a quelli delle funzioni (ho controllato). Ma non è chiaro dove iBars(symbol, timeframe) si incasina con simbolo e timeframe assolutamente corretti. Mentre iBars(Symbol(), Period()) non fa un errore. Così ho deciso che c'è un errore da qualche parte nel funzionamento del terminale.

Ora scrivi così, come ti ha consigliato Igor:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
E non dimenticate che questo è un costruttore di classe, e viene chiamato prima dell'inizializzazione
 
Mihail Matkovskij:

Lo capisco molto bene. Se si trattasse di mancanza di barre nella storia, allora entrambe le funzioni restituirebbero 0. Ma così com'è, una funzione restituisce 0, mentre l'altra restituisce correttamente il numero di barre nella storia. E vengono chiamati uno dopo l'altro:

Ti viene in mente una storia

e poi si decide di scriverlo come rivendicazione e quindi la domanda

Cosa dice l'aiuto dell'errore 4401?

cosa ho scritto?

Capisci la differenza tra una mancanza di barre e un grafico che non è pronto?

si ha la situazione dopo il riavvio del terminale con l'inizio dell'indicatore, e si richiedono i dati nell'inizializzazione globale del programma MQL (costruttore di classe), che sarà eseguito prima di OnInit()


andato, si scrive più veloce di quanto si legge, cercare il forum 4401 - tutte le risposte

 
MakarFX:

Calcolo il lotto come segue

È all'inizio dell'EA... e l'ho messo alla fine del codice

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

Quando la variabile Lots viene chiamata nella funzione OnTick, l'EA la trova e la ricalcola.

Non può essere così. La dichiarazione e l'inizializzazione sono in corso, e la variabileLots viene assegnata con un'espressione.

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Questa assegnazione può essere eseguita solo una volta all'avvio. Non può essere il caso che un'espressione sia assegnata automaticamente ogni volta che si accede aLots. Non ho sentito che mql può farlo.

 
Seric29:

Non può essere così. Avete la dichiarazione e l'inizializzazione, e un'espressione viene assegnata alla variabileLots.

Questa assegnazione può essere fatta una volta all'avvio, non può essere che ogni volta che si accede aLots, un'espressione venga assegnata automaticamente. Non ho sentito che mql può farlo.

Ho controllato, quando il saldo cambia, cambia anche il lotto
 
MakarFX:
Ho controllato, quando il saldo cambia, cambia anche il lotto

Wow, lo controllerò. So che si possono inizializzare variabili con elementi di array con funzioni, ma non sapevo che cambiasse automaticamente, non credo che ci sia una cosa del genere neanche in C++, controllerò più tardi.

 
Artyom Trishkin:
E non dimenticate che questo è un costruttore di classe, e viene chiamato prima dell'inizializzazione

Questo se l'oggetto è automatico. Ma lo creo con la parola chiavenew (in OnInit()) e lo cancello con la parola chiave delete (in OnDeinit()). Cioè, uso un puntatore a un oggetto di tipo Loader. Ma credo che tu conosca tutti i dettagli. Ecco perché il caricatore viene creato in OnInit() e non ci può essere alcun errore qui.

Se intendi scambiare le funzioni, ho provato e il risultato è lo stesso. Solo che i messaggi vanno in una sequenza diversa :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

Risultato:

2020.06.24 23:10:48.568 Loader::Loader simbolo: EURUSD timeframe: PERIOD_H1

2020.06.24 23:10:48.568 Loader::Loader bars (2): 140435

2020.06.24 23:10:48.568 Loader::Loader bars: 0

2020.06.24 23:10:48.568 Loader::Loader Errore: 4401

Notate che questo accade solo se e solo se il terminale viene riavviato! Perché al primo avvio del terminale (dopo l'avvio di Windows) questo esempio funziona correttamente.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

Hai inventato una storia.

e poi ha deciso di trasformarlo in una denuncia.

Nessun reclamo! E qual è la storia se ho fornito il codice sorgente e anche descritto la sequenza di azioni per testare il suo lavoro? Ovviamente, mi avete frainteso...

Igor Makanu:

E stai chiedendo dati nell'inizializzazione globale del programma MQL (costruttore della classe), che sarà eseguito prima di OnInit()


andato, stai scrivendo più velocemente che leggendo,cerca nel forum 4401 - tutte le risposte


Non dovrebbe essere eseguito prima diOnInit(), ho scritto in un post precedente. Sei tu che non stai leggendo attentamente, sia i post che il codice sorgente che ho aggiunto per i test.

 
Stanislav Korotky:

Questa è una certa antichità (si parla di un altro server). Più di una volta quest'anno, l'ultima volta un mese fa su MetaQuotes-Demo un nuovo conto demo è stato creato normalmente.

Inoltre, se il server è stato rimosso, perché viene mostrato e pingato nella procedura guidata di apertura dell'account? L'inceppamento avviene solo nell'ultimo passo.

Sì, qualcosa non si registra, anche nel terminale mobile. All'inizio di quest'anno tutto si stava registrando.