Pobieranie świec minutowych

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

Pobieranie świec minutowych

Nieprzeczytany post autor: oiro »

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

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Pobieranie świec minutowych

Nieprzeczytany post autor: Mustafa »

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;

Kod: Zaznacz cały

Comment("data: "+TimeToString(240, TIME_DATE|TIME_SECONDS));
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.
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.

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

Re: Pobieranie świec minutowych

Nieprzeczytany post autor: oiro »

dziekuje za pomoc,
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);
otrzymuję wartośc 80 co się zgadza bo 80 minut:)
,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));
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):

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);
to otrzymuje:
bar:1388

Skąd ten błąd?

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Pobieranie świec minutowych

Nieprzeczytany post autor: Mustafa »

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()

Kod: Zaznacz cały

 iBarShift(NULL, PERIOD_M1, TimeCurrent()-60*60*24)
-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"

Kod: Zaznacz cały

Close[iBarShift(NULL, PERIOD_M1, TimeCurrent()-60*60*24)]
można to zrobić jeszcze przy pomocy Timeseries
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.

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

Re: Pobieranie świec minutowych

Nieprzeczytany post autor: oiro »

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.

grzegrzyw
Gaduła
Gaduła
Posty: 335
Rejestracja: 11 mar 2012, 19:43

Re: Pobieranie świec minutowych

Nieprzeczytany post autor: grzegrzyw »

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

ODPOWIEDZ