funkcja licząca poziom przecięcia się linii

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

funkcja licząca poziom przecięcia się linii

Nieprzeczytany post autor: personov »

Poratuje ktoś ?
Potrzebuję funkcję, która będzie przeliczała na jakim poziomie przecięły sie dwie linie wskaźnika. Może być dla przykładu Stochastic.
mam cztery punkty : stoch niebieski[0], stoch czerwony[0], stoch niebieski[1], stoch czerwony[1],
Te wartości mam.
Świecę wcześniej niebieski jest wyżej od czerwonego, a na świecy[0] niebieski jest niżej od czerwonego.
Na jakim poziomie nastąpilo przecięcie ?
Próbowałem tak :

Kod: Zaznacz cały

if(sna<sca&&sn>sc){//nawrót dolny
   pol1 =sca-((sca-sna)/2);
   pol2 =sn-((sn-sc)/2);}
   if(sna>sca&&sn<sc){//nawrót górny
   pol1 =sna-((sna-sca)/2);
   pol2 =sc-((sc-sn)/2);}
   Przeciecie=(pol1+pol2)/2; 
Jednak przeliczenie nie jest dobre w każdym przecięciu.
Solą życia jest kasa.

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

wylicz rownanie prostej dla 1 i drugiego odcinka. z ukladu rownian :

y1 = ax1 + b
y2 = ax2 + b

z tego co Ci wyjdzie robisz kolejny uklad rownan, Tym razem znasz a i b, a Twoj uklad jest na x i y.

Ale to w MT4 raczej nei ma sensu bo brakuje Ci ukladu wspolrzednych. Musialbys jakis przyjac, a ten nie da Ci wyniku % jaki pewnie chesz otrzymac przy stochastycznym np.

Jezeli potrzebujesz to do EA, a nie wskaznika, to jedyne co mi rpzychodzi do glowy, to przy kazdym przeciecu, zapamietuj wartosc w zmiennej pomocniczej. Jezeli potwierdzisz przeceicie, korzystaj z wartosci ze zmiennej pomocniczej.

Pozdrawiam

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Jakby się miało komuś przydać to wykombinowałem coś takiego :

Kod: Zaznacz cały

double Przeciecie=6000;
double pol1=6000;
double pol2=6000;
double funkcja=0;
void start()
{
double sn = iStochastic(Symbol(),Period(),5,3,3,MODE_SMA,0,0,0);
double sc = iStochastic(Symbol(),Period(),5,3,3,MODE_SMA,0,1,0);
double sna = iStochastic(Symbol(),Period(),5,3,3,MODE_SMA,0,0,1);
double sca = iStochastic(Symbol(),Period(),5,3,3,MODE_SMA,0,1,1);

 if(sna<sca&&sn>sc){//nawrót dolny
   funkcja=100/((MathAbs(sca-sc))+MathAbs((sna-sn)));
   pol1=(MathAbs(sca-sc))*funkcja;
   pol2=MathAbs((sna-sn))*funkcja;
   Przeciecie=sca-((MathAbs(sca-sna)*pol1)/100);}
   
   if(sna>sca&&sn<sc){//nawrót górny
   funkcja=100/((MathAbs(sca-sc))+MathAbs((sna-sn)));
   pol1=(MathAbs(sna-sn))*funkcja;
   pol2=MathAbs((sca-sc))*funkcja;
   Przeciecie=sna-((MathAbs(sca-sna)*pol1)/100);}
}
Solą życia jest kasa.

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

personov: patrezac na Twoj kod, wydaje mi sie ze zakladales, ze punkty sa symetryczne tzn. -1,-1; -1,1; 1,1; 1,-1;
przy innych proporcjach bedzie zle.
// to jest optymistyczny wyapdek. Wydaje mi se bardizej, ze to w ogole nie dziala. porstu liczysz jaksi tam stosunek stad te procenty. pewnie jakbys zamiast pol1 uzyl pol2 doszedlbys do wnisku ze wyniki sa zle.


Oczywisce moge sie mylic.

P.S. Przy zalozeniu ze korrzystasz ze siewczki 0 i 1 to nei rozumiem po co cale to kombinowanie. Zwyczajnie dodajesz jedno "=" w warunku i mas zdorazu wynik.

P.S.2 po co liczysz "pol2" skoro nigdy z niej nie korzystasz?

Pozdrawiam

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

crn pisze:P.S.2 po co liczysz "pol2" skoro nigdy z niej nie korzystasz?
Masz rację.
Ten kod w pierwszym poście zakładał symetryczne przecięcie i dlatego wykładał się na każdym innym. Teraz brałem pod uwagę niesymetryczność przecięcia. Sprawdzając w praktyce - działa.

Dodano po 11 minutach:

A swoje wnioski wyciągałem na takich przykladach jak w załączniku.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Solą życia jest kasa.

ODPOWIEDZ