jak sprawdzić który indyk "pożera" CPU ?

O jezykach programowania w platformach i nie tylko.
pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

jak sprawdzić który indyk "pożera" CPU ?

Nieprzeczytany post autor: pim »

Witam.

Czy znacie jakąś możliwość sprawdzenia który ndyk najmocniej obciąża procesor ?

Mam uruchomionych kilka indyków na 28 wykresach i zauważam ogromne spowolnienie jak notowana jest duża ilość ticków.

Zastanawiam się czy można dopisać jakiś kod w każdym z indyków by dowiedzieć się ile potrzebują CPU ?

Probowałem usuwać / dodawać na przemian indyki ale to nie tędy droga.

Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

Re: jak sprawdzić który indyk "pożera" CPU ?

Nieprzeczytany post autor: adamForex »

Możesz spróbować na początku głównej funkcji każdego wsakźnika (przeważnie OnCalculate()) dać:

Kod: Zaznacz cały

int startTime = GetTickCount();
A na końcu (po wszystkich obliczeniach w tej funkcji):

Kod: Zaznacz cały

Print( GetTickCount()-startTime);
Jak wszystko pójdzie zgodnie z planem, to powinieneś dostać czas wykonania danej procedury w milisekundach.
Ten wskaźnik, który liczył się najdłużej powinien najbardziej obciążać procesor.

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: jak sprawdzić który indyk "pożera" CPU ?

Nieprzeczytany post autor: pim »

adamForex pisze:Możesz spróbować na początku głównej funkcji każdego wsakźnika (przeważnie OnCalculate()) dać:

Kod: Zaznacz cały

int startTime = GetTickCount();
A na końcu (po wszystkich obliczeniach w tej funkcji):

Kod: Zaznacz cały

Print( GetTickCount()-startTime);
Jak wszystko pójdzie zgodnie z planem, to powinieneś dostać czas wykonania danej procedury w milisekundach.
Ten wskaźnik, który liczył się najdłużej powinien najbardziej obciążać procesor.

super, dzięki zaraz sprawdzę ale to powinno zadziałać, dam znać :D :564:

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Re: jak sprawdzić który indyk "pożera" CPU ?

Nieprzeczytany post autor: crn »

rocznica z wywołań GetTickCount() w wątku N1 może zwrócić dużo, niż faktyczne "ticki" potrzebne do wykonania obliczeń pomiędzy wywołaniami jeżeli w wątki NX zjadaja procka :)
Wykonanie funkcji OnCalculate() w mql nie jest atomowe...

Najprawdopodobniej będzie to wskaźnik, który przelicza za każdym razem wszsytko od początku. Trzelem, że w 90% będąto te, które nie używają funkcji "IndicatorCounted()"

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: jak sprawdzić który indyk "pożera" CPU ?

Nieprzeczytany post autor: pim »

crn pisze:rocznica z wywołań GetTickCount() w wątku N1 może zwrócić dużo, niż faktyczne "ticki" potrzebne do wykonania obliczeń pomiędzy wywołaniami jeżeli w wątki NX zjadaja procka :)
Wykonanie funkcji OnCalculate() w mql nie jest atomowe...

Najprawdopodobniej będzie to wskaźnik, który przelicza za każdym razem wszsytko od początku. Trzelem, że w 90% będąto te, które nie używają funkcji "IndicatorCounted()"
Tak właśnie, mam taki sam przeze mnie napisany dla każdej pary walutowej oblicza i wyświetla ilość trejdów i ich dane typu pipsy, gotówkę, loty, ile w sell ile w buy , gram koszykami walut na wszystkich 28 parach i ten indyk jak jest dużo otwartych pozycji to bardzo intensywnie zużywa CPU. Obliczenia robi co każdy tick , nie bardzo wiem jak go zoptymalizować.

Wyświetlanie wyników mam w jednej dużej pętli przez ObjectCreate i Object SetText

np. tak liczę i wyświetlam profit dla trejdów:

Kod: Zaznacz cały

// show symbol profit  
                   symbol_profit= symbol_profit + ( OrderProfit() + OrderSwap() + OrderCommission()); 
                   
                   if (symbol_profit>0) profitColor=Lime;
                   if (symbol_profit==0) profitColor=Gray;
                   if (symbol_profit<0) profitColor=Red;
                        
                   string name = "symbol_profit" + " " + symbols[k-1];
                        ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
                        ObjectSetText(name, DoubleToStr(symbol_profit, 2), 12, "Arial Bold", profitColor);
                        ObjectSet(name, OBJPROP_CORNER, corner);
                        ObjectSet(name, OBJPROP_XDISTANCE, sideAdjustment + column_profit);
                        ObjectSet(name, OBJPROP_YDISTANCE, up_downShift  + 85+k*25);     

Czy wyrzucenie "ObjectCreate" po za pęte i jedno stworzenie objektu nie przyspieszy trochę obliczeń ?

tak samo Object Set: Corner i XDistance jest znane przed wejściem w pętle , może to coś pomoże. :roll:

ODPOWIEDZ