Sekwencja warunków

O jezykach programowania w platformach i nie tylko.
MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Sekwencja warunków

Nieprzeczytany post autor: MkubuxK »

Mam mały problem z napisaniem pewnej sekwencji warunków. Chodzi o to że mój wskaźnik przymuje wartości 0 i 1. Jak zapisać sekwencję 0 1 0 i następuje BUY bądź 1 0 1 i następuje Sell gdzie wcześnie nastąpił inny warunek maksymalnie godzinę wstecz ? Dodatkowo musi byc zapisana cena wystapienia pierwszego warunku i pierwsza wartosc wskaznika 0 musi byc pod cena a 1 nad cena ktora zostala zapisana. Czy to co napisałem poniżej ma sens ?

Kod: Zaznacz cały

int counter=0;
int counterKupna=0;
int counterSprzedazy=0;
start() {

double cena;
if(warunek()) {
  counter=1;
  datetime=hour();
  cena=Close[0];
}
if(counter==1&&datetime=hour()){
   if(wartoscWskaznika==0&&Close[0]<cena)
       counterSprzedazy=1;
  if(wartoscWskaznika==1&&Close[0]>cena)
      counterKupna=1;


   if(counterSprzedazy==1&&wartoscWskaznika==1)
     counterSprzedazy=2;

  if(counterSprzedazy==2&&wartoscWskaznika==0)
      odpalSell();


//i tak samo dla BUY

}


Czy nie ma prostszej konstrukcji zapisania takiej sekwencji niz na liczniku ?


fx-forum

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

Nieprzeczytany post autor: crn »

Nie wiem czy do konca Cie zrozumialem, ale najprosciej bedze inkrementowac jakas zmienna o jeden przy wystapieniu warunku. Zapsiywac do zmiennej czas wystapienia pierwszego warunku.
Jezeli czas zapisany bedze wiekszy niz 1 godzina od aktualnego i zmienna nie bedize rowna X to ja zerowac.

Dalej juz prostym warunkiem sprawdzasz czy zmienna jest rowna 3 i jezlie tak do dajesz wartosc na b.

Analogiczie na sell.

Rozwiazan jest wiele, ale to powinno byc nalatwiejsze.

Mozesz tez poprobwac z petla, ktora sprawdza wystapiernei warunku na siweczkach z ostaniej godizny ( prsota petla while, w ktorej dajesz warunek spradzaj poki iTime(0,0,i)- 60 (konwersja na typ czasowy) > iTime(0,60,0);
i cos tam inkrementowac. Zalezy od problemu.



Pozdrawiam

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

moze zamiast prostego licznika zrob sobie tablice wystapienia warunkow

w takim przypadku po dopisaniu nowego elementu do tablicy zawsze sprawdzasz wartosci ostatnich 3 warunkow:

Kod: Zaznacz cały

if(warunek[x]==1 && warunek[x-1]==0 && warunek[x-2]==1)
  openLong();
i oczywiscie adekwatnie dla szorta....

w takim wypadku trzeba tylko zapamietywac indeks x...

mozesz tez pobawic sie z odwracaniem tablicy...

a jesli masz wiele roznych warunkow ktore chcesz sprawdzic aby moc ustawic flage warunek[x]=1, to najlepiej zrobic sobie osobna funkcje - to dodatkowo spowoduje, ze kod w funkcji start() bedzie czytelniejszy....

np:

Kod: Zaznacz cały

bool checkLong()
     {
       if(counter!=1) return(false);
       if(Hour()!=startHour) return(false);
       if(...)  return(false);
       // w przeciwnym wypadku
       return(true);
     }

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

Z problemem ostatecznie poradziłem sobie według schematu który napisałem. Na zasadzie 2 liczników. Dziękuję za rady. Z tablicami jeszcze pokombinuje bo wydają mi się szybszym rozwiązaniem.
fx-forum

ODPOWIEDZ