Não recalcula 0 barra pela mesma razão que não se começa com 0.
A minha barra 0 não é calculada de acordo com a fórmula.
Buffer[0]=price[0];
E depois, com base no movimento dos preços, o indicador irá acompanhar a tendência
Por exemplo, se o preço se afastou do indicador e não se vai mexer, então durante o"período" do indicador de vela irá recuperar o preço, esta é para mim uma espécie de alternativa ao MA
O meu primeiro indicador. Quero escalar o símbolo de 0 a 100. Estou a fazê-lo bem? E como fazer com que a barra actual não seja recalculada (no testador, ela sacode, mas não no gráfico)
#property indicator_separate_window#property indicator_minimum 0#property indicator_maximum 100#property indicator_buffers 1#property indicator_plots 1//--- plot Label1#property indicator_label1 "Main"#property indicator_type1 DRAW_LINE#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- indicator buffersdouble MainBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,MainBuffer,INDICATOR_DATA);
IndicatorSetString(INDICATOR_SHORTNAME,"NormSymbol");
IndicatorSetInteger(INDICATOR_DIGITS,2);
ArrayInitialize(MainBuffer, EMPTY_VALUE);
//---return(0);
}
//+------------------------------------------------------------------+//| 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 first,bar,nLowBar=0,nHighBar=0;
int nVizCount = (int)ChartGetInteger(0, CHART_VISIBLE_BARS);
if(prev_calculated==0) // проверка на первый старт расчёта индикатора
{
first=0; // стартовый номер для расчёта всех баров
}
else
{
first=prev_calculated-1; // стартовый номер для расчёта новых баров
}
//---- основной цикл расчёта индикатораfor(bar=first; bar<rates_total; bar++)
{
nLowBar =ArrayMinimum(low, bar, nVizCount);
nHighBar=ArrayMaximum(high, bar, nVizCount);
if(nLowBar>0 && nHighBar>0 && high[nHighBar]-low[nLowBar]!=0)
{
MainBuffer[bar]=((close[bar] -low[nLowBar])/(high[nHighBar]-low[nLowBar]))*100;
}
else
{
MainBuffer[bar]=EMPTY_VALUE;
}
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
Konstantin83: como fazer com que a barra actual não seja recalculada
Memorizar a hora de abertura da barra actual e compará-la com o mesmo valor do tick de entrada. Só recalcular o valor da barra actual quando os valores não coincidirem.
Memorizar a hora de abertura da barra actual e compará-la com o mesmo valor do tick de entrada. Só recalcular o valor da barra actual quando os valores não coincidirem.
Não reparei em mais nada. Os artigos sugerem uma estrutura semelhante. Há um controlo de divisão por zero.
Sim, para evitar um novo cálculo, também se pode comparar o calculado_previamente e as taxas_total, tanto quanto me lembro.
Sabe porque é que o indicador não traça a linha depois de fechar o terminal e reiniciar o terminal? Se mudar para outro período de tempo, este é desenhado.
Konstantin83: Sabe porque é que depois de fechar o terminal com o indicador e reiniciar o terminal o indicador não traça uma linha? Se mudar para outro período de tempo, este será desenhado.
O terminal precisa de algum tempo para "se levantar", sincronizar as suas bases de dados com o servidor, etc., ao arrancar. Se o indicador for iniciado ao mesmo tempo, pode não haver dados para o cálculo do indicador. Experimente a solução mais fácil: inserir um atraso de dois ou três segundos no OnInit().
A boa solução é imprimir toda a informação importante quando se procura a área problemática. Como
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Mudou para isto
Parece estar a funcionar.as suas matrizes não são serializadas.
é por isso que é isto.
Buffer[i+1]=Buffer[i]+delta;espreitar para o futuro
Não recalcula 0 barra - pela mesma razão - o seu início - não começa com 0.
as suas matrizes não são serializadas.
por isso é que é isto.
a espreitar o futuro.
Não recalcula 0 barra pela mesma razão que não se começa com 0.
A minha barra 0 não é calculada de acordo com a fórmula.
E depois, com base no movimento dos preços, o indicador irá acompanhar a tendência
Por exemplo, se o preço se afastou do indicador e não se vai mexer, então durante o"período" do indicador de vela irá recuperar o preço, esta é para mim uma espécie de alternativa ao MA
lazarev-d-m:
é uma espécie de alternativa ao MA para mim
O meu primeiro indicador. Quero escalar o símbolo de 0 a 100. Estou a fazê-lo bem? E como fazer com que a barra actual não seja recalculada (no testador, ela sacode, mas não no gráfico)
Memorizar a hora de abertura da barra actual e compará-la com o mesmo valor do tick de entrada. Só recalcular o valor da barra actual quando os valores não coincidirem.
Eu colocaria isto no bloco de inicialização:
e as variáveis seriam declaradas a nível global do programa:
Memorizar a hora de abertura da barra actual e compará-la com o mesmo valor do tick de entrada. Só recalcular o valor da barra actual quando os valores não coincidirem.
Eu colocaria isto no bloco de inicialização:
Não reparei em mais nada. Os artigos sugerem uma estrutura semelhante. Há um controlo de divisão por zero.
Sim, para evitar um novo cálculo, também se pode comparar o calculado_previamente e as taxas_total, tanto quanto me lembro.
Não reparei em mais nada. Os artigos sugerem uma estrutura semelhante. Há um controlo de divisão por zero.
Sim, para evitar um novo cálculo, também se pode comparar o calculado_previamente e as taxas_total, tanto quanto me lembro.
O terminal precisa de algum tempo para "se levantar", sincronizar as suas bases de dados com o servidor, etc., ao arrancar. Se o indicador for iniciado ao mesmo tempo, pode não haver dados para o cálculo do indicador. Experimente a solução mais fácil: inserir um atraso de dois ou três segundos no OnInit().
A boa solução é imprimir toda a informação importante quando se procura a área problemática. Como
Yedelkin:
Ainda não encontrei qualquer ajuda para negociação ao vivo - basta tentar abrir e fechar uma posição numa conta de demonstração.
Aqui está: https://www.mql5.com/ru/forum/6343/page96#comment_419028