Erros, bugs, perguntas - página 917

 
Konstantin83:

Ao guardar um ficheiro csv, os dados não são divididos em colunas. Mesmo o guião do exemplo padrão produz todos os dados numa só coluna.

Especificar o separador:

filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV,",");
 
tol64:

Especificar o separador:

Não funcionou. Ao abrir em Excel diz formato de ficheiro desconhecido e também não divide as colunas. Mas se não especificar um separador e não especificar uma extensão de ficheiro, também diz formato desconhecido, mas o texto é quebrado em colunas...
 
Konstantin83:
Não funcionou. Ao abrir em Excel diz formato de ficheiro desconhecido e também não divide colunas. Mas se não especificar um separador e não especificar uma extensão de ficheiro, também diz formato desconhecido, mas o texto é quebrado em colunas...

Há mais a fazer assim:

filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV|FILE_ANSI,",");
 
Há uma falha com os gráficos em Sinais. Ou serei apenas eu?
 

É possível criar um indicador que terá uma linha tampão, por exemplo, fechar[] linha e um comentário no canto superior esquerdo? Tentei fazer um exemplo simples para que o meu terminal ficasse pendurado

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Histogram
#property indicator_label1  "1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
double MAbuf1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartGetInteger(0,CHART_VISIBLE_BARS);
   SetIndexBuffer(0,MAbuf1,INDICATOR_DATA);
   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 start=0;
//--- если расчет уже производился на предыдущем запуске OnCalculate
   if(prev_calculated>0) start=prev_calculated-1; // установим начало расчетов с предпослденего бара
//--- заполняем индикаторный буфер значениями
   for(int i=start;i<rates_total;i++)
     {
      //----------------------Обнуляем буферы
      MAbuf1[i]=0;
      MAbuf1[i]=close[i];
      Comment("Work");


     }
//--- вернем значение prev_calculated для следующего вызова функции
   return(rates_total);
  }
 
Tirar o comentário do laço - deverá facilitar o processo.
 
Dima_S:
Tirar o comentário do laço - deverá facilitar o processo.
Obrigado, não sabia que seria um fardo tão pesado para o sistema
 
Quando é que a opção #resource será aplicada aos ficheiros indicadores? Alguém sabe? Quero realmente combinar todo o projecto num único ficheiro .ex5.
 
MoneyJinn:
Quando é que a opção #resource será aplicada aos ficheiros indicadores? Alguém sabe? Gostaria muito de combinar todo o projecto num único ficheiro .ex5.
Eles parecem ter prometido tal possibilidade, mas não disseram quando.
 

Explique por favor porque é que o segundo tampão (label2) é zero

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrWhite
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double ExtLineBuffer[];
double ExtLineBuffer2[];
int    InpMAPeriod=13;         // Period
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLineBuffer2,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- check for bars count
   if(rates_total<InpMAPeriod-1+begin)
      return(0);// not enough bars for calculation
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
      ArrayInitialize(ExtLineBuffer,0);
//--- sets first bar from what index will be draw
      InpMAPeriod=20;
   int i,limit;
//--- first calculation or number of bars was changed
   if(prev_calculated==0)// first calculation
     {
      limit=InpMAPeriod+begin;
      //--- set empty value for first limit bars
      for(i=0;i<limit-1;i++) ExtLineBuffer[i]=0.0;
      //--- calculate first visible value
      double firstValue=0;
      for(i=begin;i<limit;i++)
         firstValue+=price[i];
      firstValue/=InpMAPeriod;
      ExtLineBuffer[limit-1]=firstValue;
      //ExtLineBuffer[i]=1;
     }
   else limit=prev_calculated-1;
//--- main loop
   for(i=limit;i<rates_total && !IsStopped();i++)
   ExtLineBuffer[i]=ExtLineBuffer[i-1]+(price[i]-price[i-InpMAPeriod])/InpMAPeriod;
   ExtLineBuffer2[i]=ExtLineBuffer[i];
//--- return value of prev_calculated for next call
   Comment(ExtLineBuffer[rates_total-1]);
   return(rates_total);
  }
//+------------------------------------------------------------------+

1) Por alguma razão, a função OnCalculate não tem problemas com múltiplos amortecedores, onde existem amortecedores separados, fechados, abertos, etc.

2) Adoraria utilizá-lo, mas não utiliza o algoritmo para o cálculo das médias móveis que é descrito no código acima

ExtLineBuffer2[i] tentou atribuir valores diferentes incluindo constantes - sempre zero

Razão: