Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

Witam,
Chciałbym napisać funkcję, która po wystąpieniu X świec w danym kierunku zwróci mi wartość true. Przykładowo jeśli wystąpią minimum 3 świece wzrostowe pod rząd to funkcja zwraca wartość true. W przeciwnym razie false. Jeśli wystąpią 2 wzrostowe, jedna spadkowa i kolejna wzrostowa to w dalszym ciągu false. Jeśli wystąpią 3 wzrostowe, następnie spadkowa to po zakończeniu tej spadkowej funkcja znów zmienia się na false. Chodzi o sprawdzanie świec od indeksu 1 do określonego indeksu np.3
Zacząłem kombinować w ten sposób:
bool Swiece()
{
bool result=false;
for(int i=1;i<=3;i++)
{
if( (iOpen(NULL,PERIOD_H1,i))<=(iClose(NULL,PERIOD_H1,i)))
result=true;
else
result=false;
}
return(result);
}
No i utknąłem bo nie wiem jak zrobić, żeby sprawdził czy warunek jest spełniony dla X świec pod rząd? No i czy w ogóle idę w dobrym kierunku?

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
26 wrz 2021, 17:57
Witam,
Chciałbym napisać funkcję, która po wystąpieniu X świec w danym kierunku zwróci mi wartość true. Przykładowo jeśli wystąpią minimum 3 świece wzrostowe pod rząd to funkcja zwraca wartość true. W przeciwnym razie false. Jeśli wystąpią 2 wzrostowe, jedna spadkowa i kolejna wzrostowa to w dalszym ciągu false. Jeśli wystąpią 3 wzrostowe, następnie spadkowa to po zakończeniu tej spadkowej funkcja znów zmienia się na false. Chodzi o sprawdzanie świec od indeksu 1 do określonego indeksu np.3
Zacząłem kombinować w ten sposób:
bool Swiece()
{
bool result=false;
for(int i=1;i<=3;i++)
{
if( (iOpen(NULL,PERIOD_H1,i))<=(iClose(NULL,PERIOD_H1,i)))
result=true;
else
result=false;
}
return(result);
}
No i utknąłem bo nie wiem jak zrobić, żeby sprawdził czy warunek jest spełniony dla X świec pod rząd? No i czy w ogóle idę w dobrym kierunku?
Jeżeli badasz tylko 4 swiece, to nie potrzeba pętli for.

Kod: Zaznacz cały

if(Close[4]>Open[4]&&Close[3]>Open[3]&&Close[2]>Open[2]&&Close[1]<Open[1])
return(false);
W innym wypadku można to rozwiązać na różne sposoby.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

No własnie chodzi o to, żebym mógł zmieniać ustawienia. Mam funkcję napisaną dla 3 świec, ale czasami będę potrzebował 2 innym razem 5, a nie chciałbym za każdym razem modyfikować kodu. "3" wpisałem dla przykładu, później zastąpię zmienną.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
26 wrz 2021, 19:57
No własnie chodzi o to, żebym mógł zmieniać ustawienia. Mam funkcję napisaną dla 3 świec, ale czasami będę potrzebował 2 innym razem 5, a nie chciałbym za każdym razem modyfikować kodu. "3" wpisałem dla przykładu, później zastąpię zmienną.
No to nie bardzo widzę jak, bo pewnie masz na myśli jakieś konkretne setupy, czyli sekwencje świec.
Trzeba wtedy każdy taki scenariusz osobno opisać.
Nie można zakodować czegoś, czego nie wiesz.
Można np. czekać na jakiś warunek, kiedy wystąpi, to odczytać czas świecy, na której ten warunek nastąpił, i potem na podstawie tego czasu odczytać indeks tej świecy, i np. badać inny warunek od tej świecy.
A dla EA, to nawet nie trzeba znać indeksu świecy, tylko od momentu, kiedy wystąpi dany warunek, to zmienna jest = true, i dopiero wtedy szukasz warunku pozycji, lub negacji. Jeżeli wystąpi negacja, to zmienną resetujesz na false.
Oczywiście, musisz zmienną resetować na false zawsze wtedy, kiedy nie ma być transakcji, lub kolejnej transakcji.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

ninjaproject pisze:
26 wrz 2021, 21:46
Szymon_P pisze:
26 wrz 2021, 19:57
No własnie chodzi o to, żebym mógł zmieniać ustawienia. Mam funkcję napisaną dla 3 świec, ale czasami będę potrzebował 2 innym razem 5, a nie chciałbym za każdym razem modyfikować kodu. "3" wpisałem dla przykładu, później zastąpię zmienną.
No to nie bardzo widzę jak, bo pewnie masz na myśli jakieś konkretne setupy, czyli sekwencje świec.
Trzeba wtedy każdy taki scenariusz osobno opisać.
Nie można zakodować czegoś, czego nie wiesz.
Można np. czekać na jakiś warunek, kiedy wystąpi, to odczytać czas świecy, na której ten warunek nastąpił, i potem na podstawie tego czasu odczytać indeks tej świecy, i np. badać inny warunek od tej świecy.
A dla EA, to nawet nie trzeba znać indeksu świecy, tylko od momentu, kiedy wystąpi dany warunek, to zmienna jest = true, i dopiero wtedy szukasz warunku pozycji, lub negacji. Jeżeli wystąpi negacja, to zmienną resetujesz na false.
Oczywiście, musisz zmienną resetować na false zawsze wtedy, kiedy nie ma być transakcji, lub kolejnej transakcji.
Dokładnie wiem co chcę osiągnąć ponieważ działa mi to już w EA tylko mam na sztywno wpisaną ilość świec. Zobrazuję to troszkę dokładniej.
Przykład 1 (badam 3 świece):
Gdy świece o indeksach 2,3,4 są wzrostowe to true (analogicznie w drugą stronę)
Przykład 2 (badam 6 świec):
Gdy świece o indeksach 2,3,4,5,6,7 są wzrostowe to true (analogicznie w drugą stronę)

Tak naprawdę to interesuje mnie zbadanie świec od indeksu 2 do X, czy wszystkie po kolei są wzrostowe i jeśli wystąpi warunek minimum np.3 to true i przechodzę do następnego kroku. Problemem dla mnie jest to w jaki sposób mam napisać, żeby EA badał tę określoną liczbę świec o znanych indeksach. Określony jest także kierunek, który ma być w danym momencie badany więc mnie interesuje tylko zbadanie czy te świece od 2 do X są w "moim" kierunku.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
26 wrz 2021, 23:06
ninjaproject pisze:
26 wrz 2021, 21:46
Szymon_P pisze:
26 wrz 2021, 19:57
No własnie chodzi o to, żebym mógł zmieniać ustawienia. Mam funkcję napisaną dla 3 świec, ale czasami będę potrzebował 2 innym razem 5, a nie chciałbym za każdym razem modyfikować kodu. "3" wpisałem dla przykładu, później zastąpię zmienną.
No to nie bardzo widzę jak, bo pewnie masz na myśli jakieś konkretne setupy, czyli sekwencje świec.
Trzeba wtedy każdy taki scenariusz osobno opisać.
Nie można zakodować czegoś, czego nie wiesz.
Można np. czekać na jakiś warunek, kiedy wystąpi, to odczytać czas świecy, na której ten warunek nastąpił, i potem na podstawie tego czasu odczytać indeks tej świecy, i np. badać inny warunek od tej świecy.
A dla EA, to nawet nie trzeba znać indeksu świecy, tylko od momentu, kiedy wystąpi dany warunek, to zmienna jest = true, i dopiero wtedy szukasz warunku pozycji, lub negacji. Jeżeli wystąpi negacja, to zmienną resetujesz na false.
Oczywiście, musisz zmienną resetować na false zawsze wtedy, kiedy nie ma być transakcji, lub kolejnej transakcji.
Dokładnie wiem co chcę osiągnąć ponieważ działa mi to już w EA tylko mam na sztywno wpisaną ilość świec. Zobrazuję to troszkę dokładniej.
Przykład 1 (badam 3 świece):
Gdy świece o indeksach 2,3,4 są wzrostowe to true (analogicznie w drugą stronę)
Przykład 2 (badam 6 świec):
Gdy świece o indeksach 2,3,4,5,6,7 są wzrostowe to true (analogicznie w drugą stronę)

Tak naprawdę to interesuje mnie zbadanie świec od indeksu 2 do X, czy wszystkie po kolei są wzrostowe i jeśli wystąpi warunek minimum np.3 to true i przechodzę do następnego kroku. Problemem dla mnie jest to w jaki sposób mam napisać, żeby EA badał tę określoną liczbę świec o znanych indeksach. Określony jest także kierunek, który ma być w danym momencie badany więc mnie interesuje tylko zbadanie czy te świece od 2 do X są w "moim" kierunku.
No to potrzebujesz w pętli for od 2 do X zrobić licznik świec o danym kierunku.
Np.

Kod: Zaznacz cały

input int          CandlesToCount = 6;      // to jest zmienna x

int CountBullCandles(int x)
 {
int i;
int bullCount=0;

for(i=2; i<=x; i++)
 {
 if(Close[i]>Open[i])
 bullCount ++;
 }
 return(bullCount);
 }
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Szymon_P
Stały bywalec
Stały bywalec
Posty: 60
Rejestracja: 31 paź 2015, 22:35

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Szymon_P »

Dokładnie o to chodziło! Dziękuję!

WojciechPP
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 25 wrz 2021, 12:00

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: WojciechPP »

Witam serdecznie,

metodą prób i błędów napisałem pierwszy wskaźnik oparty o średnie kroczące. W załączniku prosty przypadek gdzie szybka średnia przecina wolną. Po przecięciu wrzuca mi na wykres symbol strzałki. Wszystko działa dobrze do momentu przesuwania wykresu w lewo. Gdy program zaczyna pobierać wcześniejszą historię strzałki zaczynają fruwać po całym wykresie. Po przełączeniu między tf'ami wskaźnik się odświeża i wszystko wraca do normy.
Proszę o pomoc jak można to naprawić, żeby strzałki nie zaczynały wariować ?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 27 wrz 2021, 22:09 przez WojciechPP, łącznie zmieniany 1 raz.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

WojciechPP pisze:
27 wrz 2021, 21:52
Witam serdecznie,

metodą prób i błędów napisałem pierwszy wskaźnik oparty o średnie kroczące. W załączniku prosty przypadek gdzie szybka średnia przecina wolną. Po przecięciu wrzuca mi na wykres symbol strzałki. Wszystko działa dobrze do momentu przesuwania wykresu w lewo. Gdy program zaczyna pobierać wcześniejszą historię strzałki zaczynają fruwać po całym wykresie. Po przełączeniu między tf'ami wskaźnik się odświeża i wszystko wraca do normy.
Proszę o pomoc jak można to naprawić, żeby strzałki nie zaczynały wariować ?
Na początku pętli for() wyzeruj bufor:

Kod: Zaznacz cały

      up[i]=EMPTY;
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

WojciechPP
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 25 wrz 2021, 12:00

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: WojciechPP »

Super ekspres :) Wielkie dzięki ! Działa

ODPOWIEDZ