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 »

Zetknięcie z programowaniem obiektowym i tak było nieuniknione, tym bardziej fajnie że udało się przy okazji MQL4 i tej standardowej biblioteki. Takie graficzne elementy menu to bardzo dobry przykład do nauki: https://www.mql5.com/en/docs/standardlibrary/controls.
Samo zetknięcie się gotowymi klasami i z całą hierarchią tej rodziny to już bardzo wartościowa lekcja.
A tu jeszcze trzeba stworzyć kolejne klasy, zawierające w sobie cechy swoich poprzedników. WOW, jestem pod wrażeniem, jak to wszystko zostało rozwiązane.

Chociaż te standardowe OBJ_BUTTON też mają swój urok, ja tam lubię taki vintage'owy design.

Ale nie w tym rzecz, tam gdzie się kończy Ansi C, a zaczyna C++, zaczyna się również bardzo pokaźny rozdział języka.
Może to doprowadzić nawet do momentu zwątpienia...
Ale co tam, nie taki diabeł straszny. Ta cała wiedza od początku nie wygląda na łatwą, wraz z upływem czasu i z praktyką rozjaśnia się dopiero bardzo dużo.

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,
mam problem z wykorzystaniem enum. Mianowicie:
Chciałbym stworzyć panel z opcjami do wyboru tylko Tak,Nie
np.
enum ENUM_X1 {Tak,Nie};
extern ENUM_X1=Tak;
enum ENUM_X2 {Tak,Nie};
extern ENUM_X1=Tak;
enum ENUM_X3 {Tak,Nie};
extern ENUM_X1=Tak;

niestety wyskakuje błąd, że Tak,Nie już wykorzystane...
'Tak' - enumerator identifier already defined
'Nie' - enumerator identifier already defined

Jakiś pomysł jak to obejść? Mogę to zrobić na zasadzie Tak,Tak1,Tak2 itd., ale mi się to nie podoba :P

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:
20 wrz 2022, 10:23
Witam,
mam problem z wykorzystaniem enum. Mianowicie:
Chciałbym stworzyć panel z opcjami do wyboru tylko Tak,Nie
np.
enum ENUM_X1 {Tak,Nie};
extern ENUM_X1=Tak;
enum ENUM_X2 {Tak,Nie};
extern ENUM_X1=Tak;
enum ENUM_X3 {Tak,Nie};
extern ENUM_X1=Tak;

niestety wyskakuje błąd, że Tak,Nie już wykorzystane...
'Tak' - enumerator identifier already defined
'Nie' - enumerator identifier already defined

Jakiś pomysł jak to obejść? Mogę to zrobić na zasadzie Tak,Tak1,Tak2 itd., ale mi się to nie podoba :P
No niestety, nie można wielokrotnie definiować enum takimi samymi zmiennymi, ale można zrobić tak:

Kod: Zaznacz cały

#property strict

enum ENUM_X1 
{
X1_Tak,  // Tak
X1_Nie,  // Nie
};

enum ENUM_X2 
{
X2_Tak,  // Tak
X2_Nie,  // Nie
};

enum ENUM_X3 
{
X3_Tak,  // Tak
X3_Nie,  // Nie
};

input ENUM_X1                   OpcjaX1 = X1_Tak;
input ENUM_X2                   OpcjaX2 = X2_Tak;
input ENUM_X3                   OpcjaX3 = X3_Tak;

Pod warunkiem #property strict w polach wyboru będzie widać "Tak", "Nie".
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 »

Dziękuję, dokładnie o to chodziło. To co jest w kodzie to mi nie przeszkadza.Właśnie chodziło to, żeby w polach wyboru było "ładniej". :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 »

Szymon_P pisze:
20 wrz 2022, 14:18
Dziękuję, dokładnie o to chodziło. To co jest w kodzie to mi nie przeszkadza.Właśnie chodziło to, żeby w polach wyboru było "ładniej". :D
Tylko, że w sumie nie potrzebujesz 3-ch enum, wystarczy 1-dno:

Kod: Zaznacz cały

enum ENUM_TAK_NIE
{
Tak,
Nie,
};

input ENUM_TAK_NIE                  Opcja1 = Tak;
input ENUM_TAK_NIE                  Opcja2 = Tak;
input ENUM_TAK_NIE                  Opcja3 = Tak;

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 »

Witam,
mam pytanie odnośnie iBarShift.
Do obliczeń potrzebny mi nr świecy z konkretnej godziny więc zapisałem to w taki sposób:
int Nr_Swiecy =iBarShift(NULL,PERIOD_M1,T1);
Problem pojawia się np. w momencie gdy T1=00:00 i jest np. poniedziałek. Zdarza się tak, że rynek wystartuje np. o 00:06.

Pytanie może wydawać się głupie, ale czy po modyfikacji na taki zapis:
int Nr_Swiecy =iBarShift(NULL,PERIOD_M1,T1,false);
1. Zwróci mi nr najbliższej świecy?
2. Jeśli zwróci nr najbliższej świecy to czy to będzie nr w przód czy tył od zadanej godziny?
Pytam ponieważ na testerze taki problem nie występuje, a poniedziałek już minął i mogę długo czekać zanim sam to zweryfikuję :P

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 »

https://docs.mql4.com/series/ibarshift
exact=false
(false - iBarShift returns the nearest, true - iBarShift returns -1)

Returned value
Index of the bar which covers the specified time. If there is no bar for the specified time (history "gap"), the function will return -1 or the nearest bar index (depending on exact parameter).
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 »

Czy jest plecenie, które zwróci mi wartość minimalnej wielkości pozycji jaką można tworzyć dla danego instrumentu? Chodzi mi o wartość określoną przez brokera np. dla niektórych jest to 0,1 Lot, a dla innych 0,01 itd.

grzegrzyw
Gaduła
Gaduła
Posty: 334
Rejestracja: 11 mar 2012, 19:43

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

Nieprzeczytany post autor: grzegrzyw »

Tak jest polecenie, wartość minimalnej = MODE_MINLOT a maksymalna = MODE_MAXLOT

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:
10 paź 2022, 11:31
Czy jest plecenie, które zwróci mi wartość minimalnej wielkości pozycji jaką można tworzyć dla danego instrumentu? Chodzi mi o wartość określoną przez brokera np. dla niektórych jest to 0,1 Lot, a dla innych 0,01 itd.

Kod: Zaznacz cały


                    step     = MarketInfo(Symbol(),MODE_LOTSTEP);
                    norm     = 0;
                    if (step==1)    norm = 0;
                    if (step==0.1)  norm = 1;
                    if (step==0.01) norm = 2;
                    maxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
                    minLot   = MarketInfo(Symbol(),MODE_MINLOT); 
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ