Mas: este código será executado cada vez que OnCalculate() for introduzido - dependendo das suas necessidades, pode adicionar bandeira bool ou colocar o código em função separada.
Mas: este código será executado cada vez que OnCalculate() - dependendo das suas necessidades, ou adicionar uma bandeira de bool ou colocar o código numa função separada.
Obrigada, mas a cada vez que se faz um novo cálculo não é bom - preciso de analisar o vosso código, no entanto, enquanto quero compreender porque é que o meu código não funciona, no registo são devolvidos números estranhos
Open_timeTF
1454715900
Open_time
1454284800
Delta_1S
431100
Delta_M15
479
acontece que existe uma diferença de 479 barras entre a primeira barra do dia e a barra actual - porque é que isso acontece?
Obrigada, mas recalcular em cada tick não é bom - preciso de pensar no vosso código, no entanto, enquanto quero compreender porque é que o meu código não funciona, o registo retorna números estranhos
Open_timeTF
1454715900
Open_time
1454284800
Delta_1S
431100
Delta_M15
479
acontece que existe uma diferença de 479 barras entre a primeira barra do dia e a barra actual - porque é que isso acontece?
Eu indiquei que não sou psíquico e é por isso que o sou:
Mas: este código será executado cada vez que OnCalculate() for introduzido- aqui, dependendo das suas necessidades, ou adicione uma bandeiraboolou coloque o código numa função separada.
Salientei que não sou psíquico e é por isso que o sou:
Porque é necessária a capacidade psíquica aqui? Há variáveis no código acima, mostrei o que essas variáveis retornam em números e perguntei porque é que isso acontece e não o contrário - de acordo com o código.
Karputov Vladimir, não compreendo o seu código - porque sou um principiante neste negócio,nunca usei a funçãoOnCalculate antes, por isso não consigo compreender quetaxas_totalé calculado lá, e o mais importante, onde devolvê-lo? Também não compreendo como tornar tudo isto numa função separada... é difícil de compreender sem comentários.
-Aleks-: Karputov Vladimir, não compreendo o seu código - sou um principiante neste negócio enunca utilizei a funçãoOnCalculate antes, por isso não consigo compreender quetaxas_totalé calculado lá e, mais importante, para onde deve ser devolvido? Também não compreendo como tornar tudo isto numa função separada... é difícil de compreender sem comentários.
Aqui está o código completo do indicador MQL4:
//+------------------------------------------------------------------+//| Start day.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"#property strict#property indicator_chart_window//--- input parametersinputint timer=10; // seconds//--- parameterbool IsDefineTime=true; // true -> you can define time//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingEventSetTimer(timer);
//---
IsDefineTime=true;
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int temp_day;
MqlDateTime dt_struct;
TimeToStruct(time[0],dt_struct);
temp_day=dt_struct.day;
if(IsDefineTime)
{
for(int i=0;i<rates_total-1;i++)
{
TimeToStruct(time[i],dt_struct);
if(dt_struct.day<temp_day)
{
Print("Start day ",time[i-1]);
IsDefineTime=false;
break;
}
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
//+------------------------------------------------------------------+
Algoritmo do seu trabalho: Quando se inicia o indicador, define-se o intervalo de tempo do temporizador (por exemplo 10 segundos) - significa que cada 10 segundos do temporizador será accionado:
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
IsDefineTime=true; // true -> you can define time
}
e à variávelIsDefineTime é atribuído o valor verdadeiro. Para que serve? Quando IsDefineTime=true podemos, em OnCalculate(), introduzir um laço para determinar a hora de início do dia:
Neste ciclo começamos a atravessar a matriz de tempo[] (esta matriz armazena os valores do tempo de abertura) a partir da barra mais à direita (o seu índice é "0"). Quando o início do dia é encontrado, desajustamos o seu valor e atribuímos à variávelIsDefineTime o valorfalso - desta forma protegemo-nos de continuar a entrar no ciclo de determinação da hora de início do dia, até o temporizador voltar a funcionar.
Karputov Vladimir, obrigado pelo esclarecimento, no entanto, como é que isto resolve o problema?
Grosso modo, precisamos de conhecer a barra de tempo actual que corresponde à barra no início do dia. Precisamos de saber em cada barra e calcular e desenhar o indicador em conformidade.
Karputov Vladimir, obrigado pelo esclarecimento, no entanto, como é que isto resolve o problema?
Grosso modo, precisamos de conhecer a barra de tempo actual que corresponde à barra no início do dia. É necessário conhecê-lo em cada barra e calcular e desenhar o indicador em conformidade.
Foi assim que perguntou e foi assim que foi respondido :) . E se quiser não a hora da primeira barra deste dia, mas o índice desta barra - está aqui, quando se imprime o início do dia:
.
.
.
Print("Start day ",time[i-1]);
.
.
.
Utiliza-se o índice [i-1] - este é o número da primeira barra do dia.
Como pediu, obteve a sua resposta :) . E se não precisar da hora da primeira barra do dia, mas do índice desta barra, é aqui, quando se imprime o início do dia:
Utiliza-se o índice [i-1] - este é o número da primeira barra do dia.
Concordo - perguntei confusamente.
Há um indicador na aplicação que eu fiz, mas não conta correctamente. Sou terrivelmente burro e não compreendo, mesmo depois das vossas explicações, como fazê-lo determinar correctamente o índice correspondente à primeira barra no início do dia.
Peço desculpa pela insolência, mas talvez me possa mostrar como combinar o seu código com o meu?
Por favor, ajudem! (MQL4)
Preciso de obter a hora de abertura do Dia no gráfico M15 tendo em conta cada barra - para o indicador.
Decidi calcular em segundos, tendo em conta a barra actual (0), mas devo estar enganado.
D_Shift=(Open_time-pos*15*60-(Open_time-Open_timeTF))/1440*60;
Se para o indicador, então:
Mas: este código será executado cada vez que OnCalculate() for introduzido - dependendo das suas necessidades, pode adicionar bandeira bool ou colocar o código em função separada.
Se por indicador, então:
Mas: este código será executado cada vez que OnCalculate() - dependendo das suas necessidades, ou adicionar uma bandeira de bool ou colocar o código numa função separada.
Obrigada, mas a cada vez que se faz um novo cálculo não é bom - preciso de analisar o vosso código, no entanto, enquanto quero compreender porque é que o meu código não funciona, no registo são devolvidos números estranhos
acontece que existe uma diferença de 479 barras entre a primeira barra do dia e a barra actual - porque é que isso acontece?
Obrigada, mas recalcular em cada tick não é bom - preciso de pensar no vosso código, no entanto, enquanto quero compreender porque é que o meu código não funciona, o registo retorna números estranhos
acontece que existe uma diferença de 479 barras entre a primeira barra do dia e a barra actual - porque é que isso acontece?
Eu indiquei que não sou psíquico e é por isso que o sou:
Mas: este código será executado cada vez que OnCalculate() for introduzido- aqui, dependendo das suas necessidades, ou adicione uma bandeiraboolou coloque o código numa função separada.
Salientei que não sou psíquico e é por isso que o sou:
Karputov Vladimir, não compreendo o seu código - sou um principiante neste negócio enunca utilizei a funçãoOnCalculate antes, por isso não consigo compreender quetaxas_totalé calculado lá e, mais importante, para onde deve ser devolvido? Também não compreendo como tornar tudo isto numa função separada... é difícil de compreender sem comentários.
Aqui está o código completo do indicador MQL4:
Algoritmo do seu trabalho: Quando se inicia o indicador, define-se o intervalo de tempo do temporizador (por exemplo 10 segundos) - significa que cada 10 segundos do temporizador será accionado:
e à variávelIsDefineTime é atribuído o valor verdadeiro. Para que serve? Quando IsDefineTime=true podemos, em OnCalculate(), introduzir um laço para determinar a hora de início do dia:
Neste ciclo começamos a atravessar a matriz de tempo[] (esta matriz armazena os valores do tempo de abertura) a partir da barra mais à direita (o seu índice é "0"). Quando o início do dia é encontrado, desajustamos o seu valor e atribuímos à variávelIsDefineTime o valorfalso - desta forma protegemo-nos de continuar a entrar no ciclo de determinação da hora de início do dia, até o temporizador voltar a funcionar.
Karputov Vladimir , obrigado pelo esclarecimento, no entanto, como é que isto resolve o problema?
Grosso modo, precisamos de conhecer a barra de tempo actual que corresponde à barra no início do dia. Precisamos de saber em cada barra e calcular e desenhar o indicador em conformidade.
Karputov Vladimir , obrigado pelo esclarecimento, no entanto, como é que isto resolve o problema?
Grosso modo, precisamos de conhecer a barra de tempo actual que corresponde à barra no início do dia. É necessário conhecê-lo em cada barra e calcular e desenhar o indicador em conformidade.
Foi assim que perguntou e foi assim que foi respondido :) . E se quiser não a hora da primeira barra deste dia, mas o índice desta barra - está aqui, quando se imprime o início do dia:
Utiliza-se o índice [i-1] - este é o número da primeira barra do dia.
Como pediu, obteve a sua resposta :) . E se não precisar da hora da primeira barra do dia, mas do índice desta barra, é aqui, quando se imprime o início do dia:
Utiliza-se o índice [i-1] - este é o número da primeira barra do dia.
Concordo - perguntei confusamente.
Há um indicador na aplicação que eu fiz, mas não conta correctamente. Sou terrivelmente burro e não compreendo, mesmo depois das vossas explicações, como fazê-lo determinar correctamente o índice correspondente à primeira barra no início do dia.
Peço desculpa pela insolência, mas talvez me possa mostrar como combinar o seu código com o meu?
-Aleks-:
Como é que consigo detectar correctamente o índice correspondente à primeira barra no início do dia?
É um pouco confuso: