Przeliczanie linii trendu na inne interwały

O jezykach programowania w platformach i nie tylko.
Cobong
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 05 wrz 2009, 16:57

Przeliczanie linii trendu na inne interwały

Nieprzeczytany post autor: Cobong »

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

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

Kod: Zaznacz cały

iBarShift(Symbol(),Period(),iTime(Symbol(),PERIOD_D1,4));
pozdrawiam
Andrzej PIerz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Cobong
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 05 wrz 2009, 16:57

Nieprzeczytany post autor: Cobong »

Pierz Andrzej pisze:

Kod: Zaznacz cały

iBarShift(Symbol(),Period(),iTime(Symbol(),PERIOD_D1,4));
pozdrawiam
Andrzej PIerz
prawdziwe samurajskie cięcie :)

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

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

rozumie ze tablica jest globalna ?? jezeli nie to faktycznie troche dziwne...

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];
}
pozdrawiam
Andrzej Perz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Cobong
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 05 wrz 2009, 16:57

Nieprzeczytany post autor: Cobong »

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

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

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).
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.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

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:

Kod: Zaznacz cały

if (tablica[i] == 0) tablica[i] = wpis;else Alert("cos jest nie tak :)");
pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ