[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 672

 

Sei mesi fa qualcuno ha postato uno script per stampare i valori a zig-zag (tempo e tasso) in un file CSV per lavorare in EXCEL. Ora non riesco a trovarlo. Forse qualcuno ce l'ha?

 
Richie:

Sei mesi fa qualcuno ha postato uno script per stampare i valori a zig-zag (tempo e tasso) in un file CSV per lavorare in EXCEL. Ora non riesco a trovarlo. Forse qualcuno ce l'ha?

Discusso qui e qui e anche questo indicatore.

 

ToLik_SRGV, grazie, ho letto questi thread. C'era un copione. Manca apparentemente un ramo o un palo.

 
Richie:

ToLik_SRGV, grazie, ho letto questi thread. C'era un copione. Mancava apparentemente il ramo o il post.


Sergei, a volte è più facile scrivere uno script da solo che cercarlo :)))

//+------------------------------------------------------------------+
//|                                               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                                                              |
//+------------------------------------------------------------------+

Il parametro isAllZigZagDate definisce se deve essere scritto solo l'ultimo punto ZigZag (per default) o tutta la storia.

P.S.
Devo gettarlo nel codebase in modo da non doverlo cercare più tardi?

 
ToLik_SRGV: Sergei, a volte è più facile scrivere uno script da solo che cercare :))) Il parametro isAllZigZagDate definisce di scrivere solo l'ultimo punto di ZigZag (per default) o tutta la storia.P.S. Per gettare in un codebase non cercare poi o non è necessario?


Grazie, Anatoly. È vero, è più veloce scriverlo da soli che trovarlo. Grazie per lo script. Meglio naturalmente buttare dentro anche la codebase, forse ci sarà bisogno di qualcun altro. Altrimenti, i rami stanno scomparendo :). Anch'io ho scritto il mio, o meglio "assemblato da ciò che era":

#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);
}
File:
savezz.mq4  1 kb
 
Il mio EA visualizza le informazioni in una finestra separata dell'indicatore. Come posso fare in modo che i dati in questa finestra siano aggiornati immediatamente quando il TF cambia e non con l'arrivo di un nuovo tick?
 
artmedia70:
Il mio EA visualizza le informazioni in una finestra separata dell'indicatore. Come fare in modo che al cambio di TF i dati nella finestra siano aggiornati immediatamente, e non con l'arrivo di un nuovo tick?


Scrivere una chiamata per aggiornare i dati necessari in init()

ZS: nel fine settimana ho scritto un codice completo dello scaricatore di quotazioni nell'init, ha funzionato bene senza ticchettii - ha solo fatto un loop dello scaricatore all'avvio e ha ricevuto dati

 
artmedia70:
Il mio EA visualizza le informazioni in una finestra separata dell'indicatore. Come posso fare in modo che i dati nella finestra si aggiornino immediatamente quando il TF cambia e non con l'arrivo di un nuovo tick?

Utilizzando la funzione WindowRedraw();

 
IgorM:


Scrivere una chiamata per aggiornare i dati richiesti in init()

HH: nel fine settimana ho scritto un codice completo dello scaricatore di quotazioni nell'init, ha funzionato bene senza tick - ha solo scaricato in loop all'avvio e ricevuto dati

Cioè devo aggiungere nella init() di EA una chiamata di funzione per emettere le informazioni nella finestra dell'indicatore?
 
ToLik_SRGV:

Utilizzando la funzione WindowRedraw();

Ho questa funzione nella finestra vuota dell'indicatore. Ma i dati vengono aggiornati solo su un nuovo 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);
}
Motivazione: