/*[[ Name := X_O_I_A_H_Indicator Author := Link := 1@1.ru Notes := POINT FIGURES INDICATOR Separate Window := YES First Color := Green First Draw Type := histogram First Symbol := 217 Use Second Data := Yes Second Color := Red Second Draw Type := histogram Second Symbol := 218 ]]*/ Input: BoxSize(15); var: CurrentBar(0); var: startflag(0), cur(0), step(0); var: Up(0), Dn(0); var: Hi(0), Lo(0); var: ValueUp(0), ValueDn(0); var: shift(0), cnt(0), loopbegin(0), first(True), prevbars(0), sum(0); var: digits(0); digits = log(1/Point)/log(10); Step = Normalize(BoxSize*Point,digits); SetLoopCount(0); // check for additional bars loading or total reloading If Bars < prevbars Or Bars-prevbars>1 Then first = True; prevbars = Bars; If first Then { // loopbegin prevent couning of counted bars exclude current loopbegin = 500; If loopbegin < 0 Then Exit; // not enough bars for counting Hi=c[loopbegin]; Lo=c[loopbegin]; first = False; }; loopbegin = loopbegin+1; // current bar is to be recounted too For CurrentBar = loopbegin Downto 0 { cur = c[CurrentBar]; if cur > (Hi+Step) then { if Dn = 1 then { // direction changed - BUY signal ValueDn=0; }; // ValueUp=ValueUp+1; ValueUp=1; Up=1; Dn=0; Hi=cur; Lo=cur-Step; }; if cur < (Lo-Step) then { if Up = 1 then { // direction changed - SELL signal ValueUp=0; }; // ValueDn=ValueDn+1; ValueDn=1; Up=0; Dn=1; Hi=cur+Step; Lo=cur; }; setIndexValue(CurrentBar, ValueUp); setIndexValue2(CurrentBar, -ValueDn); loopbegin = loopbegin-1; // prevent to previous bars recounting };