Today Trend_v1
Download scriptThis script is designed to analyze market trends and provide specific trading signals (Buy or Sell) based on the price action of the previous day. It primarily focuses on identifying where the current day's opening price sits in relation to the high and low points of the prior trading session.
Core Logic Overview
The indicator operates by looking at the "Range" of the previous day—specifically its highest and lowest prices. It then divides this range into sections to determine the market's momentum. The logic is specifically designed to trigger only at the very beginning of a new trading day (00:00 hour).
How the Signals are Calculated
The script evaluates three different "Actions" or scenarios to decide on a trade direction:
- Action 1 (Proximity Check): It looks at whether the current open price is near the top or bottom of yesterday's range. If the price opens near the bottom, it favors a Buy; if it opens near the top, it favors a Sell.
- Action 2 (Resistance/Support Analysis): The script calculates a "Pivot" point (a specific internal level within the day's range). It then checks if the opening price is above or below this pivot and compares its distance to the high and low boundaries. This helps determine if the price is breaking out or finding resistance.
- Action 3 (Extreme Breakout): This looks for "Out of Bounds" movement. If the price opens completely above yesterday's high, it triggers a Buy signal; if it opens completely below yesterday's low, it triggers a Sell signal.
Decision Hierarchy
The script follows a priority system. It calculates all three actions mentioned above, but it prioritizes them in a specific order. If Action 3 (the extreme breakout) provides a signal, that takes precedence. If no extreme breakout is detected, it moves down the list to check Action 2, and finally Action 1. This ensures that significant breakouts are prioritized over minor price fluctuations within the range.
Visual Tools and Targets
Beyond just providing "Buy" or "Sell" arrows on the chart, the script provides two visual guides for trade management:
- Profit Target: Based on a user-defined point value, the script automatically projects a horizontal line showing where to take profits based on the opening price.
- Reversal/Stop Line: The script identifies a specific "Reversal Rate" based on the logic of the triggered action (usually the high or low of the previous day) and draws a line. This serves as a visual guide for where the trend might flip or where a stop-loss could be considered.
Summary for Users
In simple terms, this tool tells you: "Based on where the price opened today compared to yesterday's boundaries, what is the most likely direction of the move?" It then draws your target and your safety lines automatically so you can see your potential profit and risk levels at a glance.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 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;
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
O = Open[pos]; //current Period() bar's open
Spread = H - L;
Pivot = (Spread*2)/5;
R = H - Pivot;
S = L + Pivot;
//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;
//Calculate the Max Loss
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");
}
Comments