Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
lxi
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 28 sty 2014, 14:04

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

Nieprzeczytany post autor: lxi »

Hello, mam wskaźnik składający się z bardzo dużej ilości ustawień. Chciałbym z tego wskaźnika wyciągnąć wartości konkretnych dwóch buforów dla konkretnych świec. Wiem, że jeśli wskaźnik działa na ustawieniach domyślnych to w funkcji iCustom wystarczy po nazwie wskaźnika podać bufor, który chcemy odczytać i numer świecy, dla której chcemy uzyskać odczyt.
W przypadku mojego wskaźnika tych ustawień jest multum. Próbowałem je wszystkie przepisać do funkcji iCustom ale to rozwiązanie nie zadziałało.
U mnie wyszło to następująco:

Kod: Zaznacz cały

buff_21 = iCustom(NULL, PERIOD_CURRENT, "XU ma simple BT 1.12", "<<<====  T1MA Settings ====>>>", 0, true, 20, 4, 0, 5, 3, clrSeaGreen, clrFireBrick, clrBlack, "<<<====  S1MA Settings ====>>>", true, 10, 4, 0, 5, 3, 
   clrSeaGreen, clrFireBrick, clrBlack, "<<<====  Prices Settings ====>>>", 2, 3, "<<<====  Candle Settings ====>>>", false, 1, 4, true, clrLimeGreen, clrCrimson, clrLinen, "<<<====  Ribbon Settings ====>>>", 
   true, 1, true, clrDarkSlateGray, clrBlack, "<<<====  Arrows Settings ====>>>", true, false, 2, 2, 225, 226, 0.3, 0.3, clrLimeGreen, clrRed, "<<<====  Alerts Settings ====>>>", false, false, false, false, true, false, false, 
   "<<<====  Button Settings ====>>>", 1, 1, "XU", "Arial", 7, clrBlack, clrBlack, "XU Off", "XU On", clrBlack, clrBlack, 170, 15, 50, 20, "", 20, 1);
Po kompilacji otrzymuję błąd: "iCustom - wrong parameters count"

Jak podejść do tematu aby poprawnie stworzyć funkcję iCustom?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

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

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

Nieprzeczytany post autor: ninjaproject »

lxi pisze:
11 paź 2022, 17:51

Po kompilacji otrzymuję błąd: "iCustom - wrong parameters count"

Jak podejść do tematu aby poprawnie stworzyć funkcję iCustom?
Przede wszystkim, to potrzebujesz tylko danych w iCustom od T1MAper do MAPrice2, czyli potrzebujesz wpisać od Trend do MAPrice2, o ile nie potrzebujesz jeszcze innych danych.
Jeżeli chodzi o wartości string (ab), to wystarczy dać " ".
Kłopot tutaj jest z tymi polami wyboru (123) gdzie masz kilka opcji do wyboru. To nie są pola string, tylko int, więc potrzebujesz wprowadzić tam taką wartość, jaka jest zdefiniowana w tym wskaźniku. Zwykle są to od 0 wzwyż, ale nie koniecznie, więc trzeba mieć kod źródłowy, żeby to sprawdzić.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

lxi
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 28 sty 2014, 14:04

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

Nieprzeczytany post autor: lxi »

ninjaproject pisze:
11 paź 2022, 18:13
lxi pisze:
11 paź 2022, 17:51

Po kompilacji otrzymuję błąd: "iCustom - wrong parameters count"

Jak podejść do tematu aby poprawnie stworzyć funkcję iCustom?
Przede wszystkim, to potrzebujesz tylko danych w iCustom od T1MAper do MAPrice2, czyli potrzebujesz wpisać od Trend do MAPrice2, o ile nie potrzebujesz jeszcze innych danych.
Jeżeli chodzi o wartości string (ab), to wystarczy dać " ".
Kłopot tutaj jest z tymi polami wyboru (123) gdzie masz kilka opcji do wyboru. To nie są pola string, tylko int, więc potrzebujesz wprowadzić tam taką wartość, jaka jest zdefiniowana w tym wskaźniku. Zwykle są to od 0 wzwyż, ale nie koniecznie, więc trzeba mieć kod źródłowy, żeby to sprawdzić.
Dzięki, wszystko śmiga

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

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

Nieprzeczytany post autor: Szymon_P »

Witam,
czy jest możliwość, aby podczas uruchomienia EA automatycznie wrzucało mi na wykres wskaźnik (konkretnie MA)? Za każdym razem, gdy np. testuję to muszę ręcznie dodawać go do wykresu. Ustawienie szablonu też mi nie pomoże bo zmieniam co chwilę parametry.

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

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

Nieprzeczytany post autor: ninjaproject »

Szymon_P pisze:
19 paź 2022, 13:30
Witam,
czy jest możliwość, aby podczas uruchomienia EA automatycznie wrzucało mi na wykres wskaźnik (konkretnie MA)? Za każdym razem, gdy np. testuję to muszę ręcznie dodawać go do wykresu. Ustawienie szablonu też mi nie pomoże bo zmieniam co chwilę parametry.
Najprościej, to chyba wstawić kod MA do EA - niech rysuje co świeca.
Albo tak:
https://www.mql5.com/en/docs/chart_oper ... dicatoradd
Eh, to w MQL4 nie działa, tylko w MQL5... :cry:

Osobiście, na ogół albo piszę wskaźnik, albo stosuję gotowy i robię z tego szablon, tzn. EA plus wskaźnik(i) = szablon. Odnośnie zmian parametrów, np. MA, to można albo w EA, albo w wskaźniku wyrzucić zmienne do MT4 przez:

Kod: Zaznacz cały

datetime GlobalVariableSet( string name, double value)
i odczytać przez:

Kod: Zaznacz cały

double GlobalVariableGet( string name)
i nie zapomnieć usunąć przez:

Kod: Zaznacz cały

bool GlobalVariableDel( string name)
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

lxi
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 28 sty 2014, 14:04

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

Nieprzeczytany post autor: lxi »

Kolejne wyzwanie :)
Chciałbym stworzyć przy starcie robota obiekt Trendline tak, aby pojawił się w prawym dolnym rogu.
Niestety opierając się na współrzędnych (time1,price1,time2,price2) nie jestem w stanie tego zrobić - po prostu nie wiem jak.
Jak dotąd udało mi się stworzyć coś takiego:

Kod: Zaznacz cały

ObjectCreate(0, "Line", OBJ_TREND, 0, Time[0], Bid-100, Time[14], Bid-100);
Nie dość, że jestem uzależniony od aktualnej ceny i linii może nie być widać na wykresie, to nie wiem jak podać koordynaty czasowe wybiegające w przyszłość. Próbowałem Time[0]-14 lub Time[0-14] lub TimeCurrent()-14 ale nic z tego.

Pomożecie?

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

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

Nieprzeczytany post autor: ninjaproject »

lxi pisze:
21 paź 2022, 20:25
Kolejne wyzwanie :)
Chciałbym stworzyć przy starcie robota obiekt Trendline tak, aby pojawił się w prawym dolnym rogu.
Niestety opierając się na współrzędnych (time1,price1,time2,price2) nie jestem w stanie tego zrobić - po prostu nie wiem jak.
Jak dotąd udało mi się stworzyć coś takiego:

Kod: Zaznacz cały

ObjectCreate(0, "Line", OBJ_TREND, 0, Time[0], Bid-100, Time[14], Bid-100);
Nie dość, że jestem uzależniony od aktualnej ceny i linii może nie być widać na wykresie, to nie wiem jak podać koordynaty czasowe wybiegające w przyszłość. Próbowałem Time[0]-14 lub Time[0-14] lub TimeCurrent()-14 ale nic z tego.

Pomożecie?
Tu masz - kombinuj!
https://docs.mql4.com/chart_operations/ ... epricetoxy

PS. Świeca bieżąca ma indeks 0, kolejna w lewo ma indeks 1, itd.
W prawo jest Time[0]+x*_Period*60. (Dla mql4, bo dla mql5 trzeba konwertować interwały.)
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

lxi
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 28 sty 2014, 14:04

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

Nieprzeczytany post autor: lxi »

ninjaproject pisze:
21 paź 2022, 21:02
lxi pisze:
21 paź 2022, 20:25
Kolejne wyzwanie :)
Chciałbym stworzyć przy starcie robota obiekt Trendline tak, aby pojawił się w prawym dolnym rogu.
Niestety opierając się na współrzędnych (time1,price1,time2,price2) nie jestem w stanie tego zrobić - po prostu nie wiem jak.
Jak dotąd udało mi się stworzyć coś takiego:

Kod: Zaznacz cały

ObjectCreate(0, "Line", OBJ_TREND, 0, Time[0], Bid-100, Time[14], Bid-100);
Nie dość, że jestem uzależniony od aktualnej ceny i linii może nie być widać na wykresie, to nie wiem jak podać koordynaty czasowe wybiegające w przyszłość. Próbowałem Time[0]-14 lub Time[0-14] lub TimeCurrent()-14 ale nic z tego.

Pomożecie?
Tu masz - kombinuj!
https://docs.mql4.com/chart_operations/ ... epricetoxy

PS. Świeca bieżąca ma indeks 0, kolejna w lewo ma indeks 1, itd.
W prawo jest Time[0]+x*_Period*60. (Dla mql4, bo dla mql5 trzeba konwertować interwały.)
Myślałem o tym co napisałeś.
Mogę znaleźć miejsce, w którym miałaby się pojawić moja linia w formacie time1,price1,time2,price2. Następnie mógłbym to przekonwertować na współrzędne na wykresie, jednak nie wiem co dalej mogę z tą informacją zrobić.
Tak naprawdę wystarczy, że stworzę obiekt w miejscu docelowym dzięki Twoim wskazówkom odnośnie określania czasu "w przyszłości".
Niestety pojawił się inny problem, wystarczy, że powiększę wykres i moja linia znika poza nim.

Doradzisz coś? Nie wiem jak mam kombinować aby linia powstała w prawym dolnym rogu i mimo powiększania/zmniejszania wykresu nigdzie się nie przemieszczała. Zależy mi na tym, ponieważ chcę zapamiętać w zmiennych miejsce powstania linii, a gdy tylko linia zostanie przesunięta w inne miejsce, EA będzie dokonywać pewnych obliczeń odległości od konkretnej świecy lub innego obiektu. Ale to już inna historia.

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

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

Nieprzeczytany post autor: ninjaproject »

lxi pisze:
22 paź 2022, 22:23
ninjaproject pisze:
21 paź 2022, 21:02
lxi pisze:
21 paź 2022, 20:25
Kolejne wyzwanie :)
Chciałbym stworzyć przy starcie robota obiekt Trendline tak, aby pojawił się w prawym dolnym rogu.
Niestety opierając się na współrzędnych (time1,price1,time2,price2) nie jestem w stanie tego zrobić - po prostu nie wiem jak.
Jak dotąd udało mi się stworzyć coś takiego:

Kod: Zaznacz cały

ObjectCreate(0, "Line", OBJ_TREND, 0, Time[0], Bid-100, Time[14], Bid-100);
Nie dość, że jestem uzależniony od aktualnej ceny i linii może nie być widać na wykresie, to nie wiem jak podać koordynaty czasowe wybiegające w przyszłość. Próbowałem Time[0]-14 lub Time[0-14] lub TimeCurrent()-14 ale nic z tego.

Pomożecie?
Tu masz - kombinuj!
https://docs.mql4.com/chart_operations/ ... epricetoxy

PS. Świeca bieżąca ma indeks 0, kolejna w lewo ma indeks 1, itd.
W prawo jest Time[0]+x*_Period*60. (Dla mql4, bo dla mql5 trzeba konwertować interwały.)
Myślałem o tym co napisałeś.
Mogę znaleźć miejsce, w którym miałaby się pojawić moja linia w formacie time1,price1,time2,price2. Następnie mógłbym to przekonwertować na współrzędne na wykresie, jednak nie wiem co dalej mogę z tą informacją zrobić.
Tak naprawdę wystarczy, że stworzę obiekt w miejscu docelowym dzięki Twoim wskazówkom odnośnie określania czasu "w przyszłości".
Niestety pojawił się inny problem, wystarczy, że powiększę wykres i moja linia znika poza nim.

Doradzisz coś? Nie wiem jak mam kombinować aby linia powstała w prawym dolnym rogu i mimo powiększania/zmniejszania wykresu nigdzie się nie przemieszczała. Zależy mi na tym, ponieważ chcę zapamiętać w zmiennych miejsce powstania linii, a gdy tylko linia zostanie przesunięta w inne miejsce, EA będzie dokonywać pewnych obliczeń odległości od konkretnej świecy lub innego obiektu. Ale to już inna historia.
To możesz osiągnąć za pomocą tego, co ci wysłałem.
Albo przestawiać linię za pomocą:

Kod: Zaznacz cały

 
double Cena=ChartGetDouble(0,CHART_PRICE_MIN,0)+pkt*_Point;
 
W jednym i drugim wypadku tak określasz cenę do której ma być linia dostawiona.
No i nie zapomnij, że za każdym nowym Bar trzeba wszystko przestawić, też.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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

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

Nieprzeczytany post autor: ninjaproject »

A może tobie potrzeba tego?

Kod: Zaznacz cały


      int      x     =object_X;
      int      y     =object_Y;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     ChartXYToTimePrice(0,x,y,window,dt,price);
Czyli funkcja odwrotna, gdzie ty określasz pozycję obiektu na oknie wykresy za pomocą x, y i window, a funkcja przelicza to na cenę i czas, czyli bierzesz z tego dt i price dla linii.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ