Problem - if porównujacy ceny nie dziala

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Problem - if porównujacy ceny nie dziala

Nieprzeczytany post autor: enjoy_xx »

Kod: Zaznacz cały


extern double wejscieL = 0.0;
extern double setka = 0.0;
extern double szukana = 1.4400; //to będzie szukana cena



int start()
{

   if (Bid == szukana) //po znalezieniu szukanej ceny przypisz ją globalnie do do zmiennej "setka" a szukaną zmień na 0.0001 (taką aby więcej sie nie powtórzyła)
      {
      szukana = 0.0001;
      setka = Bid; 
      }   

   wejscieL = (setka + 0.0050); //ustal wejście L na wyszukana setke powiększoną o 50 pips 

   if (Bid == wejscieL) //jesli cena osiągnie poziom wejscia tj. (1.4450) wypisz ja na ekran (I WŁAŚNIE TA INSTRUKCJA NIE DZIAŁA!!!!)
      {
      Print("Znaleziono W= ", Bid);
      }

return(0);
}
Jak w komentarzu ostatni if nie działa.
Obrazek

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

Nieprzeczytany post autor: personov »

enjoy_xx pisze: setka = Bid;
}

wejscieL = (setka + 0.0050);

if (Bid == wejscieL) //
To sobie zaprzecza. setka nie może się równać Bid i jednocześnie Bid+0.0050.
Solą życia jest kasa.

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

Najpierw setce przypisuję wartoś ceny bid:
if (...)
{
setka = Bid;
}

pożniej powyższa instrukcja if juz nie będzie sie wykonywac bo warunek juz nigdy nie zostanie spełniony. Ta steka miała zosta okreslona raz na cały program.

A następnie okreslam poziom ewjścia jako setka + 50 pips:
wejscieL = (setka + 0.0050);

Pozniej wyszukuje tego poziomu wejscia w kolejnych tikach sparwdzając czy aktualna cena Bid odpowiada poziomowi wejscia:
if (Bid == wejscieL)


No i przyjmijmy ze ustalona na poczatku rowna setka wynosila 1.4500 to po dodaniu do niej 0.0050 pisow powinno byc 1.4550. Porównując to z pozimem wejscia który wynosi tez 1.4550 klamra wewnątrz if powina sie wykonac:
{
Print("Znaleziono W= ", Bid);
}

Ale sie nie wykonuje ;(

Mysłałem, że może źle porównuje typy danych tzn. cenę z zmienną double ale pierwszy if działa:
if (Bid == szukana)
Obrazek

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

Nieprzeczytany post autor: personov »

Może tak :
enjoy_xx pisze:wejscieL = (setka + 0.0050);
setka = Bid więc jeśli Bid się zmienia i np.osiągnie 1.4600 to wejścieL nigdy nie zostanie osiągnięte, bo wtedy będzie wynosiło 1.4650


Czyli warunek
enjoy_xx pisze:if (Bid == wejscieL)
nie zostanie spełniony, bo Bid będzie się ciągle przesuwało.

Bid się ciągle zmienia i tutaj jest klucz do zagadki.


A jakbyś zrobił tak :

Kod: Zaznacz cały

extern double wejscieL = 0.0; 
extern double setka = 0.0; 
extern double szukana = 1.4400; //to będzie szukana cena 



int start() 
{ 

   if (Bid == szukana) //po znalezieniu szukanej ceny przypisz ją globalnie do do zmiennej "setka" a szukaną zmień na 0.0001 (taką aby więcej sie nie powtórzyła) 
      { 
      szukana = 0.0001; 
      setka = wejscieL; 
      }    

   if (Bid == wejscieL+0.0050) //jesli cena osiągnie poziom wejscia tj. (1.4450) wypisz ja na ekran (I WŁAŚNIE TA INSTRUKCJA NIE DZIAŁA!!!!) 
      { 
      Print("Znaleziono W= ", Bid); 
      } 

return(0); 
}
Solą życia jest kasa.

artur_ar
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 09 gru 2009, 15:55

Nieprzeczytany post autor: artur_ar »

Znormalizuj Bid

Kod: Zaznacz cały

if (NormalizeDouble(Bid, 4) == ...
Lub jeśli można to zamiast ostrego warunku == użyj szerszego

Kod: Zaznacz cały

if (Bid >= wejscieL-1*Point && Bid <= wejscieL+1*Point)
Obrazek

Awatar użytkownika
enjoy_xx
Stały bywalec
Stały bywalec
Posty: 37
Rejestracja: 23 maja 2010, 21:31

Nieprzeczytany post autor: enjoy_xx »

Artur_ar pomogła normalizacja dzięki wielkie. Masz za to u mnie pochwalę. Personov dziękuje Ci również za poświęcony czas.
Obrazek

artur_ar
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 09 gru 2009, 15:55

Nieprzeczytany post autor: artur_ar »

Jeszcze, zamiast

Kod: Zaznacz cały

NormalizeDouble(double, 4)
lepiej jest

Kod: Zaznacz cały

NormalizeDouble(double, Digits)
Obrazek

ODPOWIEDZ