Discussione sull’articolo "Introduzione a MQL5: Come scrivere un semplice Expert Advisor e un Indicatore Personalizzato" - pagina 2
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Per i buffer degli indicatori si dice SetIndexBuffer:
Per gli Expert Advisor dovrebbe essere simile, controllare
Ancora nessuna analogia. Quando controllo questo codice
Ho messo un punto di interruzione di fronte all'operatore return. Il debugger produce il seguente risultato: high "array dinamico[8563], S". Ho capito che S sta per "Serie".
L'analogia non funziona ancora. Quando si controlla questo codice
Ho messo un punto di interruzione di fronte all'operatore return. Il debugger genera il seguente risultato: high "array dinamico[8563], S". Ho capito che S sta per "Serie".
Allora perché non funziona? Se avete dubbi, impostate un controllo esplicito per le serie con la funzione ArrayGetAsSeries:
Risultato
Perché non funziona. In caso di dubbio, impostate un controllo esplicito della serialità con la funzione ArrayGetAsSeries:
Vi ricordo di cosa sto parlando. Stavo chiedendo se gli array devono essere sempre indicizzati solo dopo essere stati copiati. Lei ha fatto riferimento alla nota della funzione SetIndexBuffer e ha detto che dovrebbe essere lo stesso per gli EA. La nota della funzione SetIndexBuffer implica che"dopo il collegamento, l'array dinamico buffer[] sarà indicizzato come negli array regolari, anche se l'array collegato è preimpostato per essere indicizzato come nelle timeseries".
Di conseguenza, ho visto un'analogia per gli EA, in quanto dopo aver utilizzato le funzioni CopyTime, CopyHigh e CopyLow, anche gli array riceventi dovranno essere indicizzati come gli array regolari. Per verificare questa analogia, ho inserito la funzione ArraySetAsSeries prima della funzione CopyHigh, nella funzione OnInit(). Ma il mio esempio e il controllo esplicito della serializzazione da parte della funzione ArrayGetAsSeries che avete suggerito mostrano che dopo l'uso della funzione CopyHigh, l'indicizzazione preimpostata (come in timeseries) dell'array ricevente high[] non è cambiata. Questo, a sua volta, indica che l'analogia con la funzione SetIndexBuffer da voi citata non è ancora osservata, perché altrimenti il controllo esplicito della serialità avrebbe dovuto mostrare che IsSeries=false.
Yedelkin:
Per verificare questa analogia, ho inserito la funzione ArraySetAsSeries prima della funzione CopyHigh, nella funzione OnInit(). Ma il mio esempio e il controllo esplicito della serializzazione da parte della funzione ArrayGetAsSeries che avete suggerito mostrano che dopo aver utilizzato la funzione CopyHigh, l'indicizzazione preimpostata (come in timeseries) dell'array ricevente high[] non è cambiata.
In realtà, intendevo dire che dopo aver impostato la serializzazione per l'array globale in OnInit() o in qualche altra funzione, questa serializzazione non cambierà in nessun altro punto. L'unica eccezione è legata alla funzione SetIndexBuffer().
Credo che abbiamo raggiunto un accordo su questo punto e possiamo considerarlo esaurito.
Sì, la domanda ha trovato risposta. Grazie per il chiarimento!
Alcune domande.
1.
Si dice che "Nell'operatore if..., l'operatore return viene utilizzato per terminare l'esecuzione della funzione OnTick".
OnTick? e non da if (....) {...}?
2.
In MQL4 era consigliata la ricerca inversa.
cosa è meglio?3. Ho scaricato l'Expert Advisor e l'indicatore (per i moderatori di Opera 10.54, problemi con il download dei file allegati). Tutto compilato. Avviato nel tester su M5 selezionando l'ultimo mese.
Log
2010.05.15 13:16:02 Core 1 Disconnesso
2010.05.15 13:16:01 Core 1 File di registro "D:\MetaTrader 5\Tester\Agent-127.0.0.0.1-3000\logs\20100515.log" scritto
2010.05.15 13:16:01 Core 1 EURUSD,M5: 553908 ticks (2580 barre) generati in 1431016 ms (barre totali nello storico 100352)
2010.05.15 13:16:01 Core 1 Risultato OnTester 0
2010.05.15 12:52:13 Core 1 EURUSD,Daily: la cronologia inizia da 2009.01.02 00:00
2010.05.15 12:52:13 Core 1 EURUSD,Daily: la cache della cronologia è riservata a 355 barre stimate
2010.05.15 12:52:13 Core 1 EURUSD: contiene 484483 record M1 di dati iniziali dal 2009.01.02 06:01 al 2010.05.03 00:00
2010.05.15 12:52:10 Core 1 Lotti=0,100000
2010.05.15 12:52:10 Core 1 MAper=240
2010.05.15 12:52:10 Core 1 EndHour=19
2010.05.15 12:52:10 Core 1 StartHour=7
2010.05.15 12:52:10 Core 1 EURUSD,M5: il test di Experts\expert.ex5 dal 2010.05.01 00:00 al 2010.05.14 00:00 è iniziato con gli input:
L'esecuzione è stata molto lunga e non ha aperto alcuna operazione. Il trading automatico è consentito. Non ci sono messaggi nel log ((( (modifica probabilmente non so ancora come trovarli). L'indicatore e l'Expert Advisor si trovano dove dovrebbero essere. Windows XP, MT (build 274).
4. Ho provato la modalità di debug, ma non funziona. Probabilmente a causa del sabato. Niente virgolette. Ho fatto il punto di arresto come nell'articolo. Se ho ragione è un peccato, si scopre che è possibile eseguire il debug solo in un giorno lavorativo. Sarebbe bello per il debug poter caricare il proprio file con i dati necessari e (o) con alcuni dati tipici (che sia un pezzo di storia per un giorno), sarà sufficiente per il debug.
5. Se qualcuno ha fatto ricerche sulla funzione Copy... per favore condividete le informazioni su come funziona se ci sono barre mancanti. Anche se probabilmente sarebbe meglio ordinare un articolo.
Alcune domande.
1. Si dice che "Nell'operatore if..., l'operatore return viene utilizzato per terminare l'esecuzione della funzione OnTick".
OnTick? e non da if (....) {...}?
Dalla descrizione dell'operatore return return:
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается вызываемой функции. Выражение может содержать оператор присваивания.La funzione corrente per l'istruzione return in questo esempio è la funzione OnTick().
4. Ho provato la modalità di debug, ma non va. Probabilmente a causa del sabato. Niente virgolette. Ho fatto il punto di arresto come nell'articolo. Se ho ragione è un peccato, si scopre che è possibile eseguire il debug solo in un giorno lavorativo. Sarebbe bello per il debug poter caricare il proprio file con i dati necessari e (o) con alcuni dati tipici (che sia un pezzo di storia per un giorno), sarà sufficiente per il debug.
Il sito ha già discusso domande simili sul debug. Se siete interessati, usate la ricerca e cercate la parola "Debugging".
Dopo aver caricato l'aggiornamento automatico (build 275), il compilatore ha iniziato a generare avvertimenti sulle righe in cui sono verificate condizioni del tipo seguente
Gli avvisi sono dello stesso tipo: Domande: il corretto funzionamento del compilatore implica la comparsa di questi avvisi nella situazione specificata? Di quale "conversione" stiamo parlando?Dopo aver caricato l'aggiornamento automatico (build 275), il compilatore ha iniziato a generare avvertimenti sulle righe in cui vengono verificate le condizioni del tipo
Gli avvertimenti sono dello stesso tipo: Domande: il corretto funzionamento del compilatore implica la comparsa di questi avvertimenti nella situazione specificata? Di quale "conversione" stiamo parlando?L'avvertenza è stata introdotta per indurre i programmatori a prestare attenzione e a ricontrollare il loro codice.
È possibile eliminare gli avvertimenti effettuando un casting esplicito del risultato della funzione in un enumeratore o di un enumeratore in int.
Alcune domande.
1. Si dice che "Nell'operatore if..., l'operatore return viene utilizzato per terminare l'esecuzione della funzione OnTick".
OnTick? e non da if (....) {...}?
Se almeno una delle condizioni nell'operatore
almeno una delle condizioni è soddisfatta, cioè non è stato possibile copiare completamente almeno uno degli array (non ci sono abbastanza dati storici o si è verificato un errore) - la funzione OnTick viene terminata, poiché senza questi dati non è possibile effettuare ulteriori calcoli.
2. In MQL4 si raccomandava l'enumerazione inversa.
cosa è meglio?Varianti
и
sono equivalenti, ma la prima variante è più breve in forma di testo, quindi è stata utilizzata.
3. Ho scaricato l'Expert Advisor e l'indicatore (per i moderatori Opera 10.54 ha problemi con il download dei file allegati). Tutto compilato. L'ho eseguito nel tester su M5, selezionando l'ultimo mese.
Ha impiegato molto tempo per l'esecuzione e non ha aperto un solo trade. Il trading automatico è consentito. Non ci sono messaggi nel log (((( (probabilmente non so ancora come trovarli). L'indicatore e l'Expert Advisor si trovano dove dovrebbero essere. Windows XP, MT (build 274).
4. Ho provato la modalità di debug, ma non va. Probabilmente a causa del sabato. Niente virgolette. Ho fatto il punto di arresto come nell'articolo. Se ho ragione è un peccato, si scopre che è possibile eseguire il debug solo in un giorno lavorativo. Sarebbe bello per il debug poter caricare il proprio file con i dati necessari e (o) con alcuni dati tipici (che sia un pezzo di storia per un giorno), sarà sufficiente per il debug.
5. Se qualcuno ha fatto ricerche sulla funzione Copy... per favore condividete le informazioni su come funziona se ci sono barre mancanti. Anche se probabilmente sarebbe meglio ordinare un articolo.
Ad essere onesti, anche il mio tester non funziona molto bene: i test richiedono molto più tempo rispetto a quelli di un EA simile in MQL4; i trade vengono aperti solo nei primi uno o due giorni dell'intervallo di test (questo si osserva quando si testano diversi Expert Advisor).
Le funzioni OnTick e OnCalculate vengono lanciate quando viene ricevuta una nuova quotazione, quindi per il loro debug è necessario ricevere quotazioni (non funzionerà durante il fine settimana). Per il resto, il debugger funziona normalmente (provatelo, chiedetemi se avete bisogno di qualcosa).
Per quanto riguarda gli array-timeseries: - la direzione degli array può essere cambiata in qualsiasi momento in entrambe le direzioni, la posizione degli array in memoria non cambia, cambia solo l'indicizzazione (da 0,1,2,...,ultimo a ultimo,...,2,1,0) .