Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 93

 
ryzhak.vladimir:

Ciao, c'è una serie di prezzi di chiusura delle barre a 30 minuti della coppia EURUSD, dal 01.01.2012 al 31.12.2012. Lo ottengo con la funzione CopyClose. Ma CopyClose[0] non è uguale al prezzo di chiusura dell'ultima barra del 31.12.2012 nel terminale, se apro il grafico. Per favore, ditemi cosa sto sbagliando. Perché i prezzi da CopyClose e il prezzo reale sul grafico non coincidono

Prima di chiamare Close_buf[0] dovete usare ArraySetAsSeries. Una volta, durante tutto il funzionamento del codice EA/Script/indicator.

ArraySetAsSeries(Close_buf,true);
 
fyords:

ArraySetAsSeries deve essere usato prima di chiamare Close_buf[0]. Una volta, per tutta la durata del codice EA/script/indicator.

Ancora non corrisponde, mostra 1,32308 invece di 1,31964 (prezzo di chiusura dell'ultima barra nel 2012)

//+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
double Close_buf[];//динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD";//валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30;//таймфрейм
datetime testTimeStart = D'2012.01.01';
datetime testTimeEnd = D'2012.12.31';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---    
     CopyClose(my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries(Close_buf,true);
     Print(Close_buf[0]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir:

Ancora non corrisponde, visualizza 1,32308 invece di 1,31964 (prezzo di chiusura dell'ultima barra nel 2012)

Si imposta
datetime testTimeEnd = D'2012.12.31';
E se si imposta
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
Sì, ha funzionato, grazie! Anche se non è ancora chiaro perché i prezzi corrispondono solo quando viene data la data esatta, fino ai secondi
 
ryzhak.vladimir:
Sì, ha funzionato, grazie! Ancora non capisco perché i prezzi corrispondono solo quando la data esatta è stata specificata fino ai secondi.

Probabilmente perché 2012.12.31 ha come default 2012.12.31 00:00:00, non 2012.12.31 24:00:00

 
Citazione dalla documentazione sulla funzione CopyBuffer:"Gli elementi dei dati copiati (buffer indicatore con indice buffer_num) sono contati dalla posizione iniziale dal presente al passato, cioè la posizione iniziale uguale a 0 significa la barra attuale (valore dell'indicatore per la barra attuale). "Ma in pratica, per avere la barra corrente nel 0° elemento, dobbiamo applicare ArraySetAsSeries(Close_buf,true). Ma è scritto nella documentazione che per default copia l'ultima barra nell'elemento 0. Perché c'è questa differenza?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: Citazione dalla documentazione sulla funzione CopyBuffer:"Gli elementi dei dati copiati (buffer indicatore con indice buffer_num) sono contati dalla posizione iniziale dal presente al passato, cioè la posizione iniziale uguale a 0 significa la barra attuale (valore dell'indicatore per la barra attuale). "Ma in pratica, per avere la barra corrente nel 0° elemento, dobbiamo applicare ArraySetAsSeries(Close_buf,true). Ma è scritto nella documentazione che per default copia l'ultima barra nell'elemento 0. Perché c'è questa differenza?
Guardate la figura più da vicino. Dove viene copiato l'elemento 'start_pos'?
 
Affronta il problema della direzione psicologica.
Ho scritto un EA di tendenza e sembra avere successo. Ora sto scrivendo un EA piatto e... È la quinta volta che questo EA si riduce al precedente, come se fossi bloccato con un solo algoritmo. Tutto inizia come "nuovo", ma dopo che l'algoritmo è strutturato, inizio a scrivere un EA che inizia ad adattarsi al primo (di successo) in ogni modo possibile.

Se qualcuno ha affrontato una cosa del genere - ditemi come "sbarazzarsi" dell'imponente algoritmo, che fa solo scendere il deposito nell'appartamento.
 
Lester: Se avete affrontato una tale stronzata - ditemi come "sbarazzarsi" dell'imponente algoritmo, che nell'appartamento drena solo il deposito.
Non mi sono imbattuto in una cosa del genere, ma per uno spostamento generale dell'attenzione, prova a studiare gli algoritmi degli altri.
 
Lester:

Affronta il problema della direzione psicologica.
Ho scritto un EA di tendenza e sembra avere successo. Ora sto scrivendo un EA piatto e... È la quinta volta che questo EA si riduce al precedente, come se fossi bloccato con un solo algoritmo. Tutto inizia come "nuovo", ma dopo che l'algoritmo è strutturato, inizio a scrivere un EA che inizia ad adattarsi al primo (di successo) in ogni modo possibile.

Se qualcuno ha affrontato una cosa del genere - ditemi come "sbarazzarsi" dell'algoritmo, che fa solo scendere il deposito nell'appartamento.
Il tuo trader non ha un problema psicologico, ma un problema di sistema - la mancanza di segni precisi di differenza tra la tendenza e il piatto. Una volta compreso questo punto, tutto funzionerà per voi.