bramdc 6 posts msg #114904 - Ignore bramdc |
8/16/2013 1:56:57 AM
Dear all,
I came across an interesting indicator, namely the 'TAT' indicator, combining MACD and parabolic SAR,
anyone having good skills to translate this to stockfetcher?
I have pasted the code here below:
thanks!
-------------------------------------------
indicator TAT;
input
macd_fast_period = 12,
macd_slow_period = 26,
macd_signal_period = 9,
sar_step = 0.02,
sar_maximum = 0.2,
tat_macd_multiplier = 66.67,
tat_sar_multiplier = 6.67,
tat_signal_period = 12,
overbought_level = 1,
oversold_level = -1;
draw
tat_main("TAT", solid_line, green),
tat_sig("TAT Signal", solid_line, red),
ob("Overbought level", dash_line, white),
os("Oversold level", dash_line, white),
zero("Zero", dash_line, white);
vars
islong(bool),
af(number),
extreme(number),
s(number),
sar(series),
i(number),
macd_main(series),
macd_sig(series),
tat_sar(number),
tat_macd(number);
begin
if macd_fast_period < 1 or macd_slow_period < 1 or macd_signal_period < 1 or tat_signal_period < 1 or back(close) < front(close) then
return;
macd_main := ema(close, macd_fast_period) - ema(close, macd_slow_period);
macd_sig := ema(macd_main, macd_signal_period);
islong := true;
af := sar_step;
extreme := high[front(close)];
s := low[front(close)];
sar[front(close)] := s;
for i := front(close) + 1 to back(close) do begin
s := s + af * (extreme - s);
if islong then
if low[i] < s then begin
islong := false;
af := sar_step;
s := extreme;
extreme := low[i];
end else begin
if extreme < high[i] then begin
extreme := high[i];
af := af + sar_step;
if af > sar_maximum then
af := sar_maximum;
end;
end
else
if high[i] > s then begin
islong := true;
af := sar_step;
s := extreme;
extreme := high[i];
end else begin
if extreme > low[i] then begin
extreme := low[i];
af := af + sar_step;
if af > sar_maximum then
af := sar_maximum;
end;
end;
sar[i] := s;
end;
for i := front(close) to back(close) do begin
tat_sar := 0;
tat_macd := 0;
if sar[i] <> 0 then
tat_sar := (close[i] - sar[i]) / sar[i];
if close[i] <> 0 then
tat_macd := (macd_main[i] - macd_sig[i])/ close[i];
tat_main[i] := 50*(tat_sar*tat_sar_multiplier + tat_macd*tat_macd_multiplier);
zero[i] := 0;
ob[i] := overbought_level;
os[i] := oversold_level;
end;
tat_sig := ema(tat_main, tat_signal_period);
end.
|