Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

Dlaczego ustawia StopLoss, a TakeProfit nie?

Kod: Zaznacz cały

// dla OP_BUY
    double aStopLoss=NormalizeDouble(Bid-Tnij*_Point,_Digits); 
    double aTakeprofit=NormalizeDouble(Bid+Bierz*_Point,_Digits);
    
   // dla OP_SELL
    double bStopLoss=NormalizeDouble(Ask+Tnij*_Point,_Digits); 
    double bTakeprofit=NormalizeDouble(Ask-Bierz*_Point,_Digits);
 
 
   //----to początek instrukcji
    if(Ask>SMAm1&&Ask>SMAm5&&Ask>SMAm15&&Ask>SMAm30&&Ask>SMAH1) { OrderSend(NULL,0,Ile,Ask,2.00,aStopLoss,aTakeProfit,NULL,0,0,clrNONE);} 
    if(Bid<SMAm1&&Bid<SMAm5&&Bid<SMAm15&&Bid<SMAm30&&Bid<SMAH1) { OrderSend(NULL,1,Ile,Bid,2.00,bStopLoss,bTakeProfit,NULL,0,0,clrNONE);} 
    
Wszystkie zmiennie, poza input są pod onTick
"Tnij" to Sl, "Bierz"to TP. oba są w inputs i oznaczają odległość od open price.


EDIT:

Zresztą, mam już drugie EA, co robi dokładnie to samo, co ja chcę tu zaprogramować :)
Temat zostawiam, żeby coś zostało i ewentualnie traderzy przyszłości mogli sobie podpatrzeć coś, co zostało już napisane wiele razy.

Ja na razie działam na zrealizowanie celu jednak (uruchomienie EA), a widzę że do nauki programowania trzeba porządnie przysiąść ;)

Na demo na razie EA mi ładnie wchodzi All In i szybko tnie straty bez zmiłowania, zostało kilka warunków i spokojnie można uruchamiać na jakimś niskim depo w REALu :)

Dużo małych SL-ek, ale jak się trafi zysk to rośnie i rośnie...

Samo z siebie oczywiście nie zarobi, tutaj istotne są parametry wejścia :D :D :D

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 »

Nie wiem, bo nie mam konkretów, ale być może dlatego, że liczysz TP dla Buy od Bid, a trzeba od Ask.
A dla Sell od Bid.

Tzn. generalnie to od ciebie zależy, ale nie wiem jaka odległość TP jest i czy spread nie zawadza?
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
27 kwie 2022, 22:13
Nie wiem, bo nie mam konkretów, ale być może dlatego, że liczysz TP dla Buy od Bid, a trzeba od Ask.
A dla Sell od Bid.

Tzn. generalnie to od ciebie zależy, ale nie wiem jaka odległość TP jest i czy spread nie zawadza?

Faktycznie, ale wtopa.
Szukam dalej, przyglądam się. Teoretycznie powinno wszystko działać.
SL mi ustawia a TP nie.
Już teoretycznie EA powinien mieć wszystkie funkcje, poza zawieszeniem działania EA na 24H w przypadku X% drawdownu.
Wszystko zakodowane w zasadzie, nie widzę brakujących funkcjonalności poza w/w.

Powinienem to dużo powiedziane, bo ciągle jest cos nie tak.

Cóż, za szybko chyba chcę się tego nauczyć, zważywszy że około tydzień temu nie kumałem kompletnie nic...
Jutro siądę do tego z mniej zmęczoną głową

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

Jest pytanie :D

Jak zapisać pętlę w nieskończoność?

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 »

Mistyfikator pisze:
28 kwie 2022, 00:34
Jest pytanie :D

Jak zapisać pętlę w nieskończoność?
Nie bardzo rozumiem?
Masz dwie opcje pętli: for() i while()

Jeżeli zrobisz pętlę nieskończoną, to kod z niej nigdy nie wyjdzie.
I w jakim celu taka pętla?
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
28 kwie 2022, 00:38

Nie bardzo rozumiem?
Masz dwie opcje pętli: for() i while()

Jeżeli zrobisz pętlę nieskończoną, to kod z niej nigdy nie wyjdzie.
I w jakim celu taka pętla?
I już pomogłeś w rozwiązaniu problemu. Znajdę sobie warunek dla while i będzie ok.
Ja się zastanawiałem, jak zapisać to w for()

Chodzi o to, że zastanawiam się jak zaprogramować sytuację, kiedy poziomy SL są różne dla poszczególnych pozycji, a otwarcie każdej nowej pozycji będzie zależne od spełnionego warunku, wystarczy taki: wszystkie SL są wyższe niż openPrice każdej pozycji. Przy czym każdej openPrice należy przyporządkować SL, i każda SL ma być większa od openPrice o wartość input X.

I tutaj się właśnie zastanawiam: każdej pozycji należy nadać osobny identyfikator w takiej sytuacji? Pewnie inaczej to nie zadziała!
Nadać zmienną, czy są jakieś funkcje TICKET predefiniowalne, czy trzeba to też wszystko zaprogramować w takiej sytuacji?

||

Drugi warunek będzie prostszy: liczba otwartych pozycji mniejsza niż 1

Wtedy dopiero EA liczy wskaźniki.

Zastanawiam się, jak to rozwiązać: wartość SL jest jednym z warunków OrderSend, a wartość OrderTicket jest jedynym warunkiem obliczenia wskaźnika i dopiero w przypadku pojawienia sygnału pojawia się OrderSend.

EDIT: A w zasadzie trzeba zamienić kolejnością oba warunki, bo pierwszy jest

Kod: Zaznacz cały

if (OrdersTotal<1)
EDIT2: I to jest argument dla While pewnie, teraz trzeba jakoś wewnątrz tej pętli liczyc numery transakcji?

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 »

Mistyfikator pisze:
28 kwie 2022, 00:54
ninjaproject pisze:
28 kwie 2022, 00:38

Nie bardzo rozumiem?
Masz dwie opcje pętli: for() i while()

Jeżeli zrobisz pętlę nieskończoną, to kod z niej nigdy nie wyjdzie.
I w jakim celu taka pętla?
I już pomogłeś w rozwiązaniu problemu. Znajdę sobie warunek dla while i będzie ok.
Ja się zastanawiałem, jak zapisać to w for()

Chodzi o to, że zastanawiam się jak zaprogramować sytuację, kiedy poziomy SL są różne dla poszczególnych pozycji, a otwarcie każdej nowej pozycji będzie zależne od spełnionego warunku, wystarczy taki: wszystkie SL są wyższe niż openPrice każdej pozycji. Przy czym każdej openPrice należy przyporządkować SL, i każda SL ma być większa od openPrice o wartość input X.

I tutaj się właśnie zastanawiam: każdej pozycji należy nadać osobny identyfikator w takiej sytuacji? Pewnie inaczej to nie zadziała!
Nadać zmienną, czy są jakieś funkcje TICKET predefiniowalne, czy trzeba to też wszystko zaprogramować w takiej sytuacji?

||

Drugi warunek będzie prostszy: liczba otwartych pozycji mniejsza niż 1

Wtedy dopiero liczę wskaźniki

Zastanawiam się, jak to rozwiązać: wartość SL jest jednym z warunków OrderSend, a wartość OrderTicket jest jedynym warunkiem obliczenia wskaźnika i dopiero w przypadku pojawienia sygnału pojawia się OrderSend.
To jest stosunkowo proste. Identyfikatorem jest MagicNumber.
Możesz dodatkowo wprowadzić jakiś komentarz w OrderSend().

Kod: Zaznacz cały

                  for(int i=0;i<OrdersTotal();i++) 
                     {
                     if(OrderSelect(icnt,SELECT_BY_POS,MODE_TRADES))
                      {
                      if (OrderType()==OP_BUY&&
                          OrderSymbol()==_Symbol&&
                          OrderMagicNumber()==Magic_Number&&
                          OrderComment()==order_comment&&
                          SLCheckFunction())
                       {
                       Wykonaj();
                       }
                     }
                    }
SLCheckFunction() musisz sobie na tej samej zasadzie napisać, jako bool SLCheckFunction().
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

Kod: Zaznacz cały


while(OrdersTotal<1)
{//tu zaczynamy obliczenia wskaźników
}
Właśnie!
Intrygowało mnie to Magic Number!
Miałem nadzieję, że to jest to :D

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 »

Mistyfikator pisze:
28 kwie 2022, 01:08

Kod: Zaznacz cały


while(OrdersTotal<1)
{//tu zaczynamy obliczenia wskaźników
}
Właśnie!
Intrygowało mnie to Magic Number!
Miałem nadzieję, że to jest to :D
To while jest do kitu.
Ja napisałem sobie taką funkcję OrdersTotalPerSymbol().
Oczywiście w niej mam wszystkie warunki, według których chcę filtrować pozycje.
No bo, OrdersTotal() to liczba wszystkich pozycji pływających, więc zasadniczo nieprzydatne to jest, jeżeli EA ma obsługiwać tylko swoje transakcje.
Inaczej mówiąc, OrdersTotal() jest potrzebne, żeby przeszukać wszystkie otwarte pozycje, ale trzeba je przefiltrować.

Poza tym, to EA już działa w pętli, która jest wywoływana OnTick(), więc ono ma robić obliczenia wskaźników OnTick(). Ta pętla while jest zbędna w tym miejscu.

Transakcji nie obsłużysz inaczej niż OnTick(), więc nie ma sensu, żeby wskaźniki były liczone, kiedy ticków nie ma, np. w OnTimer().
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

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

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
28 kwie 2022, 08:19
Mistyfikator pisze:
28 kwie 2022, 01:08

Kod: Zaznacz cały


while(OrdersTotal<1)
{//tu zaczynamy obliczenia wskaźników
}
Właśnie!
Intrygowało mnie to Magic Number!
Miałem nadzieję, że to jest to :D
To while jest do kitu.
Ja napisałem sobie taką funkcję OrdersTotalPerSymbol().
Oczywiście w niej mam wszystkie warunki, według których chcę filtrować pozycje.
No bo, OrdersTotal() to liczba wszystkich pozycji pływających, więc zasadniczo nieprzydatne to jest, jeżeli EA ma obsługiwać tylko swoje transakcje.
Inaczej mówiąc, OrdersTotal() jest potrzebne, żeby przeszukać wszystkie otwarte pozycje, ale trzeba je przefiltrować.

Poza tym, to EA już działa w pętli, która jest wywoływana OnTick(), więc ono ma robić obliczenia wskaźników OnTick(). Ta pętla while jest zbędna w tym miejscu.

Transakcji nie obsłużysz inaczej niż OnTick(), więc nie ma sensu, żeby wskaźniki były liczone, kiedy ticków nie ma, np. w OnTimer().
EA ma przefiltrować wszystkie moje otwarte pozycje, celem sprawdzenia, czy ich wartość SL jest większa od ceny otwarcia. Wtedy otwiera kolejną pozycję, ale SL>Openprice jest jedynym warunkiem otwarcia 2, 3, 4, 5...itd pozycji

Ale zanim to zrobi, ma sprawdzic czy liczba otwartych pozycji jest mniejsza od 1.
Bo jeżeli jest mniejsza od 1, to jedynym zadaniem EA jest obliczanie SMA i czekanie na sygnał kupna/sprzedaży. Dopiero brak otwartych pozycji powinien rozpocząć obliczanie średnich kroczących. O ile to jest konieczne, ale mówiłeś coś pod wątkiem z mojego dziennika o wysyłąniu zapytania o cenę do brokera, tak więc pomyślałęm o rozwiązaniu, które to ograniczy.

ODPOWIEDZ