[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 672

 

Há seis meses, alguém postou um script para imprimir valores em zig-zag (tempo e taxa) em um arquivo CSV para trabalhar no EXCEL. Agora eu não consigo encontrá-lo. Talvez alguém o tenha?

 
Richie:

Há seis meses, alguém postou um script para imprimir valores em zig-zag (tempo e taxa) em um arquivo CSV para trabalhar no EXCEL. Agora eu não consigo encontrá-lo. Talvez alguém o tenha?

Discutido aqui e aqui e também este indicador.

 

ToLik_SRGV, obrigado, eu li estes tópicos. Havia um roteiro. Falta aparentemente uma filial ou posto.

 
Richie:

ToLik_SRGV, obrigado, eu li estes tópicos. Havia um roteiro. Aparentemente faltou filial ou posto.


Sergei, às vezes é mais fácil escrever um roteiro você mesmo do que procurar por ele :))))

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

O parâmetro isAllZigZagDate define se apenas o último ponto ZigZag deve ser escrito (por padrão) ou todo o histórico.

P.S.
Devo jogá-lo na base de código para que não tenha que procurá-lo mais tarde?

 
ToLik_SRGV: Sergei, às vezes é mais fácil escrever um roteiro você mesmo do que procurar :)))) O parâmetro AllZigZagDate define escrever apenas o último ponto ZigZag (por padrão) ou todo o histórico.P.S. Para lançar uma base de código para não procurar então ou não é necessário?


Obrigado, Anatoly. Isso mesmo, é mais rápido escrevê-lo você mesmo do que encontrá-lo. Obrigado pelo roteiro. É claro que é melhor jogar na base de código também, talvez seja necessária outra pessoa. Caso contrário, as filiais estão desaparecendo :). Eu também escrevi o meu, ou melhor, "montado a partir do que 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);
}
Arquivos anexados:
savezz.mq4  1 kb
 
Minha EA exibe informações em uma janela indicadora separada. Como posso fazer com que os dados nesta janela sejam atualizados imediatamente quando a TF mudar e não com a chegada de um novo tick?
 
artmedia70:
Minha EA exibe as informações em uma janela indicadora separada. Como fazer, que na mudança da TF os dados na janela sejam atualizados imediatamente, e não com a chegada de um novo tick?


Escreva uma chamada para refrescar os dados necessários no init()

ZS: no fim de semana escrevi um código completo de descarregador de cotação no init, ele funcionou bem sem carrapatos - ele apenas loopou o descarregamento no início e recebeu os dados

 
artmedia70:
Minha EA exibe informações em uma janela indicadora separada. Como posso atualizar os dados na janela imediatamente quando a TF muda e não com a chegada de um novo tick?

Usando a função WindowRedraw();

 
IgorM:


Escreva uma chamada para atualizar os dados necessários no init()

HH: no fim de semana escrevi um código completo de descarregador de cotação no init, funcionou bem sem carrapatos - apenas descarregou em loop na partida e recebeu dados

Isto é, preciso adicionar no init() da EA uma chamada de função para emitir as informações na janela indicadora?
 
ToLik_SRGV:

Usando a função WindowRedraw();

Eu tenho esta função na janela indicadora vazia. Mas os dados são atualizados apenas em um novo 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);
}