//+------------------------------------------------------------------+ //| Today Trend.mq4 | //| Copyright © 2006, Jason Rivera | //| http://www.jasonerivera.com | //+------------------------------------------------------------------+ // Based on an excel spreadsheet posted by toro55 @ // http://www.strategybuilderfx.com/forums/showthread.php?s=&threadid=16130 // Posted for the benefit of those at the StrategyBuilder // community. #property copyright "Copyright © 2006, Jason Rivera" #property link "http://www.jasonerivera.com" //---- #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 YellowGreen #property indicator_color4 Red //----External Variables extern int PROFIT_TARGET=30; extern bool SHOW_TARGET=true; extern bool SHOW_REVERSAL=true; //---- buffers double UpBuffer[]; double DownBuffer[]; double TargetBuffer[]; double ReversalBuffer[]; //----variables double H=0,L=0,O=0,C=0,R=0,S=0,Pivot=0,Spread=0,RevRate=0,MaxLoss=0,max=0,draw=0; double S2,R2; int action=0,action1=0,action2=0,action3=0; int Under_Resistance=0; string res=""; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexLabel(0,"Go Long"); SetIndexLabel(1,"Go Short"); SetIndexLabel(2,"Profit Target Line"); SetIndexLabel(3,"Stop/Reversal Line"); SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1); SetIndexBuffer(0,UpBuffer); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1); SetIndexBuffer(1,DownBuffer); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1); SetIndexBuffer(2,TargetBuffer); SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1); SetIndexBuffer(3,ReversalBuffer); //---- SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); SetIndexEmptyValue(2,0); SetIndexEmptyValue(3,0); SetIndexArrow(0,236); SetIndexArrow(1,238); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //int counted_bars=IndicatorCounted(); int pos=0; int m=0; int d=0; int y=0; string dt=""; datetime some_time=0; int shift=0; int tc=1440; int min=0; int hr=0; int thour=0,tmin=0; //---- //script can only be run on daily chart or lower timeframe if(Period()>1440) { Print("Indicator must be run on Daily chart or lesser timeframe"); return(0); } int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; pos=Bars-counted_bars; if(counted_bars==0) pos-=1+1; //---- while(pos>=0) { m=TimeMonth(Time[pos]); d=TimeDay(Time[pos]); y=TimeYear(Time[pos]); min=TimeMinute(Time[pos]); hr=TimeHour(Time[pos]); dt=y + "." + m + "." + d + " " + hr + ":" + min; some_time=StrToTime(dt); //find the proper shift of the daily bar having the same date as this timeframe's bar having the current shift //we must do this in order to be able to run the indicator on smaller time frames in light of a bigger one shift=iBarShift(NULL,tc,some_time); //returns the correct shift of the current daily bar thour=TimeHour(iTime(NULL,60,iBarShift(NULL,60,some_time))); tmin=TimeMinute(iTime(NULL,Period(),pos)); //create price reference lines if(SHOW_REVERSAL==true) {ReversalBuffer[pos]=ReversalBuffer[pos+1];} if(SHOW_TARGET==true) {TargetBuffer[pos]=TargetBuffer[pos+1];} //only trade on Open of Day; check for hour 0 && minute 0 for intraday timeframes if(thour==0 && tmin==0) { H=iHigh(NULL,tc,shift+1); //previous daily bar's high L=iLow(NULL,tc,shift+1); //previous daily bar's low C=iClose(NULL,tc,shift+1); //previous daily bar's close O=Open[pos]; //current Period() bar's open //---- Spread=H-L; /* Pivot = (Spread*2)/5; R = H - Pivot; S = L + Pivot; */ Pivot=(H+L+C)/3; R=2*Pivot - L; S=2*Pivot - H; S2=Pivot - (R - S); R2=Pivot + (R-S); //reset Buy/Sell actions action1=0; action2=0; action3=0; Under_Resistance=0; //---- if(O R) action1=-1; //"Sell" if(O > L && O < S) action1=1; //"Buy" //Calculate the 2nd action if(Under_Resistance==1 &&(R-O) <(O-S)) action2=-1; //"Sell" if(Under_Resistance==1 && (R-O)>=(O-S)) action2=1; //"Buy" //Calculate the 3rd action if(O<=L) action3=-1; //"Sell" if(O>=H) action3=1; //"Buy" //Calculate the Reversal Rate /* if(action2 == 1) RevRate = L; if(action2 == -1) RevRate = H; if(action1 == -1) RevRate = H; if(action1 == 1) RevRate = L; if(action3 == 1) RevRate = H; if(action3 == -1) RevRate = L; */ if(action2==1) RevRate=S; if(action2==-1) RevRate=R; if(action1==-1) RevRate=R2; if(action1==1) RevRate=S2; if(action3==1) { if(O<=R2) RevRate=H; if(O>R2) RevRate=R2; } if(action3==-1) { if(O>=S2) RevRate=L; if(OR2) MaxLoss=O-R2; } if(action3==-1) { if(O<=R2) MaxLoss=L-O; if(O>R2) MaxLoss=S2-O; } /* if(action2 == 1) MaxLoss = O - L; if(action2 == -1) MaxLoss = H - O; if(action1 == -1) MaxLoss = H - O; if(action1 == 1) MaxLoss = O - L; if(action3 == 1) MaxLoss = O - H; if(action3 == -1) MaxLoss = L - O; */ if(action1!=0) action=action1; if(action2!=0) action=action2; if(action3!=0) action=action3; if(action==1)//buy { UpBuffer[pos]=O; //---- if(SHOW_TARGET==true) { TargetBuffer[pos+1]=0; //keep line from warping to next value; comment line to see on daily timeframe TargetBuffer[pos]=O+(PROFIT_TARGET*Point); } if(SHOW_REVERSAL==true) { ReversalBuffer[pos+1]=0; //keep line from warping to next value; comment line to see on daily timeframe ReversalBuffer[pos]=RevRate; } } if(action==-1)//sell { DownBuffer[pos]=O; //---- if(SHOW_TARGET==true) { TargetBuffer[pos+1]=0; //keep line from warping to next value; comment line to see on daily timeframe TargetBuffer[pos]=O -(PROFIT_TARGET*Point); } if(SHOW_REVERSAL==true) { ReversalBuffer[pos+1]=0; //keep line from warping to next value; comment line to see on daily timeframe ReversalBuffer[pos]=RevRate; } } } pos--; } Comment(ToString(action)," @ ",O); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string ToString(int action) { if(action==1) return("Buy"); if(action==-1) return("Sell"); if(action==0) return("No Action"); } //+------------------------------------------------------------------+