//+------------------------------------------------------------------+ //| 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); } //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; //---- pos=Bars-counted_bars; //---- 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) { Under_Resistance=1; } else { Under_Resistance=-1; } //Calculate the 1st action if(O < H && 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(O < S2) RevRate=S2; } //Calculate the Max Loss if(action2==1) MaxLoss=O - S; if(action2==-1) MaxLoss=R - O; if(action1==-1) MaxLoss=R2 - O; if(action1==1) MaxLoss=O - S2; if(action3==1) { if(O<=R2) MaxLoss=O - H; if(O > R2) 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"); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: