Erreurs, bugs, questions - page 917

 
Konstantin83:

Lors de l'enregistrement d'un fichier csv, les données ne sont pas divisées en colonnes. Même le script de l'exemple standard produit toutes les données dans une seule colonne.

Spécifiez le séparateur :

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

Spécifiez le séparateur :

Ça n'a pas marché. Lorsqu'il s'ouvre dans Excel, il indique un format de fichier inconnu et ne divise pas les colonnes non plus. Mais si vous ne spécifiez pas de séparateur et ne spécifiez pas d'extension de fichier, il est également indiqué format inconnu, mais le texte est brisé en colonnes...
 
Konstantin83:
Ça n'a pas marché. Lorsqu'il s'ouvre dans Excel, il indique un format de fichier inconnu et ne divise pas les colonnes non plus. Mais si vous ne spécifiez pas de séparateur ni d'extension de fichier, le système indique également un format inconnu, mais le texte est divisé en colonnes...

Il y a plus à faire comme ça :

filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV|FILE_ANSI,",");
 
Il y a un problème avec les graphiques dans Signals. Ou c'est juste moi ?
 

Est-il possible de créer un indicateur qui aura une ligne tampon, par exemple la ligne close[] et un commentaire en haut à gauche ? J'ai essayé de faire un exemple simple pour que mon terminal se bloque

#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);
  }
 
Retirez le commentaire de la boucle - ça devrait être plus facile.
 
Dima_S:
Retirez le commentaire de la boucle - ça devrait être plus facile.
Merci, je n'avais pas réalisé que ce serait une telle charge pour le système.
 
Quand l'option #resource sera-t-elle appliquée aux fichiers indicateurs ? Quelqu'un le sait-il ? J'aimerais vraiment combiner l'ensemble du projet en un seul fichier .ex5.
 
MoneyJinn:
Quand l'option #resource sera-t-elle appliquée aux fichiers indicateurs ? Quelqu'un le sait-il ? J'aimerais beaucoup pouvoir combiner l'ensemble du projet en un seul fichier .ex5.
Ils semblent avoir promis une telle possibilité, mais n'ont pas dit quand.
 

Veuillez expliquer pourquoi la deuxième mémoire tampon (label2) est nulle.

#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) Pour une raison quelconque, la fonction OnCalculate n'a aucun problème avec les tampons multiples, où il y a des fermetures, ouvertures, etc. séparées.

2) J'aimerais l'utiliser, mais il n'utilise pas l'algorithme de calcul des moyennes mobiles qui est décrit dans le code ci-dessus.

ExtLineBuffer2[i] a essayé d'attribuer différentes valeurs, y compris des constantes - toujours zéro