[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 672

 

Hace seis meses alguien publicó un script para imprimir valores en zig-zag (tiempo y tasa) a un archivo CSV para trabajar en EXCEL. Ahora no puedo encontrarlo. ¿Tal vez alguien lo tenga?

 
Richie:

Hace seis meses alguien publicó un script para imprimir valores en zig-zag (tiempo y tasa) a un archivo CSV para trabajar en EXCEL. Ahora no puedo encontrarlo. ¿Tal vez alguien lo tenga?

Discutido aquí y aquí y también este indicador.

 

ToLik_SRGV, gracias, he leído estos hilos. Había un guión. Falta aparentemente una rama o un poste.

 
Richie:

ToLik_SRGV, gracias, he leído estos hilos. Había un guión. Al parecer, se ha perdido la rama o el puesto.


Sergei, a veces es más fácil escribir un guión tú mismo que buscarlo :)))

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

El parámetro isAllZigZagDate define si sólo se debe escribir el último punto ZigZag (por defecto) o todo el historial.

P.D.
¿Lo meto en el código base para no tener que buscarlo después?

 
ToLik_SRGV: Sergei, a veces es más fácil escribir un script tú mismo que buscar :))) El parámetro isAllZigZagDate define que se escriba sólo el último punto del ZigZag (por defecto) o todo el historial.P.S. ¿Echar en un codebase no buscar entonces o no es necesario?


Gracias, Anatoly. Así es, es más rápido escribirlo uno mismo que encontrarlo. Gracias por el guión. Mejor, por supuesto, para lanzar la base de código, también, tal vez alguien más será necesario. De lo contrario, las ramas desaparecen :). Yo también escribí la mía, o mejor dicho, la "monté a partir de lo que había":

#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);
}
Archivos adjuntos:
savezz.mq4  1 kb
 
Mi EA muestra la información en una ventana separada del indicador. ¿Cómo puedo hacer que los datos de esta ventana se actualicen inmediatamente cuando cambia el TF y no con la llegada de un nuevo tick?
 
artmedia70:
Mi EA muestra la información en una ventana separada del indicador. ¿Cómo hacer que al cambiar de TF los datos de la ventana se actualicen inmediatamente, y no con la llegada de un nuevo tick?


Escribe una llamada para refrescar los datos necesarios en init()

ZS: el fin de semana escribí un código completo del descargador de citas en el init, funcionó bien sin ticks - sólo hizo un bucle de descarga en el inicio y recibió datos

 
artmedia70:
Mi EA muestra la información en una ventana separada del indicador. ¿Cómo puedo hacer que los datos de la ventana se actualicen inmediatamente cuando cambia el TF y no con un nuevo tick?

Utilizando la función WindowRedraw();

 
IgorM:


Escribe una llamada para actualizar los datos necesarios en init()

HH: en el fin de semana escribí un código completo del descargador de citas en el init, funcionó bien sin ticks - sólo se descargó en bucle en el inicio y recibió datos

Es decir, ¿tengo que añadir en el init() del EA una llamada de función para que salga la información en la ventana del indicador?
 
ToLik_SRGV:

Utilizando la función WindowRedraw();

Tengo esta función en la ventana del indicador vacío. Pero los datos se actualizan sólo en un nuevo 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);
}
Razón de la queja: