[MT4指标]FIBO_ZONE_mod
主图指标
附图指标,
mt4指标类型:趋势指标
是否能用在mt4手机版上:否
是否含有未来函数:无
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
extern int NumOfBars = 0;
int iwindow = 0;
string iname = \"Jackson Zones\";
int init(){
IndicatorShortName(iname);
return(0);
}
void place_text(string text,int x,double price,color c,int hwnd){
string buff_str = \"jack_\"+text+x+price;
//OBJ_LABEL
if(ObjectFind(buff_str)==-1){
ObjectCreate(buff_str, OBJ_TEXT, iwindow, Time[x], price);
}
//ObjectSet(buff_str,OBJPROP_COLOR,c);
ObjectSet(buff_str,OBJPROP_TIME1,Time[x]);
ObjectSet(buff_str,OBJPROP_PRICE1,price);
//ObjectSet(buff_str,OBJPROP_FONTSIZE,10);
ObjectSetText(buff_str,text,10,\"Arial\",c);
}
void create_rectangle(int id,int from,int to,color c,double p0,double p1,int long,int hwnd){
string buff_str = \"jack_\"+id;
ObjectCreate(buff_str, OBJ_RECTANGLE, hwnd, Time[from], p0, Time[to], p1);
ObjectSet(buff_str, OBJPROP_COLOR, c );
ObjectSet(buff_str, OBJPROP_RAY, long );
ObjectSet(buff_str, OBJPROP_STYLE, STYLE_DOT );
ObjectSet(buff_str, OBJPROP_BACK, true );
ObjectSet(buff_str, OBJPROP_WIDTH, 1 );
}
void create_line(int line,int from,int to,color c,double p0,double p1,int long,int hwnd,int style){
string buff_str = \"jack_\"+line;
ObjectCreate(buff_str, OBJ_TREND, hwnd, Time[from], p0, Time[to], p1);
ObjectSet(buff_str,OBJPROP_RAY,long);
ObjectSet(buff_str,OBJPROP_COLOR,c);
ObjectSet(buff_str,OBJPROP_XDISTANCE,100);
ObjectSet(buff_str,OBJPROP_YDISTANCE,100);
ObjectSet(buff_str,OBJPROP_STYLE,style);
ObjectSet(buff_str,OBJPROP_WIDTH,1);
}
void delete_obj(){
string buff_str = \"\";
for(int i=ObjectsTotal()-1;i>=0;i--){
buff_str = ObjectName(i);
if(StringFind(buff_str,\"jack_\",0)==0) ObjectDelete(buff_str);
}
}
int deinit(){
delete_obj();
return(0);
}
int last = 0,pbar = 0;
double C,D,B,A,E,SB1,SB2,RB1,RB2,R,o,c;
int fb_zone_stats[6][4];
int zone[6];
void update_table(int c){
int col[6] = {27,22,17,12,7,2};
int row[5] = {75,55,35,15,95};
place_text(\"Zones\" ,35,row[4] ,Black ,iwindow);
place_text(\">=RB2\" ,35,row[0] ,Red ,iwindow);
place_text(\">=RB1\" ,35,row[1] ,Maroon ,iwindow);
place_text(\"<=SB1\" ,35,row[2] ,OliveDrab ,iwindow);
place_text(\"<=SB2\" ,35,row[3] ,Green ,iwindow);
for(int i=1;i<7;i++){
color cl = Black;
if(i==c) cl = Blue;
place_text(i,col[i-1],row[4],cl,iwindow);
for(int j=0;j<4;j++)
if(zone[i-1]!=0)
place_text((fb_zone_stats[i-1][j]*100)/zone[i-1],col[i-1],row[j],cl,iwindow);
else
place_text(fb_zone_stats[i-1][j],col[i-1],row[j],cl,iwindow);
}
}
void draw_zones(int shift){
static int acc = 0;
create_rectangle(acc,pbar,shift,Pink,RB2,E,0,0); acc++;
create_line(acc,pbar,shift,Red,E,E,0,0,STYLE_SOLID); acc++;
create_rectangle(acc,pbar,shift,LightGreen,RB1,D,0,0); acc++;
create_line(acc,pbar,shift,Yellow,D,D,0,0,STYLE_SOLID); acc++;
create_line(acc,pbar,shift,Blue,C,C,0,0,STYLE_SOLID); acc++;
create_line(acc,pbar,shift,Yellow,B,B,0,0,STYLE_SOLID); acc++;
create_rectangle(acc,pbar,shift,Pink,B,SB1,0,0); acc++;
create_line(acc,pbar,shift,Red,A,A,0,0,STYLE_SOLID); acc++;
create_rectangle(acc,pbar,shift,Pink,A,SB2,0,0); acc++;
}
int start() {
iwindow = WindowFind(iname);
if(last == Bars) return (0);
last = Bars;
delete_obj();
int limit = NumOfBars;
if(limit==0 || limit>Bars) limit=Bars;
int b,l = 0;
for(int i=0;i<6;i++){
fb_zone_stats[0] = 0;
fb_zone_stats[1] = 0;
fb_zone_stats[2] = 0;
fb_zone_stats[3] = 0;
zone = 0;
}
for(i = limit-1;i>=0;i--){
b = iBarShift(NULL,PERIOD_D1,Time);
if(b!=l){
// draw zones
if(l!=0) draw_zones(i);
pbar = i;
l = b;
int b_ = TimeDayOfWeek(Time);
if(b_==1) b +=2; else b +=1;
double cl = iClose(NULL,PERIOD_D1,b);
double hi = iHigh(NULL,PERIOD_D1,b);
double lo = iLow(NULL,PERIOD_D1,b);
R = (hi-lo);
C = (cl+hi+lo) / 3;//PIVOT
E = C + 0.011;//PIVOT+RANGE
D = C + 0.004;//PIVOT+RANGE/2
// C
B = C - 0.004;
A = C - 0.011;
o = iOpen (NULL,PERIOD_D1,l);
c = iClose(NULL,PERIOD_D1,l);
int zo = 6;
if(o=D) zo = 5;
else if(o=C) zo = 4;
else if(o=B) zo = 3;
else if(o=A) zo = 2;
zone[zo]++;
RB2 = C + R * 1.382;
RB1 = C + R * 0.618;
SB1 = C - R * 0.618;
SB2 = C - R * 1.382;
if(c<=SB2) fb_zone_stats[zo][3]++;
if(c<=SB1) fb_zone_stats[zo][2]++;
if(c>=RB1) fb_zone_stats[zo][1]++;
if(c>=RB2) fb_zone_stats[zo][0]++;
}
}
update_table(zo);
// draw last zone levels
draw_zones(0);
return(0);
}
//+------------------------------------------------------------------+
发表于:2017-11-18 12:56只看该作者
3楼
灌水赚通宝,谢谢分享
韬客社区www.talkfx.co
发表于:2018-02-10 16:52只看该作者
4楼
韬客新版