[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 672

 

Vor sechs Monaten hat jemand ein Skript veröffentlicht, mit dem man Zickzack-Werte (Zeit und Rate) in eine CSV-Datei drucken kann, um sie in EXCEL zu verarbeiten. Jetzt kann ich sie nicht mehr finden. Vielleicht hat sie jemand?

 
Richie:

Vor sechs Monaten hat jemand ein Skript veröffentlicht, mit dem man Zickzack-Werte (Zeit und Rate) in eine CSV-Datei drucken kann, um sie in EXCEL zu verarbeiten. Jetzt kann ich sie nicht mehr finden. Vielleicht hat sie jemand?

Erörtert hier und hier und auch dieser Indikator.

 

ToLik_SRGV, danke, ich habe diese Threads gelesen. Es gab ein Drehbuch. Es fehlt offenbar ein Ast oder ein Pfosten.

 
Richie:

ToLik_SRGV, danke, ich habe diese Threads gelesen. Es gab ein Drehbuch. Offensichtlich haben Sie einen Zweig oder einen Posten übersehen.


Sergei, manchmal ist es einfacher, selbst ein Skript zu schreiben, als es zu suchen :)))

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

Der Parameter isAllZigZagDate legt fest, ob nur der letzte ZigZag-Punkt (standardmäßig) oder der gesamte Verlauf geschrieben werden soll.

P.S.
Soll ich es in die Codebasis aufnehmen, damit ich später nicht danach suchen muss?

 
ToLik_SRGV: Sergei, manchmal ist es einfacher, selbst ein Skript zu schreiben als zu suchen :))) Der Parameter isAllZigZagDate legt fest, ob nur der letzte ZigZag-Punkt (standardmäßig) oder die gesamte Historie geschrieben werden soll.P.S. In einer Codebasis nicht zu suchen, oder ist es nicht notwendig?


Vielen Dank, Anatoly. Das stimmt, es ist schneller, sie selbst zu schreiben, als sie zu finden. Vielen Dank für das Skript. Besser ist es natürlich, auch die Codebasis einzubringen, vielleicht wird ja noch jemand gebraucht. Ansonsten verschwinden die Äste :). Ich habe meine auch geschrieben, oder besser gesagt "aus dem, was war, zusammengesetzt":

#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);
}
Dateien:
savezz.mq4  1 kb
 
Mein EA zeigt Informationen in einem separaten Indikatorfenster an. Wie kann ich erreichen, dass die Daten in diesem Fenster sofort aktualisiert werden, wenn sich die TF ändert, und nicht erst, wenn ein neuer Tick eintrifft?
 
artmedia70:
Mein EA zeigt die Informationen in einem separaten Indikatorfenster an. Wie kann man erreichen, dass bei einem Wechsel der TF die Daten im Fenster sofort aktualisiert werden und nicht erst mit dem Eintreffen eines neuen Ticks?


Schreiben Sie einen Aufruf zum Aktualisieren der erforderlichen Daten in init()

ZS: am Wochenende schrieb ich einen vollständigen Code von Zitat unloader in der Init, es funktionierte gut, ohne Ticks - es nur die Entladung auf Start und erhielt Daten in einer Schleife

 
artmedia70:
Mein EA zeigt Informationen in einem separaten Indikatorfenster an. Wie kann ich erreichen, dass die Daten im Fenster sofort aktualisiert werden, wenn sich die TF ändert, und nicht erst, wenn ein neuer Tick kommt?

Verwendung der Funktion WindowRedraw();

 
IgorM:


Schreiben Sie einen Aufruf zur Aktualisierung der erforderlichen Daten in init()

HH: am Wochenende schrieb ich einen vollständigen Code von Zitat Unloader in der Init, es funktionierte gut, ohne Ticks - es nur Schleife Entladen auf Start und erhielt Daten

D.h. ich muss in der init() von EA einen Funktionsaufruf hinzufügen, um die Informationen im Indikatorfenster auszugeben?
 
ToLik_SRGV:

Verwendung der Funktion WindowRedraw();

Ich habe diese Funktion in dem leeren Indikatorfenster. Die Daten werden jedoch nur bei einem neuen Tick aktualisiert.

#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);
}