Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 93

 
ryzhak.vladimir:

Olá! Há uma série de preços de fecho de 30 min de barras do par EURUSD, de 01.01.2012 a 31.12.2012. Recebo-o com a função CopyClose. Mas CopyClose[0] não equivale a fechar o preço da última barra em 31.12.2012 em terminal, se eu abrir o gráfico. Por favor, digam-me o que estou a fazer mal. Porque é que os preços de CopyClose e o preço real no gráfico não coincidem

Antes de chamar Close_buf[0] deve utilizar o ArraySetAsSeries. Uma vez, durante todo o funcionamento do código EA/Script/indicador.

ArraySetAsSeries(Close_buf,true);
 
fyords:

ArraySetAsSeries deve ser utilizado antes de chamar Close_buf[0]. Uma vez, durante toda a duração do código EA/script/indicador.

Ainda não corresponde, mostra 1,32308 em vez de 1,31964 (último bar preço fechado em 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:

Ainda não corresponde, exibe 1,32308 em vez de 1,31964 (preço de fecho do último bar em 2012)

Você define
datetime testTimeEnd = D'2012.12.31';
E se definir
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
Sim, funcionou, obrigado! Embora ainda não seja claro por que razão os preços só corresponderam quando a data exacta foi dada, até aos segundos
 
ryzhak.vladimir:
Sim, funcionou, obrigado! Embora ainda não seja claro porque é que os preços só coincidiram quando a data exacta foi especificada até aos segundos

Provavelmente porque 2012.12.31 não é 2012.12.31 00:00:00, não 2012.12.31 24:00:00

 
Citação da documentação sobre a função CopyBuffer:"Os elementos dos dados copiados (buffer indicador com buffer_num de índice) são contados a partir da posição inicial do presente para o passado, ou seja, a posição inicial igual a 0 significa a barra actual (valor indicador para a barra actual). "Mas na prática, para termos a barra actual no elemento 0, temos de aplicar o ArraySetAsSeries(Close_buf,true). Mas está escrito na documentação que por defeito copia a última barra no elemento 0. Porque é que existe uma tal diferença?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: Citação da documentação sobre a função CopyBuffer:"Os elementos dos dados copiados (buffer indicador com buffer_num de índice) são contados a partir da posição inicial do presente para o passado, ou seja, a posição inicial igual a 0 significa a barra actual (valor indicador para a barra actual). "Mas na prática, para termos a barra actual no elemento 0, temos de aplicar o ArraySetAsSeries(Close_buf,true). Mas está escrito na documentação que por defeito copia a última barra no elemento 0. Porque é que existe uma tal diferença?
Veja a figura mais de perto. Onde está a ser copiado o item 'start_pos'?
 
Enfrentou o problema da direcção psicológica.
Escrevi uma tendência EA e parece ser bem sucedida. Agora estou a escrever uma EA plana e... Esta é a 5ª vez que esta EA é reduzida à anterior, como se eu estivesse preso com apenas um algoritmo. Tudo começa como "novo", mas depois de o algoritmo estar estruturado, começo a escrever uma EA que começa a ajustar-se à primeira (bem sucedida) de todas as formas possíveis.

Se alguém já enfrentou tal coisa - diga-me como "se livrar" do imponente algoritmo, que apenas faz descer o depósito no apartamento.
 
Lester: Se se deparou com tal treta - diga-me como "livrar-se" do imponente algoritmo, que no apartamento apenas drena o depósito.
Não me deparei com tal coisa, mas para uma mudança geral de atenção, tentei estudar os algoritmos de outras pessoas.
 
Lester:

Enfrentou o problema da direcção psicológica.
Escrevi uma tendência EA e parece ser bem sucedida. Agora estou a escrever uma EA plana e... Esta é a 5ª vez que esta EA é reduzida à anterior, como se eu estivesse preso com apenas um algoritmo. Tudo começa como "novo", mas depois de o algoritmo estar estruturado, começo a escrever uma EA que começa a ajustar-se à primeira (bem sucedida) de todas as formas possíveis.

Se alguém já enfrentou tal coisa - diga-me como "se livrar" do algoritmo, que só faz descer o depósito durante o apartamento.
O seu comerciante não tem um problema psicológico, mas um problema de sistema - a falta de sinais precisos de diferença entre a tendência e o plano. Uma vez entendido este ponto, tudo se resolverá por si.