Erros, bugs, perguntas - página 31

 
Urain:
Pode, mas por vezes funciona, embora quando eu estabeleço 3, o nome curto mostra 3 valores e eu só quero um dos amortecedores principais.

Então talvez desta forma:

#property indicator_buffers 3
#property indicator_plots   1
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,S,INDICATOR_CALCULATIONS);

Apenas um valor é apresentado no gráfico.

 
DC2008:

Então talvez seja assim:

O gráfico mostra apenas um valor.

É assim que se verifica que o nome curto do indicador mostra 3 números, enquanto o tampão para desenhar um, armazena tudo o que precisa de saber,

O problema é que em 4 pode apenas solicitar o valor do rato na barra desejada e aqui tenho de descarregar todo o buffer e armazená-lo em algum lugar

Este armazenamento não é necessário para as necessidades do indicador. Mas eu não sei como receber o valor da onda.

 
DC2008:

Então talvez desta forma:

Apenas um valor é apresentado no gráfico.

Também com falhas ....
 
Interesting:

Aí não se trata de inicialização. Nem sequer é sobre essas duas linhas que o Mashek chama.

Mesmo que assumamos que o parâmetro SYMBOL é realmente necessário (pessoalmente duvido), o trabalho com amortecedores é coxo, e nem sequer estou a falar do bloco da calculadora...

Vejo que o indicador mostra o valor do ângulo de regressão linear do instrumento errado sobre o qual está a funcionar,

e a prescrita na entrada, por isso esperemos que esconda o verificador.

Agora, por outro lado, diga-me com inteligência o que vê como incongruente no que acontece no cálculo?

Não pretendo que esteja tudo bem (como apenas aprender cinco e naturalmente vaporizado, como muitos).

A primeira coisa que me vem à mente é que a duração da história em diferentes pares é diferente e, portanto, falhas,

Mas os programadores garantiram-me que o terminal irá carregar todos os dados necessários por si só.

 
Urain:

O problema é que em 4 pode simplesmente solicitar o valor da forma de onda na barra necessária e aqui tem de carregar todo o amortecedor,

o problema é que em 4 pode simplesmente solicitar o valor da onda na barra necessária, mas aqui tem de descarregar todo o buffer e armazená-lo em algum lugar

Tenho de carregar todo o amortecedor, mas não preciso dele para as minhas necessidades de indicador. Não sei como obtê-lo de outra forma.

Posso acertá-los, ou quase acertá-los. Para todos os outros amortecedores podemos trabalhar (as séries não são utilizadas, o que é estranho). Mas o que se passa na calculadora é uma grande questão...
 
Urain:

Vejo que o indicador mostra o valor do ângulo de regressão linear do instrumento errado sobre o qual está a funcionar,

mas aquele que é prescrito na intuição, por isso esperemos que esconda o verificador.

Agora, ao frio, diga-me razoavelmente o que vê absurdo no que acontece no cálculo?

Não pretendo que esteja tudo bem (como apenas aprender cinco e naturalmente cozido a vapor, como muitos).

A primeira coisa que me vem à mente é que a duração da história em diferentes pares de diferentes falhas e, portanto, falhas,

Os programadores garantiram-me que o terminal irá carregar por si só toda a informação necessária.


Sobre o que há para discutir? Pegamos no chapéu da calculadora e vemos o que vemos ali, e é isto que vemos:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

Depois disso, há o controlo das barras.

   int count=rates_total-prev_calculated;
   if(count==0)count=1;
Se não souber a palavra-passe, receberá um aviso. Então diga-me, onde está a lógica?
 

Reescrevi o cálculo desta forma:

  {
//---
   int count=rates_total-prev_calculated;
   if(count>_Bars())count=_Bars()-1;
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<count;i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){return(Bars(symbol,_Period));}
As mensagens de erro desapareceram, mas continua a não funcionar correctamente.
 

É aqui que atormentamos os nossos cérebros por causa de um peru semelhante. Veja o que saiu de lá

 
Urain:

Reescrevi o cálculo desta forma:

os registos de erros desapareceram, mas ainda não funciona como deveria.

A única maneira correcta é muito simples.

Escreve-se um indicador de funcionamento a 100%, e é feito classicamente sem o parâmetro "Símbolo", ou seja, é calculado usando o símbolo e o período actuais.

Depois disso, essa calculadora BASIC é chamada em Expert Advisor (se for fornecido funcionamento mecânico) ou calculadora (se for necessário exibir informação no gráfico de INSTRUMENTO NÃO-CALCULADO).

PS

Caso contrário, se a calculadora ou uma função separada tiver de fazer um cálculo adicional, e depois ligar os resultados aos dados gráficos actuais...

 
Urain:

Reescrevi o cálculo desta forma:

As mensagens de erro desapareceram, mas continua a não funcionar correctamente.

Isso é provavelmente melhor:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Parece funcionar correctamente.