Wszystkie pytania dozwolone początkujących programistów
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Wiesz, reszta to matematyka.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
Dzięki wielkie. Działa.ninjaproject pisze: ↑30 sty 2021, 13:22Już wiem:
Nie ma w MT4 bezpośredniej metody odczytania poziomów z OBJ_FIBO.
Czyli, ta pętla zwraca tylko ceny kotwic (ANCHOR).
Resztę trzeba z tego wyliczyć:Kod: Zaznacz cały
double getFiboLevel( double up, double dw, double lev, int direction ){ double ling = up - dw; double pLev = ( ling / 100 ) * lev; return ( direction < 0 ) ? NormalizeDouble( up - pLev, Digits ) : NormalizeDouble( dw + pLev, Digits ) ; } Print( DoubleToString( getFiboLevel( LastZZhigh, LastZZlow, 23.6, 1 ) ) );
Jeszcze posprawdzam potem ale wstępnie teraz liczy ok
coś takiego np dla 50%
Kod: Zaznacz cały
static double ss[9];
//ArrayResize(sstr, 7,7);
for (int i = 0; i < a; i++) {
if (ObjectGetDouble(0,InpName,OBJPROP_PRICE, i, ss[i])) {
Print( " == > " + i + " --- " + ss[i]);
//double res = (ss[1] - ss[0]);// * SymbolInfoDouble(Symbol(),SYMBOL_POINT);
//Print(min_price + (res * sstr[i]));
double x = ss[1] - ss[0];
double p = (x / 100) * 50;
double res = max_price - NormalizeDouble(p, Digits);
Print(" ppp pp " + res );
} else{
Print(GetLastError());
}
}
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743
Re: Wszystkie pytania dozwolone początkujących programistów
Witam. Kolejny kłopot. Piszę EA które ma zamykać pozycję w momencie przecięcia się dwóch średnich kroczących. Problem jest w warunku który według logiki przecięć jest napisany w porządku, ale z drugiej strony zawsze jest true i od razu po otwarciu pozycji zamyka ją. W konsoli wyrzuca błąd 148. Próbowałem robić z porównaniem smaS==smaF, pozycje otwierało ale nie zamykało w momencie przecięcia.
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS>=smaF || smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS>=smaF || smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Ja nie widzę tutaj przecięcia dwóch średnich.blashka pisze: ↑03 lut 2021, 09:43Witam. Kolejny kłopot. Piszę EA które ma zamykać pozycję w momencie przecięcia się dwóch średnich kroczących. Problem jest w warunku który według logiki przecięć jest napisany w porządku, ale z drugiej strony zawsze jest true i od razu po otwarciu pozycji zamyka ją. W konsoli wyrzuca błąd 148. Próbowałem robić z porównaniem smaS==smaF, pozycje otwierało ale nie zamykało w momencie przecięcia.
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS>=smaF || smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
Żeby wyczaić przecięcie dwóch średnich, to potrzebujesz dwie wartości każdej średniej, czyli np.:
MA1_1 i MA1_2
MA2_1 i MA2_2
Np.:
Kod: Zaznacz cały
if(MA1_2<MA2_2&&MA1_1>=MA2_1) {wzrosty=true; spadki=false;}
if(MA1_2>MA2_2&&MA1_1<=MA2_1) {spadki=true; wzrosty=false;}
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
Poprawiłem na takie coś ale dalej się nie słucha. Warunki w jednym i drugim ife są takie same bo ma zamykać pozycję w momencie dotknięcia średnich. Próbowałem to wcześniej zrobić z ceną i jedną średnią, ale nie działało stąd ta średnia o szybkości 1.
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS<smaF && smaS>=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
else if(smaS>smaF && smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_POS))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS<smaF && smaS>=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
else if(smaS>smaF && smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_POS))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Nadal nie wykonujesz tego, co ci napisałem!blashka pisze: ↑03 lut 2021, 13:12Poprawiłem na takie coś ale dalej się nie słucha. Warunki w jednym i drugim ife są takie same bo ma zamykać pozycję w momencie dotknięcia średnich. Próbowałem to wcześniej zrobić z ceną i jedną średnią, ale nie działało stąd ta średnia o szybkości 1.
double smaS = iMA(_Symbol, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double smaF = iMA(_Symbol, PERIOD_H1, 1, 0, MODE_SMA, PRICE_CLOSE, 0);
if(smaS<smaF && smaS>=smaF)
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
else if(smaS>smaF && smaS<=smaF)
{
if(OrderSelect(ticket,SELECT_BY_POS))
int orderclose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
Musisz porównywać 2 wartości dla każdej średniej, ze świecy zamkniętej o index = 1 i ze świecy o index 2.
Momentu dotknięcia dwóch średnich nie da się wybadać, ponieważ on często nie występuje o czasie świecy.
A badanie na świecy bieżącej (o index = 0), niezamkniętej, to mija się z celem.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
Okej teraz już rozumiem, zawsze jak robiłem przecięcia to właśnie na tym jednym warunku ale wtedy akurat otwierałem pozycje a teraz miałem problemy z zamknięciem. Dzięki.
Re: Wszystkie pytania dozwolone początkujących programistów
@ninja, Ty lepiej ogarniasz MT4. Czemu indykator po każdym przełączeniu wykresu na inny TF np z m5 na m15 przeładowuje się. Po co to jest tak zrobione? Przez to zmienne globalne są inicjalizowane od nowa, i ustawiane są początkowe wartości a nie te co były ustawione między czasie, przed przełączeniem wykresu. Czemu to jest tak durnie zrobione? Wiem że jest API z funkcjami jak GlobalVariableSet itd, ale ciekawi mnie czemu tak to jest rozwiązane dziwnie.
Albo jak Ty do tego podchodzisz? Jak rozwiązujesz w MT4 problem zmiennych globalncyh w indyku żeby się nie resetowały po każdym przełączniu wykresu.
Albo jak Ty do tego podchodzisz? Jak rozwiązujesz w MT4 problem zmiennych globalncyh w indyku żeby się nie resetowały po każdym przełączniu wykresu.
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Wszystkie pytania dozwolone początkujących programistów
Jak mu nie zakodujesz usuwania przy zmianie Tf-u, np. to nie będzie usuwał.rookie2 pisze: ↑05 lut 2021, 12:53@ninja, Ty lepiej ogarniasz MT4. Czemu indykator po każdym przełączeniu wykresu na inny TF np z m5 na m15 przeładowuje się. Po co to jest tak zrobione? Przez to zmienne globalne są inicjalizowane od nowa, i ustawiane są początkowe wartości a nie te co były ustawione między czasie, przed przełączeniem wykresu. Czemu to jest tak durnie zrobione? Wiem że jest API z funkcjami jak GlobalVariableSet itd, ale ciekawi mnie czemu tak to jest rozwiązane dziwnie.
Albo jak Ty do tego podchodzisz? Jak rozwiązujesz w MT4 problem zmiennych globalncyh w indyku żeby się nie resetowały po każdym przełączniu wykresu.
Nic nie jest zrobione.
Tylko programista albo rozumie co robi, albo nie rozumie.
Jeżeli nie rozumie, to lepiej żeby nie programował zanim nie zrozumie.
https://docs.mql4.com/basis/function/events
https://www.mql5.com/en/docs/event_handlers/ondeinit
Trzeba rozumieć jak to działa i rozwiązywać problemy tak, żeby kod działał tak, jak programista chce.
A tak bardziej szczegółowo, to zapodaj kod.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
Re: Wszystkie pytania dozwolone początkujących programistów
Siadłem do kodowania na MT4, a wcześniej tylko kilka prostych EA zrobiłem na tym. Przyzwyczajony jestem do jforex, dlatego mam problem z ogarnięciem. W sumie te funkcje https://docs.mql4.com/globals jak się z nimi oswoiłem trochę to robią to co należy. I przy kilku instrumentach jak wrzucam indykator wtedy robię nazwę zmiennej + ChartSymbol() i mam dla każdego instrumentu ustawioną zmienną. I w sumie tego szukałem i o to pytałem, tylko na początku nie mogłem zatrybić że tutaj na MT4 jest inaczej, to fakt. Anyway. Dzięki za odpowiedź.ninjaproject pisze: ↑05 lut 2021, 17:14Jak mu nie zakodujesz usuwania przy zmianie Tf-u, np. to nie będzie usuwał.rookie2 pisze: ↑05 lut 2021, 12:53@ninja, Ty lepiej ogarniasz MT4. Czemu indykator po każdym przełączeniu wykresu na inny TF np z m5 na m15 przeładowuje się. Po co to jest tak zrobione? Przez to zmienne globalne są inicjalizowane od nowa, i ustawiane są początkowe wartości a nie te co były ustawione między czasie, przed przełączeniem wykresu. Czemu to jest tak durnie zrobione? Wiem że jest API z funkcjami jak GlobalVariableSet itd, ale ciekawi mnie czemu tak to jest rozwiązane dziwnie.
Albo jak Ty do tego podchodzisz? Jak rozwiązujesz w MT4 problem zmiennych globalncyh w indyku żeby się nie resetowały po każdym przełączniu wykresu.
Nic nie jest zrobione.
Tylko programista albo rozumie co robi, albo nie rozumie.
Jeżeli nie rozumie, to lepiej żeby nie programował zanim nie zrozumie.
https://docs.mql4.com/basis/function/events
https://www.mql5.com/en/docs/event_handlers/ondeinit
Trzeba rozumieć jak to działa i rozwiązywać problemy tak, żeby kod działał tak, jak programista chce.
A tak bardziej szczegółowo, to zapodaj kod.
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743