Funkcja MathPow()

ODPOWIEDZ
Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Funkcja MathPow()

czwartek 14 maja 2015, 12:21

Witam,

mam dylemat jaka powinna być poprawna składnia (obie wersje działają, z tym że jedna nie do końca poprawnie a drugą dopiero testuję):

double suma=a1+a2+a3... ;
double podzial=suma/20;

i teraz MathPow():

1. double x=MathPow(podzial,0.4);

czy

2. double x=MathPow((StrToDouble(podzial)),0.4);

Która składnia jest poprawna 1 czy 2?
Dzięki za odpowiedź.

Awatar użytkownika
Bfx
Gaduła
Posty: 314
Rejestracja: czwartek 28 sie 2014, 13:11
Lat na Forex: 3
Rodzaj rachunku: Rachunek demonstracyjny
Lokalizacja: Muszyna

Re: Funkcja MathPow()

czwartek 14 maja 2015, 15:36

1 jest dobre. W 2 StrToDouble nie powinno byc, bo zmienna "podział" ma typ double a nie string. Nie wiem jaki masz problem ale spróbuj użyc NormalizeDouble zamiast StrToDouble.

Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Re: Funkcja MathPow()

czwartek 14 maja 2015, 16:15

Problem polega na tym że wersja 1 robiła błędy jak w załączniku w stosunku do modelu w excel. Przykładowo 6 transakcji dobrze 2 źle. Ostatnio wersja 1 robiła dodatkowo transakcje których nie było w modelu, czyli oderwane od wszystkiego. NormalizeDouble w tym przypadku raczej nie ma znaczenia, ponieważ zaokrąglenie liczby dziesiętnej jest bez sensu - załącznik. Dlatego jest bez sensu bo co mi da długość a tym samym zaokrąglenie do dwóch/trzech/czterech miejsc po przecinku, jeśli 1,5 jest inne niż 0,3 ?
Sprawdzałem sposób liczenia w kodzie dwa razy i wychodzi że jest dobrze zrobione. W excelu najprawdopodobniej nie ma błędów.
No i mam dylemat dlaczego wychodzi inaczej :)
Biorąc pod uwagę iż duża część sygnałów z transakcjami się pokrywa, wyliczenia muszą być zbliżone, więc najprawdopodobniej jest to jakiś prosty błąd.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Bfx
Gaduła
Posty: 314
Rejestracja: czwartek 28 sie 2014, 13:11
Lat na Forex: 3
Rodzaj rachunku: Rachunek demonstracyjny
Lokalizacja: Muszyna

Re: Funkcja MathPow()

czwartek 14 maja 2015, 16:30

Miałem kiedyś podobny problem, myślałem że mam gdzieś błąd w kodzie a okazało się, że funkcja MathMod() źle obliczała. W ogóle nie zwracała mi reszty z dzielenia liczb całkowitych. Dalej się tak dzieję jak jej używam. Ale znalazłem na to sposób. MathPow() nigdy nie używałem, możliwe że również nie działa prawidłowo. Niestety musisz to sprawdzac ręcznie na kalkulatorze i porównywac czy funkcja dobrze liczy.

EDIT: Spróbuj z tym NormalizeDouble(). Może to miec wpływ, bo jeśli jej nie użyjesz to funkcja przed wykonaniem dalszych obliczeń sama zaokrągli do 5 miejsca po przecinku. A używając tej funkcji możesz zaokrąglic do 10 albo więcej.
Przykład:
MathPow(a/b,x/y);
Jeśli nie użyjesz NormalizeDouble to funkcja ta najpierw obliczy a/b i zaokrągli do 5 miejsca po przecinku, to samo zrobi z x/y i dopiero podniesie do potęgi. Miałem taki przypadki, że nie użycie NormalizeDuble() wpływało na błędne obliczenie ceny nawet o kilkadziesiąt pips. Przy potęgowaniu różnice mogą byc większe.

Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Re: Funkcja MathPow()

czwartek 14 maja 2015, 16:48

ok, zrobię NormalizeDouble(), potem też wywale jako alert obliczenia i faktycznie PrtScr i kalkulator :)
Zastanawiałem się też nad obejściem MathPow(), bo w moim przypadku jest to pierwiastkowanie. Teoretycznie mógłbym zrobić mnożenie tylko zastanawiam się jak zrobić potęgę 1/n w mql4, bo do n to najmniejszy problem.
Może faktycznie MathPow() się zakręciło bo jest tam kilka średnich wcześniej jednych z drugich i do tego kursy.

Awatar użytkownika
Bfx
Gaduła
Posty: 314
Rejestracja: czwartek 28 sie 2014, 13:11
Lat na Forex: 3
Rodzaj rachunku: Rachunek demonstracyjny
Lokalizacja: Muszyna

Re: Funkcja MathPow()

czwartek 14 maja 2015, 16:54

Możesz obliczyc 1 do n. Są na to wzory. Było w szkole ale nie pamiętam. Poszukaj albo zapytaj na jakimś forum matematycznym.
Alert i sprawdzanie obliczeń to najlepsze droga do znalezienia problemu. Powodzenia :joy:

Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Re: Funkcja MathPow()

czwartek 14 maja 2015, 16:58

Wiem że było w szkole :) grzebałem też na forach matematycznych :) dzięki

Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Re: Funkcja MathPow()

czwartek 14 maja 2015, 17:21

Bfx zagiąłeś mnie :)
Po wywaleniu wyszło że:

suma==0
podzial==0

Awatar użytkownika
m_c
Stały Bywalec
Posty: 186
Rejestracja: czwartek 17 paź 2013, 12:51
Lat na Forex: 14
Kontakt:

Re: Funkcja MathPow()

sobota 16 maja 2015, 17:52

Wielkie G. Nawet po użyciu NormalizeDouble() z dokładnością do 20 miejsca po przecinku część transakcji się pokrywa z modelem w excel a część nie.
Albo źle użyte jest Normalize albo błąd jest gdzieś indziej.

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości