Witam Szanowne Gremium Programistów,
mierze sie z takim problem programistyczno-analitycznym, mianowicie:
1. Tworze linie trendu na interwale D1
2. Przeciągam ją między dwoma punktami, jakieś odległe od siebie swiece, w punkcie A i B
3. Używając funkcji ObjectGetValueByShift() odycztuje wartosc linii dla np 4 swiecy wstecz - wszystko jest ok na D1
Jednakże, kiedy przełączam np na interwał H4 wtedy funkcja ObjectGetValueByShift() pobiera mi dane z tej samej linni, ale nie cztery swiece D1, a cztery swiece H4. Funkcja ma to ograniczenie, ze nie można wpisać do niej interwału (chyba, że jest coś czego nie odkryłem).
Pytanie jest względnie proste: jak odczytać na H4 punkt sprzed 4 dni, aby dostać taki sam wynik jak przy odczycie na D1?
Ważne: chodzi o uniwersalne rozwiązane bo rynki są różne, i grają o różnych godzinach. Dzien GPW to 2xH4, a dzien forex to 6xH4, są rynki grające jeszcze krócej. Przy wyliczaniu też nie można iść na skróty obiliczając np pkt B - pkt A/1440/60 bo wyjdzie nam ilość dni bezwzględna - swiec jest mniej bo mamy weekendy, i świeta (w zależności od kraju). I tak jak zacząłem to rozważać to sprawa wydaje sie być bardziej zaawansowana. Mam pomysł na napisanie funkcji (i jak widać z powyższego, funkcja będzie mieliła kilka ładnych pętli). Jednak może jest jakiś gotowiec lub inne prostsze rozwiązanie tego zagadnienia?
Proszę o pomysły / kody / funkcje lub opinie mogące pomóc
Pozdrawiam serdecznie
Cobong
Przeliczanie linii trendu na inne interwały
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
Kod: Zaznacz cały
iBarShift(Symbol(),Period(),iTime(Symbol(),PERIOD_D1,4));
Andrzej PIerz
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE
prawdziwe samurajskie cięciePierz Andrzej pisze:pozdrawiamKod: Zaznacz cały
iBarShift(Symbol(),Period(),iTime(Symbol(),PERIOD_D1,4));
Andrzej PIerz

Dziękuje
Dodano po 21 godzinach 20 minutach:
Mam jeszcze jedno pytanie, a dokładnie mówiać zagwozdkę spędzającą mi sen z powiek. Napisałem funkcje która tworzy tablice, funkcja działa dla różnych parametrów, wiec wywołuje ją w EA kilka razy. Przy tworzeniu tablicy w funkcji dochodzi do "krzyżowania się" tej tablicy z tablicami wygenerowanymi przez pozostałe wywołania funkcji, ale z innymi parametrami. Zazwyczaj myślałem, że takie coś nie może zachodzić w funkcjach, ale jednak jest inaczej. Czy jest też na to jakiś sposób? Myśle, o tym aby zrobić dla każdego parametru tablice o innych nazwach, ale tą funkcje mialem zamiar wywołać w EA nawet 10x więc wyjdzie dużo zbędnego kodu.
Pozdrawiam
Cobong
Ludzkie słabości i ludzka siła do ich pokonywania...
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
rozumie ze tablica jest globalna ?? jezeli nie to faktycznie troche dziwne...
zamiast tworzenia np 10 nazw mozesz zrobic np tak:
pozdrawiam
Andrzej Perz
zamiast tworzenia np 10 nazw mozesz zrobic np tak:
Kod: Zaznacz cały
datetime tablica[10][100];
void start()
{
array(0);
array(1);
array(2);
array(3);
array(4);
array(5);
array(6);
array(7);
array(8);
array(9);
}
void array(int number)
{
tablica[number][0] = Time[0];
}
Andrzej Perz
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE
No właśnie tablica jest lokalna zadeklarowana w funkcji. Aplikacja "mieli" setki razy tablice przy różnych sortowaniach. Wykluczylem w sortowaniach nieprawidłowe wpisy wprowadzając identyfikatory dla funkcji kazdego wywoałania funkcji. Wynikowo działa OK, ale jak badam tablice printem to widzę, że na 10 wykonań EA, w 3+-1 tablica zawiera rekody nie należące do niej tylko tej samej funkcji wykonywanej z innymi parametrami, i tu w tym upewnia mnie ten identyfikator. Na moje oko dzieje się coś takiego, że program przechodzi do wykonania kolejnej funkcji w trakcie gdy zadany proces jeszcze sie nie skonczył (i tu jest zagwozdka). Za dużo procesów na raz? I nie nadąża usuwać tablicy z poprzednego wywowałania funkcji zanim doda rekord w kolejnym wywołaniu funkcji? Jak programuje już kawałek czasu to takiego zjawiska nie widziałem 
Pozdrawiam
Cobong

Pozdrawiam
Cobong
W MT4 jest taki mechanizm, że jak miało by dojść do "przepełanienia bufora" - czyli za wolno się kod wykonuje i MT4 nie może odłożyć więcej poleceń (wykonuje się jeden start() i dostaje kolejny start() [nie wiem czy jeden czy więcej - nie znam limitu takiej kolejki - może nawet wynosi 0]) to obecny zostaje chyba sterminowany i wykonuje sie nowsza funkcja start z kolejki. Gdzieś kiedyś takie coś czytałem.Cobong pisze:Na moje oko dzieje się coś takiego, że program przechodzi do wykonania kolejnej funkcji w trakcie gdy zadany proces jeszcze sie nie skonczył (i tu jest zagwozdka).
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
moim zdaniem poprostu funkcja Print() nie nadaza
i to jest "normalne"
....
jezeli chcesz byc pewny ze kasuje zawartosci tablicy , to sprawdz przed wpisem czy czy jest pusta np:
pozdrawiam
Andrzej Pierz


jezeli chcesz byc pewny ze kasuje zawartosci tablicy , to sprawdz przed wpisem czy czy jest pusta np:
Kod: Zaznacz cały
if (tablica[i] == 0) tablica[i] = wpis;else Alert("cos jest nie tak :)");
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE