Indyk do eksportu danych do pliku csv?

O jezykach programowania w platformach i nie tylko.
LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

borysewicz pisze: if (ws) wyj = wyj + delimiter+iCustom(NULL,0,"Stochastic",KPeriod4,DPeriod4,Slowing4,pos,0);
Bo pos powinno byc na ostaniej pozycji (w miejsce zera) a nie odwrotnie :)

PS.
Prosba, jezeli juz dodales nowe parametry (przyznam sie ze jak tworzylem to na szybko to nie pomysalem o tym) to dodaj prosze komentarz obok WS bo pozniej moze sie okazac ze wiecej osob bedzie dodawalo, i ostatecznie nikt nie po kuma co znaczy jakis skrot....i wersje wyzej (chciaz moze zwiekszyles, nie pamietam jaka byla ostatania)

A zreszta sam sam poprawie :) i dorobie troszke

Kod: Zaznacz cały


//+------------------------------------------------------------------+
//|                                                    EA_export.mq4 |
//|                                                         Jacek W. |
//|                                                        Subversor |
//+------------------------------------------------------------------+
#property copyright "Ver 3.6 "
#property link      "Subversor jacekwn@gmail.com"

//---- input parameters
extern int       last_X=500;
extern string delimiter = ",";
extern bool   data_czas_osobno = true;
extern bool   op = true; //open
extern bool   hi = true; //high
extern bool   lo = true; //low
extern bool   cl = true; //close`
extern bool   vo = true; //volume
extern bool   ws = false; //Stochastic
extern bool   misc = true; //dowolny (no prawie
extern string    name = "dane.csv";
// Stochastic4 filtr
extern string StochasticInfo4Filtr = "Stochastic";
extern int KPeriod4=12;
extern int DPeriod4=9;
extern int Slowing4=26;
extern string iCustomInfo4Filter = "Parametry dowolnego wskaznika";//przyjmuje parametry tylko typu int  
                                                                   //moze komus bedzie sie chcialo dodac inne    
extern string wsk_name = "MACD"; //np.MACD co jest bez sensu akurat jesli chodzi o iCustom
extern int mode  = 0; //nr indeksu wykresu najczesciej zero
extern int ile_parametrow = 4;   //nie liczac oczywiscie symbol timeframe mode i shift
extern int param1 = 12; 
extern int param2 = 26;
extern int param3 = 9;
extern int param4 = 0;
extern int param5 = 0;
extern int param6 = 0;
extern int param7 = 0;
extern int param8 = 0;
extern int param9 = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

  {
 
//----
   if (StringLen(delimiter)!=1){
      Print("Delimiter musi miec 1 znak");
      return;     
   }   
   
   string linia;
   int handler;
   if(!NewBar()) return;
   //handler =FileOpen(name,FILE_CSV|FILE_WRITE,delimiter);
   handler =FileOpen(name,FILE_CSV|FILE_WRITE,delimiter);
   if (handler<1){
      Print("blad otwarcia pliku");
      return;
   }
   for (int i=0;i<last_X;i++){
      linia = get_linia(i);     
      FileWrite(handler,linia);   
   }
   FileClose(handler);
//----
   return(0);
  }
//+------------------------------------------------------------------+

string get_linia(int pos){
   string wyj;
   if (data_czas_osobno){
      wyj = TimeToStr(Time[pos],TIME_DATE);
      wyj = wyj +delimiter;
      wyj = wyj +TimeToStr(Time[pos],TIME_MINUTES);
   }else{
      wyj = TimeToStr(Time[pos],TIME_DATE|TIME_MINUTES);   
   }

   if (op) wyj = wyj + delimiter+Open[pos]; 
   if (hi) wyj = wyj + delimiter+High[pos]; 
   if (lo) wyj = wyj + delimiter+Low[pos];
   if (cl) wyj = wyj + delimiter+Close[pos];
   if (vo) wyj = wyj + delimiter+Volume[pos];
   if (ws) wyj = wyj + delimiter+iCustom(NULL,0,"Stochastic",KPeriod4,DPeriod4,Slowing4,0,pos); //n-tu
   if (misc) wyj = wyj + delimiter+i_custom(pos); 
   return(wyj);   
}

bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
} 


double i_custom(int pos){
switch(ile_parametrow){
   case 0:
      return(iCustom(Symbol(),Period(),wsk_name,mode,pos));
      break;      
   case 1:
      return(iCustom(Symbol(),Period(),wsk_name,param1,mode,pos));
      break;
   case 2:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,mode,pos));   
      break;
   case 3:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,mode,pos));   
      break;
   case 4:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,mode,pos));   
      break;
   case 5:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,mode,pos));   
      break;      
   case 6:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,mode,pos));      
      break;
   case 7:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,param7,mode,pos));      
      break;
   case 8:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,param7,param8,mode,pos));      
      break;
   case 9:  
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,param5,
                                       param6,param7,param8,param9,mode,pos));      
      break; 
}
}

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Co prawda nie mogę teraz tego sprawdzić, mimo wszystko wierzę, że działa :D
I dziękuję za wyczerpującą odpowiedz, punkt dla ciebie :564:

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Witam

Używam te EA do zapisywania danych historycznych ze wskaźników. Zapisuje z pojedynczych świec.
Z której świecy ma być zapisane zapisuje tak:
zamiast „pos” daje nr świecy który mnie interesuje np. 121

Kod: Zaznacz cały

if (ws) wyj = wyj + delimiter+iCustom(NULL,0,"Stochastic",KPeriod4,DPeriod4,Slowing4,pos); 
przy TF D1 to żaden problem gorzej jak chce zapisać świece z M1 która była np. 2010.05.03r. 21:05

I tu jest moja prośba czy ktoś może mi pomóc i jak mam zapisać te dane ze wskaźnika akurat z tego czasu.

Może ten czas i date da się jakoś wpisać zamiast „pos”

Albo może da się jakoś sprawdzić na wykresie jaki ma nr świeczka z tego czasu.

Pozdrawiam :D

Przepraszam, że pisze post pod postem ale chciałem odświeżyć temat.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

Czytaj o

Kod: Zaznacz cały

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 
pod zmienna time, mozesz wpisywac w formacie

Kod: Zaznacz cały

Examples:

D'2004.01.01 00:00'     // New Year
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'        //equal to D'1980.07.19 12:00:00'
D'01.01.2004'           //equal to D'01.01.2004 00:00:00'
D'12:30:27'             //equal to D'[compilation date] 12:30:27'
D''                     //equal to D'[compilation date] 00:00:00'

Jeszcze jest plan B ;)

Troche modyfikujesz EA, tak zeby nie zapisywal X swieczek wstecz, tylko caly czas dopisywal do pliku kolejne, a nastepnie puszczasz to wszystko w testerze i masz w jednym pliku

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Zapisałem to tak:

Kod: Zaznacz cały

int swieca4 = iBarShift(0, PERIOD_H4, D'2010.05.05 11:19');
sprawdza mi w innym miejscu 2010.06.06

a jak daje tak

Kod: Zaznacz cały

int swieca4 = iBarShift(0, 0, D'2010.05.05 11:19');
to też jest źle bo wskaźniki mają różne TF a sprawdza wtedy tylko ten na którym jest wykres

A nie sory działa na dobrym TF i dobre miejsce no ale to nie zmienia faktu ze zmkna rynek i juz nie bede mogl zbierac danych

zaraz i tak to straci znaczenie bo rynek zamkną na dwa dni i już nic nie zrobię. Bym był wdzięczny za przerobienie EA na plan „B” :D bo ja nie mogę sobie z tym poradzić.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

podmieniasz linijke na

Kod: Zaznacz cały

FileOpen(name,FILE_CSV|FILE_WRITE|FILE_READ,delimiter); 
i last_X na 1

Nie sprawdzalem, ale powinno pomoc

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

LowcaG pisze:podmieniasz linijke na

Kod: Zaznacz cały

FileOpen(name,FILE_CSV|FILE_WRITE|FILE_READ,delimiter); 
i last_X na 1

Nie sprawdzalem, ale powinno pomoc
Wyszło mi coś takiego:

Jak sprawdzam plik z danymi po zapisie w excelu „odczyt pliku nie jest możliwy”

W dzienniku testera „FileOpen – too many opened file” i „błąd otwarcia pliku”

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

Rzeczywiście, zapomniałem, jeszcze o FileSeek, kod mniej wiecej powinien wygladac tak.
"Append" na true;

Kod: Zaznacz cały


//+------------------------------------------------------------------+
//|                                                    EA_export.mq4 |
//|                                                         Jacek W. |
//|                                                        Subversor |
//+------------------------------------------------------------------+
#property copyright "Ver 3.7 "
#property link      "Subversor jacekwn@gmail.com"

//---- input parameters
extern int       last_X=500;
extern string delimiter = ",";
extern bool   data_czas_osobno = true;
extern bool   op = true; //open
extern bool   hi = true; //high
extern bool   lo = true; //low
extern bool   cl = true; //close`
extern bool   vo = true; //volume
extern bool   ws = false; //Stochastic
extern bool   misc = true; //dowolny (no prawie
extern bool   append = false;
extern string    name = "dane.csv";
// Stochastic4 filtr
extern string StochasticInfo4Filtr = "Stochastic";
extern int KPeriod4=12;
extern int DPeriod4=9;
extern int Slowing4=26;
extern string iCustomInfo4Filter = "Parametry dowolnego wskaznika";//przyjmuje parametry tylko typu int  
                                                                   //moze komus bedzie sie chcialo dodac inne    
extern string wsk_name = "MACD"; //np.MACD co jest bez sensu akurat jesli chodzi o iCustom
extern int mode  = 0; //nr indeksu wykresu najczesciej zero
extern int ile_parametrow = 4;   //nie liczac oczywiscie symbol timeframe mode i shift
extern int param1 = 12; 
extern int param2 = 26;
extern int param3 = 9;
extern int param4 = 0;
extern int param5 = 0;
extern int param6 = 0;
extern int param7 = 0;
extern int param8 = 0;
extern int param9 = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

  {
 
//----
   if (StringLen(delimiter)!=1){
      Print("Delimiter musi miec 1 znak");
      return;     
   }   
   
   string linia;
   int handler;
   if(!NewBar()) return;
   
   if (append){
      handler =FileOpen(name,FILE_CSV|FILE_WRITE|FILE_READ,delimiter);
      FileSeek(handler,0, SEEK_END);
      last_X = 1;      
   }else{
      handler =FileOpen(name,FILE_CSV|FILE_WRITE,delimiter);
   }
   
   if (handler<1){
      Print("blad otwarcia pliku");
      return;
   }
   for (int i=0;i<last_X;i++){
      linia = get_linia(i);     
      FileWrite(handler,linia);   
   }
   FileClose(handler);
//----
   return(0);
  }
//+------------------------------------------------------------------+

string get_linia(int pos){
   string wyj;
   if (data_czas_osobno){
      wyj = TimeToStr(Time[pos],TIME_DATE);
      wyj = wyj +delimiter;
      wyj = wyj +TimeToStr(Time[pos],TIME_MINUTES);
   }else{
      wyj = TimeToStr(Time[pos],TIME_DATE|TIME_MINUTES);   
   }

   if (op) wyj = wyj + delimiter+Open[pos]; 
   if (hi) wyj = wyj + delimiter+High[pos]; 
   if (lo) wyj = wyj + delimiter+Low[pos];
   if (cl) wyj = wyj + delimiter+Close[pos];
   if (vo) wyj = wyj + delimiter+Volume[pos];
   if (ws) wyj = wyj + delimiter+iCustom(NULL,0,"Stochastic",KPeriod4,DPeriod4,Slowing4,0,pos); //n-tu
   if (misc) wyj = wyj + delimiter+i_custom(pos); 
   return(wyj);   
}

bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
} 


double i_custom(int pos){
switch(ile_parametrow){
   case 0:
      return(iCustom(Symbol(),Period(),wsk_name,mode,pos));
      break;      
   case 1:
      return(iCustom(Symbol(),Period(),wsk_name,param1,mode,pos));
      break;
   case 2:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,mode,pos));   
      break;
   case 3:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,mode,pos));   
      break;
   case 4:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,mode,pos));   
      break;
   case 5:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,mode,pos));   
      break;      
   case 6:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,mode,pos));      
      break;
   case 7:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,param7,mode,pos));      
      break;
   case 8:
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,
                                       param5,param6,param7,param8,mode,pos));      
      break;
   case 9:  
      return(iCustom(Symbol(),Period(),wsk_name,param1,param2,param3,param4,param5,
                                       param6,param7,param8,param9,mode,pos));      
      break; 
}
}


ODPOWIEDZ