MT4, por favor, ajude a comunidade. 1. No Expert Advisor, trabalhando (por ticks ou num temporizador de 0,5 segundos) no gráfico M1, é necessário fazer cálculos no momento de uma nova vela no gráfico H1. Podemos apanhar o início da vela M1, após a última vela M1 de cada hora (NN:00 minutos), mas não é muito agradável ... Além disso, o castiçal H1 pode não aparecer nesse momento. Talvez alguém o tenha feito de forma mais elegante? 2. Quanto tempo demora a obter os valores indicadores através do iCustom(), em comparação com o código indicador no texto do Expert Advisor? 3. Se o código do indicador no texto do Expert Advisor for muito mais rápido de calcular, como no Expert Advisor anexado ao gráfico M1, para calcular o valor do indicador no gráfico H1 ?
MT4, estou a pedir a ajuda da comunidade. 1. No Expert Advisor, trabalhando (por ticks ou por temporizador 0,5 seg) no gráfico M1, é necessário fazer cálculos no momento em que uma nova vela aparece no gráfico H1. Podemos apanhar o início da vela M1, após a última vela M1 de cada hora (NN:00 minutos), mas não é muito agradável ... Além disso, o castiçal H1 pode não aparecer nesse momento. Talvez alguém o tenha feito de forma mais elegante? 2. Quanto tempo mais para obter os valores indicadores através do iCustom(), em comparação com o código indicador no texto do Expert Advisor? 3. Se o código do indicador no texto do Expert Advisor for muito mais rápido de calcular, como no Expert Advisor anexado ao gráfico M1, para calcular o valor do indicador no gráfico H1 ?
A resposta à primeira pergunta, a função define uma nova barra.
Sergey Gritsay: Esta é a primeira vez que ouço falar deles, pergunto-me o que há de tão assustador neles, raramente os utilizo também, mas são mais adequados para certas tarefas.
A questão é que uma variável estática só pode ser usada se NevDay() for chamada para o mesmo símbolo e período de tempo durante todo o tempo de execução da EA. Se houver 2 ou mais símbolos, NevDay() irá retornar valores incorrectos. O meu Expert Advisor foi concebido com várias moedas ... :(
MikeZv: A questão é que a variável estática só pode ser usada se NevDay() for chamada para o mesmo símbolo e período de tempo. Se houver 2 ou mais símbolos, NevDay() irá retornar valores incorrectos. O meu Conselheiro Especialista é multi-moeda ... :(
Se precisar dele para o modo multimoedas, eis um exemplo, funciona em MT4 e MT5
MikeZv: A questão é que a variável estática só pode ser usada se NevDay() for chamada para o mesmo símbolo e período de tempo. Se houver 2 ou mais símbolos, NevDay() irá retornar valores incorrectos. O meu Conselheiro Especialista é multi-moeda ... :(
Aqui está outra opção usando a classe
//+------------------------------------------------------------------+//| тест.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar *eurusd_H1; // объявим экземпляр класса для симмвола EURUSD
CNevBar *eurusd_M15; // объявим экземпляр класса для симмвола EURUSD
CNevBar *audusd_M30; // объявим экземпляр класса для симмвола AUDUSD
CNevBar *audusd_M5; // объявим экземпляр класса для симмвола AUDUSD//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
eurusd_H1=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M30=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD
eurusd_M15=new CNevBar();// создадим экземпляр класса для симмвола EURUSD
audusd_M5=new CNevBar();// создадим экземпляр класса для симмвола AUDUSD//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---delete eurusd_H1;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M30;// удалим экземпляр класса для симмвола AUDUSDdelete eurusd_M15;// удалим экземпляр класса для симмвола EURUSDdelete audusd_M5;// удалим экземпляр класса для симмвола AUDUSD
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
if(eurusd_H1.new_bar("EURUSD",PERIOD_H1))
{
Alert("EURUSD"," Новый бар на Н1");
}
if(eurusd_M15.new_bar("EURUSD",PERIOD_M15))
{
Alert("EURUSD"," Новый бар на M15");
}
if(audusd_M30.new_bar("AUDUSD",PERIOD_M30))
{
Alert("AUDUSD"," Новый бар на M30");
}
if(audusd_M5.new_bar("AUDUSD",PERIOD_M5))
{
Alert("AUDUSD"," Новый бар на M5");
}
//---
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
Resultado do teste
2016.02.2021:09:432015.01.1000:00 тест3 test started
2016.02.2021:09:452015.01.1200:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:09:472015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:09:502015.01.1200:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:532015.01.1200:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:09:592015.01.1200:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:042015.01.1200:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:102015.01.1200:20 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:132015.01.1200:25 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:162015.01.1200:30 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:232015.01.1200:35 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:262015.01.1200:40 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:292015.01.1200:45 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:342015.01.1200:50 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:362015.01.1200:55 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на Н12016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M30
2016.02.2021:10:392015.01.1201:00 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:462015.01.1201:05 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:502015.01.1201:10 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: EURUSD Новый бар на M15
2016.02.2021:10:552015.01.1201:15 тест3 EURUSD,M1: Alert: AUDUSD Новый бар на M5
2016.02.2021:10:572015.01.1201:17 Tester: stop button pressed
MT4, por favor, ajude a comunidade.
1. No Expert Advisor, trabalhando (por ticks ou num temporizador de 0,5 segundos) no gráfico M1, é necessário fazer cálculos no momento de uma nova vela no gráfico H1.
Podemos apanhar o início da vela M1, após a última vela M1 de cada hora (NN:00 minutos), mas não é muito agradável ... Além disso, o castiçal H1 pode não aparecer nesse momento.
Talvez alguém o tenha feito de forma mais elegante?
2. Quanto tempo demora a obter os valores indicadores através do iCustom(), em comparação com o código indicador no texto do Expert Advisor?
3. Se o código do indicador no texto do Expert Advisor for muito mais rápido de calcular, como no Expert Advisor anexado ao gráfico M1, para calcular o valor do indicador no gráfico H1 ?
MT4, estou a pedir a ajuda da comunidade.
1. No Expert Advisor, trabalhando (por ticks ou por temporizador 0,5 seg) no gráfico M1, é necessário fazer cálculos no momento em que uma nova vela aparece no gráfico H1.
Podemos apanhar o início da vela M1, após a última vela M1 de cada hora (NN:00 minutos), mas não é muito agradável ... Além disso, o castiçal H1 pode não aparecer nesse momento.
Talvez alguém o tenha feito de forma mais elegante?
2. Quanto tempo mais para obter os valores indicadores através do iCustom(), em comparação com o código indicador no texto do Expert Advisor?
3. Se o código do indicador no texto do Expert Advisor for muito mais rápido de calcular, como no Expert Advisor anexado ao gráfico M1, para calcular o valor do indicador no gráfico H1 ?
A resposta à primeira pergunta, a função define uma nova barra.
exemplo de utilização
int OnInit() { //--- NevBar(PERIOD_H1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(NevBar(PERIOD_H1)) { производим вычисления. } } //+------------------------------------------------------------------+A resposta à primeira pergunta, a função define uma nova barra.
Muito obrigado Sergey, eu procurei na documentação, mas de alguma forma perdi o iTime() ... :
E porquêchamar NevBar() noOnInit() ?
A primeira chamada de função, caso contrário será accionada imediatamente. Para garantir que oOnInit() não seja chamado
A primeira chamada de função, caso contrário será accionada imediatamente. Para garantir que oOnInit() não seja chamado
Obrigado Sergei ! No fórum, fiquei assustado: "Não uses variáveis estáticas! " :)
Obrigado Sergei ! No fórum, fiquei assustado: "Não uses variáveis estáticas! " :)
Esta é a primeira vez que ouço falar deles, pergunto-me o que há de tão assustador neles, raramente os utilizo também, mas são mais adequados para certas tarefas.
A questão é que a variável estática só pode ser usada se NevDay() for chamada para o mesmo símbolo e período de tempo. Se houver 2 ou mais símbolos, NevDay() irá retornar valores incorrectos. O meu Conselheiro Especialista é multi-moeda ... :(
Se precisar dele para o modo multimoedas, eis um exemplo, funciona em MT4 e MT5
A questão é que a variável estática só pode ser usada se NevDay() for chamada para o mesmo símbolo e período de tempo. Se houver 2 ou mais símbolos, NevDay() irá retornar valores incorrectos. O meu Conselheiro Especialista é multi-moeda ... :(
Aqui está outra opção usando a classe
Resultado do teste