Spotkałem się w wielu wskaźnikach ,przeważnie takich w których stosowane są dosyć "ciężkie" obliczenia co widać z zachowania platformy z następującą konstrukcją (pseudo kod) :
Kod: Zaznacz cały
Indicator XXX
extern int a =100;
extern int b = 20;
extern int bars = 1000 ;
double Buff x[];
SetIndexBuffer(0,x) ; // Bufor 0
start(){
count = bars - Bars ;
if(key)
{
for(count , .... count---)
{
z = iCustom(NULL,period, "XXX",bars? , numbuff-0, /*index*/-0)
}
}
}
Pytanie :
1.Jak to ma się do wydajności kodu i poco taki zabieg ?
2.Pierwsze wywołanie kodu wskaźnika musi przeliczyć wszystkie bary aby uzyskać wartość końcową buff[0] , następnie ilość świeczek potrzebna do przeliczenia jest przeważnie redukowana co zwiększa wydajność obliczeń .
Jak to ma się do iCustom , Czy chcąc uzyskać końcową wartość bufora trzeba do funkcji podać ilość bars do przeliczenia czy nie jest to już potrzebne ?
Mam tutaj wątpliwość bo jeśli istnieje konieczność przeliczania wszystkich świeczek od początku to wydajność będzie fatalna .
Głównie chodzi mi o nierekurencyjne wywołanie , czyli używam iCustom z kodu innego wskaźnika :
Kod: Zaznacz cały
Indicator YYYYY
extern int a =100;
extern int b = 20;
extern int bars = 1000 ;
double Buff x[];
double a = iCustom(NULL,period, "XXX",bars? , numbuff-0, /*index*/-0)
}
Jeśli tak to czy kolejne wywołanie iCustom też będzie przeliczać pełną ilość świec podaną do iCustom [?] ,a może zależy to tylko od konstrukcji wskaźnika "przekazanego" do iCustom ?
Jeśli nie podam ilości świec do przeliczenia iCustom to wskaźnik XXX przeliczy przy pierwszym wywołaniu "domyślną" wartość z ustawień wskaźnika ,a potem ilość która jest redukowana (załóżmy że jego kod tak jest napisany),
czy za każdym razem będzie przeliczał wszystkie .
Tzn , czy kod jest wykonywany od początku za każdym wywołaniem iCustom ,czy też jego stan jest "utrzymywany" i traktowany jako załadowany wskaźnik (.dll) do którego są potem tylko odwołania (kolejne wywołania iCustom) ?