#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue#property indicator_level1 0
double Fisher[];
double Trigger[];
double Value1[];extern int Length = 10;
int buffers = 0;
int drawBegin = 0;int init() {
if (Length < 3) Length = 3;
drawBegin = Length;
initBuffer(Fisher, “Fisher”, DRAW_LINE);
initBuffer(Trigger, “Trigger”, DRAW_LINE);
initBuffer(Value1);
IndicatorBuffers(buffers);
IndicatorShortName(“Fisher Tranform [” + Length + “]”);
return (0);
}int start() {
if (Bars <= Length) return (0);
int countedBars = IndicatorCounted();
if (countedBars < 0) return (-1);
if (countedBars > 0) countedBars–;
int s, limit = Bars – countedBars – 1;
for (s = limit; s >= 0; s–) {
double price = P(s);
double MaxH = price;
double MinL = price;
for (int i = 0; i < Length; i++) {
price = P(s + i);
if (price > MaxH) MaxH = price;
if (price < MinL) MinL = price;
}
Value1[s] = 0.5 * 2.0 * ((P(s) – MinL) / (MaxH – MinL) – 0.5) + 0.5 * Value1[s + 1];
if (Value1[s] > 0.9999) Value1[s] = 0.9999;
if (Value1[s] < -0.9999) Value1[s] = -0.9999;
Fisher[s] = 0.25 * MathLog((1 + Value1[s]) / (1 – Value1[s])) + 0.5 * Fisher[s + 1];
Trigger[s] = Fisher[s + 1];
}
return (0);
}double P(int index) {
return ((High[index] + Low[index]) / 2.0);
}void initBuffer(double array[], string label = “”, int type = DRAW_NONE, int arrow = 0, int style = EMPTY, int width = EMPTY, color clr = CLR_NONE) {
SetIndexBuffer(buffers, array);
SetIndexLabel(buffers, label);
SetIndexEmptyValue(buffers, EMPTY_VALUE);
SetIndexDrawBegin(buffers, drawBegin);
SetIndexShift(buffers, 0);
SetIndexStyle(buffers, type, style, width);
SetIndexArrow(buffers, arrow);
buffers++;
}
相关资源
暂无评论...