mam następujący problem, chcę aby funkcja wywoływana przez ea przeanalizowała wszystkie świece od określonego czasu np. od godziny 13.05. Oczywiscie znalazłem funkcje iBarShift, tylko problem polega na tym że czasem chcę przenalizować świecę z 4 godzin (ok 240świec) i ich już na wykresie nie ma, a funkcja zwraca -1. Jak rozwiązać ten problem?
Z góry dziękuję za pomoc
Pobieranie świec minutowych
Re: Pobieranie świec minutowych
Narzędzia > opcje > zakładka wykresy i tam ustawiasz ilość słupków w historii i na wykresie
standardowo tam jest ustawione kilkadziesiąt tysięcy, więc to 240 to chyba źle robisz.
zobacz co otrzymasz jak to wrzucisz;
iBarShift wyszukuje słupek z określoną datą na wykresie i zwraca jego numer a ty robisz chyba odwrotnie i wrzucasz mu datę 1970.01.01. 00:04:00
Jeżeli chcesz cenę z danego słupka to robisz np. Close[240] lub w pętli dla zioru.
standardowo tam jest ustawione kilkadziesiąt tysięcy, więc to 240 to chyba źle robisz.
zobacz co otrzymasz jak to wrzucisz;
Kod: Zaznacz cały
Comment("data: "+TimeToString(240, TIME_DATE|TIME_SECONDS));
Jeżeli chcesz cenę z danego słupka to robisz np. Close[240] lub w pętli dla zioru.
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Re: Pobieranie świec minutowych
dziekuje za pomoc,
jest 15.20:
otrzymuję wartośc 80 co się zgadza bo 80 minut:)
,natomiast jeśli:
przesunę o 1440 (czyli 24h) to otrzymuję:
Teraz jest 2018.10.12 15:29
Przesuniety o 24h 2018.10.11 14:36
Skąd ten błąd?
Tak samo jak przesunę czas o 24h (jest 15.30 w chwili kompilacji):
to otrzymuje:
bar:1388
Skąd ten błąd?
jest 15.20:
Kod: Zaznacz cały
datetime time=D'2018.10.12 14:00';
ENUM_TIMEFRAMES tf=PERIOD_M1;
bool exact=false;
int bar_index=iBarShift(para,tf,time,exact);
Alert("bar:", bar_index);
,natomiast jeśli:
Kod: Zaznacz cały
Alert("Teraz jest ",TimeToString(TimeCurrent()));
datetime bar_time=iTime(para,tf,1440);
Alert("Przesuniety o 24h ",TimeToString(bar_time));
Teraz jest 2018.10.12 15:29
Przesuniety o 24h 2018.10.11 14:36
Skąd ten błąd?
Tak samo jak przesunę czas o 24h (jest 15.30 w chwili kompilacji):
Kod: Zaznacz cały
datetime time=D'2018.10.11 15:30';
ENUM_TIMEFRAMES tf=PERIOD_M1;
bool exact=false;
int bar_index=iBarShift(para,tf,time,exact);
Alert("bar:", bar_index);
bar:1388
Skąd ten błąd?
Re: Pobieranie świec minutowych
U niektórych brokerów na pewnych instrumentach około godz 0:00 (godz zależy od brokera) rynek jest zamrożony na kilka minut ponoć przeliczają swapy czy coś tam innego i faktyczne wtedy na wykresie jest mniej świeczek minutowych niż 1440. Sprawdź w specyfikacji instrumentu lub na wykresie M1 jak przeciągniesz krzyżykiem to pokazuje ile jest w zaznaczonym okresie świeczek.
Dodatkowo w piątek masz krótszą sesję a u niektórych brokerów bezsensowne 'niedzielne świeczki', ponadto niektóre rynki nie są otwarte całą dobę, dlatego ja jeśli potrzebowałem coś takiego zrobić wrzucałem najpierw funkcję, która zliczała ilość świeczek minutowych na dobę a potem przesuwałem o ilość dni.
Możesz też zrobić to tak, że odejmujesz interesujący cię czas od TimeCurrent() i wrzucasz go do iBarShift()
-dobowa liczba sekund (60s * 60m * 24h) daje D1 w iBarShift, a np. H4 to 60s*240m itd.
TimeCurrent() zwraca ostatni znany czas serwera w postaci liczby sekund dodając lub odejmując te wartości "podróżujesz w czasie"
można to zrobić jeszcze przy pomocy Timeseries
https://www.mql5.com/en/docs/series
https://www.mql5.com/en/docs/series/copybuffer
Dodatkowo w piątek masz krótszą sesję a u niektórych brokerów bezsensowne 'niedzielne świeczki', ponadto niektóre rynki nie są otwarte całą dobę, dlatego ja jeśli potrzebowałem coś takiego zrobić wrzucałem najpierw funkcję, która zliczała ilość świeczek minutowych na dobę a potem przesuwałem o ilość dni.
Możesz też zrobić to tak, że odejmujesz interesujący cię czas od TimeCurrent() i wrzucasz go do iBarShift()
Kod: Zaznacz cały
iBarShift(NULL, PERIOD_M1, TimeCurrent()-60*60*24)
TimeCurrent() zwraca ostatni znany czas serwera w postaci liczby sekund dodając lub odejmując te wartości "podróżujesz w czasie"
Kod: Zaznacz cały
Close[iBarShift(NULL, PERIOD_M1, TimeCurrent()-60*60*24)]
https://www.mql5.com/en/docs/series
https://www.mql5.com/en/docs/series/copybuffer
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Re: Pobieranie świec minutowych
Dzięki, ale u mnie:
- nie był piątek tylko cofałem z piątku do czwartku,
-a jesli chodzi o podliczanie swapu itd. rozumiałbym gdyby różnica była na pozimie 5 minut ale nie 52min,
Jeśli cofam o kolejny dzień i jeszcze kolejny to dni mają po 1440 minut. Interesuję mnie to bo nie chce "zgubić" żadnych danych, a będę pobierać dane zwykle z ostatnich kilku-kilkunastu godzin.
- nie był piątek tylko cofałem z piątku do czwartku,
-a jesli chodzi o podliczanie swapu itd. rozumiałbym gdyby różnica była na pozimie 5 minut ale nie 52min,
Jeśli cofam o kolejny dzień i jeszcze kolejny to dni mają po 1440 minut. Interesuję mnie to bo nie chce "zgubić" żadnych danych, a będę pobierać dane zwykle z ostatnich kilku-kilkunastu godzin.
Re: Pobieranie świec minutowych
Jeśli jest mało płynny instrument i w którejś minucie nie było ticku, to tej świecy na wykresie nie będzie i dzienny wykres będzie miał mniej nią 1440 świec