Serwis Forex-nawigator.biz korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce. [Zamknij tą informację]

Dzisiaj jest 16 gru 2018, 10:04     Inwestuj z zaufanym, globalnym brokerem XM!



Pobieranie świec minutowych

O jezykach programowania w platformach i nie tylko.
  • Autor
  • Wiadomość
Offline
Awatar użytkownika

oiro

Pasjonat

Pasjonat

  • Posty: 577
  • Rejestracja: 05 mar 2008, 00:40
  • Lokalizacja: wlkp

Pobieranie świec minutowych

Nieprzeczytany post11 paź 2018, 09:26

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
Offline
Awatar użytkownika

Mustafa

Pasjonat

Pasjonat

  • Posty: 869
  • Rejestracja: 20 lip 2010, 09:54
  • Lokalizacja: rewelacja
  • Pochwały: 4

Re: Pobieranie świec minutowych

Nieprzeczytany post11 paź 2018, 11:14

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.
but who cares
Offline
Awatar użytkownika

oiro

Pasjonat

Pasjonat

  • Posty: 577
  • Rejestracja: 05 mar 2008, 00:40
  • Lokalizacja: wlkp

Re: Pobieranie świec minutowych

Nieprzeczytany post12 paź 2018, 13:35

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?
Offline
Awatar użytkownika

Mustafa

Pasjonat

Pasjonat

  • Posty: 869
  • Rejestracja: 20 lip 2010, 09:54
  • Lokalizacja: rewelacja
  • Pochwały: 4

Re: Pobieranie świec minutowych

Nieprzeczytany post15 paź 2018, 09:09

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
but who cares
Offline
Awatar użytkownika

oiro

Pasjonat

Pasjonat

  • Posty: 577
  • Rejestracja: 05 mar 2008, 00:40
  • Lokalizacja: wlkp

Re: Pobieranie świec minutowych

Nieprzeczytany post15 paź 2018, 10:29

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.
Offline

grzegrzyw

Stały bywalec

Stały bywalec

  • Posty: 34
  • Rejestracja: 11 mar 2012, 19:43
  • Lokalizacja: Świebodzice

Re: Pobieranie świec minutowych

Nieprzeczytany post15 paź 2018, 11:22

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

Wróć do Programowanie

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości