Analiza świec minutowych od danego czasu

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
oiro
Pasjonat
Pasjonat
Posty: 423
Rejestracja: 05 mar 2008, 00:40

Analiza świec minutowych od danego czasu

Nieprzeczytany post autor: oiro »

Piszę funkcję na wypadek awarii VPS'a, zapisuję czas w pliku txt - najlepiej w jakim formacie?. Po awarii VPS'a chciałbym przeanalizować wszystkie świece minutowe od tego czasu (odczytanego z pliku txt.) do chwili obecnej. Nie mam koncepcji jak do tego podejść - jakieś podpowiedzi?
Z góry bardzo dziękuję!

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Analiza świec minutowych od danego czasu

Nieprzeczytany post autor: -rookie- »

Ok, Po kolei...
1. Podobne problemy dotyczące zapisu danych do pliku oraz robienie tego w jakimś interwale czasowych były poruszane tutaj (tylko-jedna-operacja-podczas-trwania-sw ... ml#p924814) i tutaj (baza-danych-t29992.html#p923920)
2. Najprostsze jest użycie gotowych funkcji z mql (https://docs.mql4.com/files) i jest tam coś takiego jak FileFlush() oraz FileClose(). Funkcja FileFlush() robi aktualizuje na bieżąco pliku bez zamykania pliku, czyli to jest potrzebne do wpisywania kolejnych danych do pliku na bieżąco, natomiast FileClose zamyka ten plik.
3. Niestety nie wiem jak zmienić chmod z poziomu MT4 żeby można było podejrzeć pliki kiedy nie są zamknięte. Dopiero po zamknięciu pliku można go otworzyć, a dzieje się to po wyłączeniu platformy albo EA, gdy uruchamiana jest funkcja OnDeinit() w skrypcie EA. Tam dodałem FileClose(). Można jeszcze zrobić na koniec dnia zamknięcie, ale nie mam ochoty teraz z tym się bawić. Nie wiem czy można grzebać z chmod i uprawnieniami do pliku albo do folderu kiedy EA nie zamknęło pliku.
4. Można zrobić zamykanie pliku co jakiś czas. Na przykład na koniec każdego dnia. Tylko nie zrobiłem tego tutaj w przykładowym kodzie.
5. Kolejny błąd tego kodu jaki wyszedł to mimo ustalenia nazwy pliku w ten sposób - "_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt" - i sprawdzanie czy plik istnieje FileIsExists, a jeśli jest kolejny miesiąc albo kolejny dzień miesiąca wtedy stworzenie nowego pliku... I tutaj wyszedł kolejny problem w testerze MT4 nie zapisuje plików z kilku miesięcy tylko ucina zapisywanie po 1,5 miesiąca. Nie wiem dlaczego. Może trzeba dodać do tego tworzenie folderu i zapisywanie każdego miesiąca w osobnym folderze... ale nie chce mi się tego testować, sorry :wink:
6. Jeśli chodzi o zapis w jakimś interwale czasowym to zobacz jak działają funkcje h oraz D, h liczy w interwale minutowym, czyli jak sprawdzić warunek if (h(5)) wtedy co 5 minut, natomiast D w interwale godzinowym, czyli if(D(24)) będzie wywoływać się co 24 godziny, możesz dać np tutaj if(D(4)) wtedy co 4 godziny, tak samo w minutowych możesz dać inny czas niż 5 minut.
7. Kolejna sprawa... jak zachowa się zamknięcie pliku w przypadku zawieszenia się komputera? Funkcja FileFlush powinna to zabezpieczyć, teoretycznie. Ale nie testowałem tego, czyli trzeba włączyć tester i po prostu zresetować komputer albo wyłączyć zasilanie i zobaczyć czy pliki będą zapisane.

Ok, włącz tester, zrób nowy plik EA, wklej ten kod, włącz zakres kilku miesięcy i przetestuj to co opisałem. Pliki zapisują się w C:\Users\(user)\AppData\Roaming\MetaQuotes\Terminal\A24505xxxx9D4D1xxxxxxxx95FDxxx4C\tester\files - gdzieś tutaj powinny się zapisywać.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                       10102018_CreateLogTest.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

string file;
string file2;
int f;
int f2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      //file="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".txt";
      f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
      
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";
      //file2="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".csv";
      f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      FileClose(f);
      FileClose(f2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

      //file="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".txt";
      //file2="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".csv";
      
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";

      if (D(24)) {
         //Print( Day() );
         if (!FileIsExist(file)) {
            f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
         } 
         if (!FileIsExist(file2)) {
            f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
         }
      }

      if (h(5)) {
      _export();
      //h(5);
      }
      
  }
//+------------------------------------------------------------------+

void _export() {

   //string file="_23test_export_"+Symbol()+"_"+Period()+".txt";
   //int f=FileOpen(file,FILE_CSV|FILE_WRITE,",");
   //f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
   
   // csv
   //string file2="_3test_export_"+Symbol()+"_"+Period()+".csv";
   //int f=FileOpen(file,FILE_CSV|FILE_WRITE,",");
   //f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");

   if(f<1) {
    //Alert("Błąd otwierania pliku");
    return;
   }
   
   //if (h(5)) {
      FileWrite(
         f,
         TimeToStr(iTime(ChartSymbol(),PERIOD_M5,1),TIME_DATE|TIME_MINUTES),
         "[ OHLC ]", 
         iOpen(ChartSymbol(),PERIOD_M5,1),
         iHigh(ChartSymbol(),PERIOD_M5,1),
         iLow(ChartSymbol(),PERIOD_M5,1),
         iClose(ChartSymbol(),PERIOD_M5,1)
      );
   //}
   
   FileWrite(
         f2,
         TimeToStr(iTime(ChartSymbol(),PERIOD_M5,1),TIME_DATE|TIME_MINUTES),
         "[ OHLC ]", 
         iOpen(ChartSymbol(),PERIOD_M5,1),
         iHigh(ChartSymbol(),PERIOD_M5,1),
         iLow(ChartSymbol(),PERIOD_M5,1),
         iClose(ChartSymbol(),PERIOD_M5,1)
      );

   //for(int i=0;i<Bars;i++) {
   //   FileWrite(f,TimeToStr(Time[i],TIME_DATE|TIME_MINUTES),Open[i],High[i],Low[i],Close[i]);
   //   FileWrite(f2,TimeToStr(Time[i],TIME_DATE|TIME_MINUTES),Open[i],High[i],Low[i],Close[i]);
   //}

   //Alert("Eksport "+Symbol()+" zakończony. Wyeksportowano "+Bars+" rekordów");

   FileFlush(f);
   FileFlush(f2);
   //FileClose(f);

}


bool h(int period) {
   int n = 0;
   bool d = false;
   if ((Minute() % period) == 0) {
      //Print( Minute() + " <<< " );
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}

bool D(int period) {
   int n = 0;
   bool d = false;
   if ((Hour() % period) == 0) {
      //Print( Minute() + " <<< " );
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}
-- Dodano: 10 paź 2018, 02:49 --

Nie wiem dokładnie czy o to chodziło, ale... tak zrozumiałem problem, więc...

-- Dodano: 10 paź 2018, 03:08 --

Aha, żeby zapisywać świece M1 to trzeba zmienić w tym pierwszym kodzie PERIOD_M5 na PERIOD_M1 w tych liniach iOpen(ChartSymbol(),PERIOD_M5,1) itd. Oraz w onTick gdzie jest if (h(5)) {_export(); } na if (h(1)) {_export(); } ale już to zrobiłem i ten kod niżej liczy 1 minutowe świeczki. Sugeruje żebyś włączył to EA na demo na realnych danych, na realnym rynku i zobaczył w Print() co będzie wyświetlała funkcja h(1) oraz D(1) albo inne interwały czasowe, żebyś to przetestował na realnym rynku czy dobrze kroi czas, czy zwraca faktycznie co 1 minutę, albo co 5 minut.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                       10102018_CreateLogTest.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

string file;
string file2;
int f;
int f2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      //file="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".txt";
      f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
     
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";
      //file2="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".csv";
      f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
     
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      FileClose(f);
      FileClose(f2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

      //file="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".txt";
      //file2="_log_"+Day()+"-"+Month()+"_"+Symbol()+"_"+Period()+".csv";
     
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";

      if (D(24)) {
         //Print( Day() );
         if (!FileIsExist(file)) {
            f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
         }
         if (!FileIsExist(file2)) {
            f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
         }
      }

      if (h(1)) {
      _export();
      //h(5);
      }
     
  }
//+------------------------------------------------------------------+

void _export() {

   //string file="_23test_export_"+Symbol()+"_"+Period()+".txt";
   //int f=FileOpen(file,FILE_CSV|FILE_WRITE,",");
   //f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
   
   // csv
   //string file2="_3test_export_"+Symbol()+"_"+Period()+".csv";
   //int f=FileOpen(file,FILE_CSV|FILE_WRITE,",");
   //f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");

   if(f<1) {
    //Alert("Błąd otwierania pliku");
    return;
   }
   
   //if (h(5)) {
      FileWrite(
         f,
         TimeToStr(iTime(ChartSymbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
         "[ OHLC ]",
         iOpen(ChartSymbol(),PERIOD_M1,1),
         iHigh(ChartSymbol(),PERIOD_M1,1),
         iLow(ChartSymbol(),PERIOD_M1,1),
         iClose(ChartSymbol(),PERIOD_M1,1)
      );
   //}
   
   FileWrite(
         f2,
         TimeToStr(iTime(ChartSymbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
         "[ OHLC ]",
         iOpen(ChartSymbol(),PERIOD_M1,1),
         iHigh(ChartSymbol(),PERIOD_M1,1),
         iLow(ChartSymbol(),PERIOD_M1,1),
         iClose(ChartSymbol(),PERIOD_M1,1)
      );

   //for(int i=0;i<Bars;i++) {
   //   FileWrite(f,TimeToStr(Time[i],TIME_DATE|TIME_MINUTES),Open[i],High[i],Low[i],Close[i]);
   //   FileWrite(f2,TimeToStr(Time[i],TIME_DATE|TIME_MINUTES),Open[i],High[i],Low[i],Close[i]);
   //}

   //Alert("Eksport "+Symbol()+" zakończony. Wyeksportowano "+Bars+" rekordów");

   FileFlush(f);
   FileFlush(f2);
   //FileClose(f);

}


bool h(int period) {
   int n = 0;
   bool d = false;
   if ((Minute() % period) == 0) {
      //Print( Minute() + " <<< " );
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}

bool D(int period) {
   int n = 0;
   bool d = false;
   if ((Hour() % period) == 0) {
      //Print( Minute() + " <<< " );
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}
Ok, o tyle z mojej strony.

-- Dodano: 10 paź 2018, 04:11 --

Ok, jednak ma to 2 błędy, sprawdziłem teraz na demo zamiast na testerze na realnych danych

1. Po pierwsze, użycie ChartSymbol() zamist Symbol() w tych linijkach iOpen(ChartSymbol(),PERIOD_M1,1) było złym pomysłem.
2. Poprawiłem funkcje h ponieważ liczyły każdy tick w tej minucie, teraz jest lepiej, ale FileFlush() zapisuje dalej każdy tick w pliku.
3. Pliki z EA włączonego na realnych danych zapisują się gdzieś tutaj C:\Users\(user)\AppData\Roaming\MetaQuotes\Terminal\A24505Cxxxxxxxxxxx195FD144C\MQL4\Files
4. Dałem jako przykład interwał 1 minutowy. Musisz już sam z resztą sobie poradzić. I tak masz już co nieco działającego kodu. Trzeba dodać jakiś counter albo coś takiego żeby nie zapisywało każdego ticku tylko 1 wiersz na 1 minute na przykład. Ale teraz już tego nie ogarniam więc... to tyle.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                       10102018_CreateLogTest.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

string file;
string file2;
int f;
int f2;

bool test = false;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
     
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";
      f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
     
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      FileClose(f);
      FileClose(f2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";

      if (D(24)) {
         if (!FileIsExist(file)) {
            f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
         }
         if (!FileIsExist(file2)) {
            f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
         }
      }

      if (h(1)) {
         _export(h(1));
      }
     
  }
//+------------------------------------------------------------------+

int _x = 0;

void _export(int x) {

   if(f<1) {
    //Alert("Błąd otwierania pliku");
    //return;
   }
   
   FileWrite(
      f,
      TimeToStr(iTime(Symbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
      "[ OHLC ]",
      iOpen(Symbol(),PERIOD_M1,1),
      iHigh(Symbol(),PERIOD_M1,1),
      iLow(Symbol(),PERIOD_M1,1),
      iClose(Symbol(),PERIOD_M1,1)
   );
   
   FileWrite(
      f2,
      TimeToStr(iTime(Symbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
      "[ OHLC ]",
      iOpen(Symbol(),PERIOD_M1,1),
      iHigh(Symbol(),PERIOD_M1,1),
      iLow(Symbol(),PERIOD_M1,1),
      iClose(Symbol(),PERIOD_M1,1)
   );

   //Alert("Eksport "+Symbol()+" zakończony. Wyeksportowano "+Bars+" rekordów");
   
   if (_x != Minute()) {
      FileFlush(f);
      FileFlush(f2);
   }


}

int _test = 0;
bool h(int period) {
   int n = 0;
   bool d = false;
   if ((Minute() % period) == 0) {
      if (Seconds() >= 0 && Seconds() <= 59) {
         int n = Minute();
         if (_test != n) {
            Print( Minute() + " <<< " );
            _test = n;
         }
      }
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}

int _test2 = 0;
bool D(int period) {
   int n = 0;
   bool d = false;
   if ((Hour() % period) == 0) {
      if (Minute() >= 0 && Minute() <= 59) {
         //if (Seconds() >= 0 && Seconds() <= 59) { 
            int n = Hour();
            if (_test2 != n) {
               Print( Hour() + " " + Minute() + " <<< " );
               _test2 = n;
            }
         //}
      }
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}
-- Dodano: 10 paź 2018, 04:58 --

Ok, to chyba dobrze zapisuje. 1 rekord na 1 minutę. Teraz trzeba sprawdzić czy FileFlush() przy resecie zadziała jak trzeba. Ktoś to może poprawi, bo ja już ze zmęczenia nie zauważyłem że FileWrite było w onTick() a się cały czas zastanawiam czemu mi zapisuje każdy tick :roll: Jak włączysz na demo na realnych danych to daj zakładkę Experts na dole, tam wyświetla się wszystko z Print().

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                       10102018_CreateLogTest.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

string file;
string file2;
int f;
int f2;

bool test = false;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
     
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";
      f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
     
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      FileClose(f);
      FileClose(f2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
      file="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".txt";
      file2="_log_"+Month()+"_"+Day()+"_"+Symbol()+"_"+Period()+".csv";

      if (D(24)) {
         if (!FileIsExist(file)) {
            f=FileOpen(file,FILE_TXT|FILE_WRITE,",");
         }
         if (!FileIsExist(file2)) {
            f2=FileOpen(file2,FILE_CSV|FILE_WRITE,",");
         }
      }

      if (h(1)) {
         _export(1);
      }
     
  }
//+------------------------------------------------------------------+

int _x = 0;
int c = 0;

void _export(int x) {

   if(f<1) {
    //Alert("Błąd otwierania pliku");
    //return;
   }   

   //Alert("Eksport "+Symbol()+" zakończony. Wyeksportowano "+Bars+" rekordów");
   
   if (_x != Minute()) {
      //FileFlush(f);
      //FileFlush(f2);
      update();
   }

   _x = x;

}

int _test3 = 0;
int _test = 0;
int n = 0;
bool h(int period) {
   int n = 0;
   bool d = false;
   if ((Minute() % period) == 0) {
      if (Seconds() >= 0 && Seconds() <= 59) {  
         n = Minute(); 
         if (_test != n) {
            Print( Minute() + " <<< " );
            c = 0;
            _test = n;
         }
         //n = Minute();
      }
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}

int _test2 = 0;
bool D(int period) {
   int n = 0;
   bool d = false;
   if ((Hour() % period) == 0) {
      if (Minute() >= 0 && Minute() <= 59) {
         //if (Seconds() >= 0 && Seconds() <= 59) { 
            int n = Hour();
            if (_test2 != n) {
               Print( Hour() + " " + Minute() + " <<< " );
               _test2 = n;
            }
         //}
      }
      d = true;
   } else {
      //Print( Minute() );
      d = false;
   }
   return d;
}

void update() {
   if (c>0) return;
   FileWrite(
      f,
      TimeToStr(iTime(Symbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
      "[ OHLC ]",
      iOpen(Symbol(),PERIOD_M1,1),
      iHigh(Symbol(),PERIOD_M1,1),
      iLow(Symbol(),PERIOD_M1,1),
      iClose(Symbol(),PERIOD_M1,1)
   );
   
   FileWrite(
      f2,
      TimeToStr(iTime(Symbol(),PERIOD_M1,1),TIME_DATE|TIME_MINUTES),
      "[ OHLC ]",
      iOpen(Symbol(),PERIOD_M1,1),
      iHigh(Symbol(),PERIOD_M1,1),
      iLow(Symbol(),PERIOD_M1,1),
      iClose(Symbol(),PERIOD_M1,1)
   );
   FileFlush(f);
   FileFlush(f2);
   c++;
}
-- Dodano: 10 paź 2018, 06:47 --

Tak w ogóle to trzeba by rozpracować funkcje działającą jak if (period.equlas(Period.FIVE_MINS)) na jforex na tym MT4, bo nie pierwsza osoba o to pyta...

Awatar użytkownika
oiro
Pasjonat
Pasjonat
Posty: 423
Rejestracja: 05 mar 2008, 00:40

Re: Analiza świec minutowych od danego czasu

Nieprzeczytany post autor: oiro »

Bardzo dziękuję, ale mój problem jest troszkę inny, zapisuję do pliku inne dane itd. i wszystko działa. Co jakiś czas chce zapisać aktualny czas -X, stad pierwsze pytanie w jakim formacie?
Gdyby VPS uległ awarii po restarcie funkcja ma odczytać z pliku X (z odczytam nie ma problemu) i pobrać wszystkie świece minutowe - najmniejszy interwał - od czasu X do aktualnego kursu i je przeanalizować- stąd drugie pytanie jak to zrobić?
(tutaj chodzi o pobranie danych najwyżej z kilku godzin).

ODPOWIEDZ