Wszystkie pytania dozwolone początkujących programistów
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
- KeithFlint
- Bywalec
- Posty: 10
- Rejestracja: 02 cze 2011, 15:30
Panowie, byłbym wdzięczny, jakby ktoś rzucił okiem na poniższy kod:
Ot i któtkie równianie, według którego obliczany jest wolumen transakcji.
Podczas kompilacji nie ma żadnych błędów.
Przy testowaniu otrzymuję jednak błąd dzielenia przez zero (w dzienniku: zero divide).
Nie rozumiem w którym miejscu mam błąd.
Próbowałem zamienić RISK=5 na RISK=0.05, aby pozbyć się ułamka w równaniu. Zmieniłem też AccountBalance() na AccountEquity(). Błąd dalej był ten sam.
Potem zmieniłem SL=10*Point na SL=10. (Dopisałem "*Point" w zleceniach). Pojawił się za to błąd o złej ilości lotów, error 4051.
Chciałem też zaokrąglać wynik tego równania, jednak MathRound() zaokrągla do całości.
Czy ktoś może podpowiedzieć co jest nie tak?
Kod: Zaznacz cały
SL = 10*Point;
RISK = 5;
LotSize = ((RISK/100)*AccountBalance())/SL;
Podczas kompilacji nie ma żadnych błędów.
Przy testowaniu otrzymuję jednak błąd dzielenia przez zero (w dzienniku: zero divide).
Nie rozumiem w którym miejscu mam błąd.
Próbowałem zamienić RISK=5 na RISK=0.05, aby pozbyć się ułamka w równaniu. Zmieniłem też AccountBalance() na AccountEquity(). Błąd dalej był ten sam.
Potem zmieniłem SL=10*Point na SL=10. (Dopisałem "*Point" w zleceniach). Pojawił się za to błąd o złej ilości lotów, error 4051.
Chciałem też zaokrąglać wynik tego równania, jednak MathRound() zaokrągla do całości.
Czy ktoś może podpowiedzieć co jest nie tak?
- thisredone
- Stały bywalec
- Posty: 72
- Rejestracja: 05 sie 2010, 17:07
zaokrąglasz przez NormalizeDouble(loty,ipp)
ipp - ilość miejsc po przecinku. Zwracaj uwagę na to czy twój broker pozwala trejdować mikro lotami.
SL masz prawdopodobnie zadeklarowany jako int stąd twój problem
tzn. nic w tym złego ale w tym obliczeniach powinieneś zrobić coś takiego:
double esel = SL *Point;
ipp - ilość miejsc po przecinku. Zwracaj uwagę na to czy twój broker pozwala trejdować mikro lotami.
SL masz prawdopodobnie zadeklarowany jako int stąd twój problem
tzn. nic w tym złego ale w tym obliczeniach powinieneś zrobić coś takiego:
double esel = SL *Point;
- KeithFlint
- Bywalec
- Posty: 10
- Rejestracja: 02 cze 2011, 15:30
thisredone dzięki za podpowiedź
Wstyd się przyznać ale błędne jest samo obliczanie wielkości lota. Napiszę je nieco inaczej.
Eksperta projektuję dla EURUSD. Chciałbym jednak mieć też aktualny kurs USDPLN aby móc obliczyć tą wielkość lota.
Założenie jest takie, że przy SL=5pips maksymalna strana wynosi 5% kapitału. Aby tą właśnie stratę policzyć potrzebuję ciągle mieć aktualny kurs USDPLN.
Szukałem w dokumentacji MQL4 i MQL5 funkcji, która pobierałaby kurs USDPLN działając na EURUSD. Ma ktoś pomysł jak to załatwić?
Dodam, że nie chciałbym co chwilę ręcznie poprawiać ceny w kodzie eksperta.

Wstyd się przyznać ale błędne jest samo obliczanie wielkości lota. Napiszę je nieco inaczej.
Eksperta projektuję dla EURUSD. Chciałbym jednak mieć też aktualny kurs USDPLN aby móc obliczyć tą wielkość lota.
Założenie jest takie, że przy SL=5pips maksymalna strana wynosi 5% kapitału. Aby tą właśnie stratę policzyć potrzebuję ciągle mieć aktualny kurs USDPLN.
Szukałem w dokumentacji MQL4 i MQL5 funkcji, która pobierałaby kurs USDPLN działając na EURUSD. Ma ktoś pomysł jak to załatwić?
Dodam, że nie chciałbym co chwilę ręcznie poprawiać ceny w kodzie eksperta.
Może pobieraj wartość usdpln za pomocą
lub coś w tym stylu.
Dodano po 1 minutach:
Zerknij czasami i tu:
http://bossa.pl/index.jsp?layout=2&page ... at_id=1088
Masz tam podstawowe instrukcje.
Kod: Zaznacz cały
MarketInfo(Symbol(),MODE_TICKVALUE);
Dodano po 1 minutach:
Zerknij czasami i tu:
http://bossa.pl/index.jsp?layout=2&page ... at_id=1088
Masz tam podstawowe instrukcje.

- thisredone
- Stały bywalec
- Posty: 72
- Rejestracja: 05 sie 2010, 17:07
nie wiem jak chcesz za pomocą jakiegoś kursu obliczyć wartość lotów ale żeby sprawdzić cenę na innej parce wykorzystaj jedną z tych funkcji:
http://docs.mql4.com/series
np. iClose();
http://docs.mql4.com/series
np. iClose();
raczej to powinno bardziej tak wyglądać.
Kod: Zaznacz cały
double MarketInfo( string USDPLN, MODE_TICKVALUE)
- thisredone
- Stały bywalec
- Posty: 72
- Rejestracja: 05 sie 2010, 17:07
masz na myśli
'string USDPLN' zadeklarowałoby zmienną typu string o nazwie USDPLN bez zawartości 
Kod: Zaznacz cały
double MarketInfo( "USDPLN", MODE_TICKVALUE);
