[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 672

 

Il y a six mois, quelqu'un a posté un script permettant d'imprimer les valeurs de zig-zag (temps et taux) dans un fichier CSV pour travailler dans EXCEL. Maintenant, je ne peux pas le trouver. Peut-être que quelqu'un l'a ?

 
Richie:

Il y a six mois, quelqu'un a posté un script permettant d'imprimer les valeurs de zig-zag (temps et taux) dans un fichier CSV pour travailler dans EXCEL. Maintenant, je ne peux pas le trouver. Peut-être que quelqu'un l'a ?

Discuté ici et ici et aussi cet indicateur.

 

ToLik_SRGV, merci, j'ai lu ces fils. Il y avait un scénario. Manque apparemment une branche ou un poteau.

 
Richie:

ToLik_SRGV, merci, j'ai lu ces fils. Il y avait un scénario. Manqué apparemment branche ou poste.


Sergei, il est parfois plus facile d'écrire un script soi-même que de le chercher :))))

//+------------------------------------------------------------------+
//|                                               ZigZag_to_File.mq4 |
//|                               Copyright © 2010, Анатолий Сергеев |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property show_inputs

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern string File_name = "";
extern bool isAllZigZagDate = false;

int Handle;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
   if(File_name == "")File_name = Symbol() + Period() + "_ZigZag_Date";

   Handle = FileOpen(File_name + ".csv",FILE_WRITE | FILE_CSV);
   if(Handle == -1){
      Alert("Ошибка при открытии файла ", File_name + ".csv");
   }else{
      FileWrite(Handle,"Time;Open;Close;Low;High;ZigZag Date");
   }
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start(){
   double date;

   for(int shift = 0; shift <= Bars-1; shift++){
      date = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
      if(date > 0){
         FileWrite(Handle,TimeToStr(Time[shift]),Open[shift],Close[shift],Low[shift],High[shift],date);
         if(!isAllZigZagDate)break;
      }else{
         continue;
      }
   }
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){
   FileClose(Handle);
}
//+------------------------------------------------------------------+
//| end                                                              |
//+------------------------------------------------------------------+

Le paramètre isAllZigZagDate définit si seul le dernier point ZigZag doit être écrit (par défaut) ou tout l'historique.

P.S.
Dois-je le jeter dans la base de code pour ne pas avoir à le rechercher plus tard ?

 
ToLik_SRGV: Sergei, il est parfois plus facile d'écrire soi-même un script que de chercher :))) Le paramètre isAllZigZagDate définit d'écrire seulement le dernier point de ZigZag (par défaut) ou tout l'historique.P.S. A jeter dans un codebase pour ne pas chercher alors ou ce n'est pas nécessaire ?


Merci, Anatoly. C'est vrai, il est plus rapide de l'écrire soi-même que de le trouver. Merci pour le script. Il est bien sûr préférable de jeter la base de code, aussi, peut-être quelqu'un d'autre sera nécessaire. Sinon, les branches disparaissent :). J'ai aussi écrit le mien, ou plutôt "assemblé à partir de ce qui était" :

#property show_inputs
extern string ext="txt";
extern int last_bar=1;
extern int bars=1000;
extern int ExtDepth=24;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int Kol=100;

int i,j;
double zz;

int start()
{
int h=FileOpen(Symbol()+Period()+"."+ext+"",FILE_WRITE|FILE_CSV,",");
  for(i=0,j=0;i<Bars && j<Kol;i++)
  {
    zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
    if(zz!=0)
    {
      FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),i,zz);
      j++;   
    }
  }
FileClose(h);
return(0);
}
Dossiers :
savezz.mq4  1 kb
 
Mon EA affiche les informations dans une fenêtre d'indicateur séparée. Comment puis-je faire en sorte que les données de cette fenêtre soient mises à jour immédiatement lorsque le TF change et non pas avec l'arrivée d'un nouveau tick ?
 
artmedia70:
Mon EA affiche les informations dans une fenêtre d'indicateur séparée. Comment faire pour que, lors d'un changement de TF, les données dans la fenêtre soient mises à jour immédiatement, et non pas avec l'arrivée d'un nouveau tick ?


Ecrire un appel pour rafraîchir les données nécessaires dans init()

ZS : le week-end dernier, j'ai écrit un code complet de déchargement de citation dans l'init, il a fonctionné sans ticks - il a juste bouclé le déchargement au démarrage et a reçu des données.

 
artmedia70:
Mon EA affiche les informations dans une fenêtre d'indicateur séparée. Comment faire pour que les données dans la fenêtre soient mises à jour immédiatement lorsque le TF change et non pas avec l'arrivée d'un nouveau tick ?

Utilisation de la fonction WindowRedraw() ;

 
IgorM:


Ecrire un appel pour mettre à jour les données requises dans init()

HH : le week-end dernier, j'ai écrit un code complet de déchargement de citation dans l'init, il a fonctionné correctement sans ticks - il a juste bouclé le déchargement au démarrage et a reçu des données.

C'est-à-dire que je dois ajouter dans le init() de l'EA un appel de fonction pour sortir l'information dans la fenêtre de l'indicateur ?
 
ToLik_SRGV:

Utilisation de la fonction WindowRedraw() ;

J'ai cette fonction dans la fenêtre vide de l'indicateur. Mais les données ne sont mises à jour que lors d'un nouveau tick.

#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 10
 
bool initFinished=false;
// добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectsDeleteAll();
   // удаляем все объекты
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if(initFinished==false)
   {
      IndicatorShortName("Info");
 
      int winID=WindowFind("Info");
   
      if(winID<0)
      {
         // если номер подокна равен -1, то возникла ошибка
         Print("Чёт не могу твоего окошечка найти, пошел я отсюдова");
         return(0);
      }  
//------------------------ Тут можно рисовать ------------------------- 
 
// ----------------------- Но не нужно... ----------------

//------------------------------------------------------------------------- 
      WindowRedraw();      
            
      initFinished=true;
     
   }
   
   return(0);
}