//+------------------------------------------------------------------+ //| Hi-Lo.mq4 | //| | //| Ramdass - Conversion only | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue //---- input parameters extern int Per=3; extern int CountBars=300; extern string period=""; extern int symbol=255; //---- buffers double Up[]; double Down[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ string iname = ""; string isymbol = ""; int iperiod = 0; int window = -1; int init(){ //---- indicator line IndicatorBuffers(2); SetIndexStyle(0,DRAW_SECTION,0,3); SetIndexEmptyValue(0,0.0); SetIndexBuffer(0,Up); SetIndexStyle(1,DRAW_ARROW); SetIndexEmptyValue(1,0.0); SetIndexBuffer(1,Down); //---- IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2); //---- switch(symbol){ case 0: isymbol = "EURUSD";break; case 1: isymbol = "USDJPY";break; case 2: isymbol = "USDCHF";break; case 3: isymbol = "GBPUSD";break; case 4: isymbol = "USDCAD";break; case 5: isymbol = "AUDUSD";break; case 6: isymbol = "EURJPY";break; case 7: isymbol = "EURGBP";break; case 8: isymbol = "EURCHF";break; case 9: isymbol = "GBPCHF";break; case 10: isymbol = "GBPJPY";break; case 11: isymbol = "CHFJPY";break; case 12: isymbol = "AUDJPY";break; case 13: isymbol = "EURCAD";break; default: isymbol = Symbol();break; } iperiod = Period(); if(period=="M1") iperiod = PERIOD_M1; else if(period=="M5") iperiod = PERIOD_M5; else if(period=="M15") iperiod = PERIOD_M15; else if(period=="M30") iperiod = PERIOD_M30; else if(period=="H1") iperiod = PERIOD_H1; else if(period=="H4") iperiod = PERIOD_H4; else if(period=="D1") iperiod = PERIOD_D1; else if(period=="W1") iperiod = PERIOD_W1; else if(period=="MN1") iperiod = PERIOD_MN1; else period = Period(); iname = "aLines_"+isymbol+"_"+period; IndicatorShortName(iname); ArrayInitialize(Up,0); return(0); } void delete_lines(int len){ string buff_str = ""; for(int i=0;i<len;i++){ buff_str = "Line_"+i; ObjectDelete(buff_str); } buff_str = "Mark_Cross"; ObjectDelete(buff_str); } void place_mark(int x,double price){ string buff_str = "Mark_Cross"; if(ObjectFind(buff_str)==-1){ if(!ObjectCreate(buff_str, OBJ_ARROW, window, Time[x], price)) Print("Error"); ObjectSet(buff_str,OBJPROP_COLOR,Red); } else{ ObjectSet(buff_str,OBJPROP_TIME1,Time[x]); ObjectSet(buff_str,OBJPROP_PRICE1,price); } } void create_line(int line,int from,int to,color c,bool down,double p0,double p1,int long){ string buff_str = "Line_"+line; if(down){ if(!ObjectCreate(buff_str, OBJ_TREND, window, Time[from], p0, Time[to], p1)) Print("Error"); } else{ if(!ObjectCreate(buff_str, OBJ_TREND, window, Time[from], p0, Time[to], p1)) Print("Error"); } 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_SOLID); } int deinit(){ delete_lines(7); return (0); } int last_bar = 0; /* y4*(x3-x1) - x4*(y3-y1) u = --------------------------------- y4*x2 - x4*y2 y2*(x3-x1) - x2*(y3-y1) v = --------------------------------- y4*x2 - x4*y2 y = m*x + b b = y - m*x m = (y-b) / x y1 - m*x1 = y2 - m*x2 y1-y2 = m*x1 - m*x2 = m*(x1 - x2) m = (y1-y2) / (x1 - x2) --------------------- m = (y2-y1) / (x2-x1) b = y1 - m*x1 */ bool get_line_collusion2(double &p[][],int a,int b,int c,int d,int v){ double m1,b1,m2,b2; m1 = (p[a][1] - p[b][1]) / (p[a][0]-p[b][0]); //m1 = (p[b][1] - p[a][1]) / (p[b][0]-p[a][0]); b1 = p[a][1] - m1*p[a][0]; m1 = (p[c][1] - p[d][1]) / (p[c][0]-p[d][0]); //m2 = (p[d][1]-p[c][1]) / (p[d][0]-p[c][0]); b2 = p[c][1] - m1*p[c][0]; double d_ = (m1-m2); if(d_!=0.0){ p[v][0] = (b2-b1) / d_; p[v][1] = m1*p[v][0] + b1; return (true); } return (false); } void get_line_collusion(double &p[][],int a,int b,int c,int d,int v){ double ta,d_; d_ = ((p[d][1] - p[c][1])*(p[b][0] * p[a][0]) - (p[d][0] - p[c][0])*(p[b][1] * p[a][1])); if(d_!=0.0){ ta = ((p[d][0]-p[c][0])*(p[a][1]-p[c][1]) - (p[d][1]-p[c][1])*(p[a][0]-p[c][0])) / d_; p[v][0] = p[a][0]+(p[b][0]-p[a][0])*ta; p[v][1] = p[a][1]+(p[b][1]-p[a][1])*ta; } } //+------------------------------------------------------------------+ //| Hi-Lo | //+------------------------------------------------------------------+ void get_point_on_line(double &p[][],int a,int b,int v){ double m1,b1,m2,b2; m1 = (p[a][1] - p[b][1]) / (p[a][0]-p[b][0]); b1 = p[a][1] - m1*p[a][0]; p[v][1] = m1 * p[v][0] + b1; } double last_time = 0; int start(){ if(window==-1){ window = WindowFind(iname); } SetIndexDrawBegin(0,Bars-CountBars+Per); SetIndexDrawBegin(1,Bars-CountBars+Per); last_bar = Bars; delete_lines(7); int point_arr[5]; double val_arr[5]; int i,counted_bars=IndicatorCounted(); int pi = 4,j = 0; while(j<last_bar && pi>=0){ Up[j] = 0; double gann = iCustom(isymbol,iperiod,"a_ZZ",last_bar,0,10,2,j); if(gann!=0.0){ point_arr[pi] = j; val_arr[pi] = gann; Up[j] = gann; pi--; } j++; } Up[0] = iClose(isymbol,PERIOD_M1,0); create_line(4,point_arr[0],point_arr[2],Green,false,val_arr[0],val_arr[2],100); create_line(5,point_arr[0],point_arr[3],Green,false,val_arr[0],val_arr[3],100); create_line(6,point_arr[1],point_arr[3],Green,false,val_arr[1],val_arr[3],100); /* double p[6][2]; for(i=0;i<5;i++){ p[i][0] = point_arr[i]; // x - time p[i][1] = val_arr[i]; // y - price } bool WW = ( p[1][1]>p[0][1] && p[2][1]<p[0][1] && p[3][1]>p[0][1] && p[3][1]<p[1][1] && p[4][1]<p[2][1] ) || ( p[1][1]<p[0][1] && p[2][1]>p[0][1] && p[3][1]<p[0][1] && p[3][1]>p[1][1] && p[4][1]>p[2][1] ); if(WW && get_line_collusion2(p,0,2,1,3,5)){ p[5][0] = p[4][0] - p[5][0]; get_point_on_line(p,0,2,5); int ct = p[4][0]; if(last_time==Time[ct]) return (0); place_mark(p[4][0],p[5][1]); last_time = Time[ct]; } */ ObjectsRedraw(); return(0); } //+------------------------------------------------------------------+
Sample
image not available
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_SECTION
Implements a curve of type DRAW_ARROW
Indicators Used:
Custom Indicators Used:
a_ZZ
Order Management characteristics:
Other Features: