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.
jak sprawdzić który indyk "pożera" CPU ?
Re: jak sprawdzić który indyk "pożera" CPU ?
Możesz spróbować na początku głównej funkcji każdego wsakźnika (przeważnie OnCalculate()) dać:
A na końcu (po wszystkich obliczeniach w tej funkcji):
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.
Kod: Zaznacz cały
int startTime = GetTickCount();
Kod: Zaznacz cały
Print( GetTickCount()-startTime);
Ten wskaźnik, który liczył się najdłużej powinien najbardziej obciążać procesor.
Re: jak sprawdzić który indyk "pożera" CPU ?
adamForex pisze:Możesz spróbować na początku głównej funkcji każdego wsakźnika (przeważnie OnCalculate()) dać:A na końcu (po wszystkich obliczeniach w tej funkcji):Kod: Zaznacz cały
int startTime = GetTickCount();
Jak wszystko pójdzie zgodnie z planem, to powinieneś dostać czas wykonania danej procedury w milisekundach.Kod: Zaznacz cały
Print( GetTickCount()-startTime);
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ć


Re: jak sprawdzić który indyk "pożera" CPU ?
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()"

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()"
Re: jak sprawdzić który indyk "pożera" CPU ?
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ć.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()"
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.
