Author: Copyright � 2006,
fibocalc

This tool is designed for traders who want to simplify their technical analysis by automatically identifying key price levels and potential trade setups based on the previous day's market activity. Instead of manually calculating complex figures, the script scans historical data to provide real-time visual cues on your trading chart.

Core Functionality

Previous Day Data Tracking The primary role of the script is to identify four specific benchmarks from the preceding trading day:

  • The highest price reached (Day High)
  • The lowest price reached (Day Low)
  • The opening price
  • The closing price

The script automatically detects when a new day begins and updates these values, drawing them clearly on your chart so you can see where the market boundaries were set in the previous session.

Dynamic Trade Level Generation Beyond just showing old data, the script uses mathematical logic (based on Fibonacci-style proportions) to project potential entry and exit points for the current day. It analyzes the current price relative to the previous day's range and categorizes the market into two primary scenarios:

  1. Buy Opportunities: If the current price is trading above the previous close, the script identifies a potential "Buy Level," calculates a specific "Stop Loss" area to protect your capital, and projects three different "Profit Target" levels.
  2. Sell Opportunities: If the current price is trading below the previous close, the script mirrors this logic to identify a "Sell Level," a corresponding "Stop Loss," and three "Profit Target" points.

Visual Aids & Risk Management

To make these calculations actionable for a human trader, the script provides several visual enhancements:

  • On-Chart Labeling: It draws horizontal lines on your chart representing your potential entry points, stop losses, and profit targets. These are color-coded (e.g., Blue for Buy levels, Red/Orange for Sells and Stop Losses, and Spring Green for Profits) to allow for quick at-a-glance reading.
  • Risk/Reward Analysis: The script doesn't just give you numbers; it performs a "Quality Check." It calculates the Risk-to-Reward ratio for all three profit targets.
  • Trade Validation: Using an on-screen comment box, the tool tells you whether a trade is "OK" or "NO TRADE." It does this by checking if your potential profit targets offer at least a 2:1 reward-to-risk ratio. If the math doesn't support a high enough return for the risk taken, it alerts you that the trade is not viable.

User Experience

The logic is designed to be "set and forget." By handling the heavy lifting of identifying previous day extremes and calculating precise decimal points for entries and exits, it allows you to focus on market sentiment while the tool handles the geometry of the trade.

Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
fibocalc
/*+------------------------------------------------------------------+
 | fibo
 | Author: Copyright © 2006, 
 | 
 | 
 +------------------------------------------------------------------+*/
#property copyright "Copyright © 2006,"
#property link    "mail: " 

#property indicator_chart_window
#property indicator_buffers 4

#property indicator_color1 DarkGreen
#property indicator_color2 Maroon
#property indicator_color3 Yellow
#property indicator_color4 Goldenrod


//---- input parameters

//---- buffers

double PrevDayHiBuffer[];
double PrevDayLoBuffer[];
double PrevDayOpenBuffer[];
double PrevDayCloseBuffer[];


int fontsize=8;
double PrevDayHi, PrevDayLo, PrevDayOpen , PrevDayClose,fb,fs,fe,tp1,tp2,tp3;
double LastHigh,LastLow,LastOpen,LastClose,x;
double ri,re1,re2,re3,ra1,ra2,ra3;




//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here

   
   ObjectDelete("PrevDayHi");
   ObjectDelete("PrevDayLo"); 
   ObjectDelete("PrevDayOpen");
   ObjectDelete("PrevDayClose");
   ObjectsDeleteAll();
  
//
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
   string short_name;


//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);

   

  
   SetIndexBuffer(0, PrevDayHiBuffer);
   SetIndexBuffer(1, PrevDayLoBuffer);
   SetIndexBuffer(2, PrevDayOpenBuffer);
   SetIndexBuffer(3, PrevDayCloseBuffer);

   


//---- name for DataWindow and indicator subwindow label
   short_name="Prev Hi-Lo levels";
   IndicatorShortName(short_name);
   SetIndexLabel(0, short_name);

//----
   SetIndexDrawBegin(0,1);
//----
 

//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
Refresh();

   int    counted_bars=IndicatorCounted();

   int limit, i;
//---- indicator calculation
if (counted_bars==0)
{
   x=Period();
   if (x>240) return(-1);
   ObjectCreate("PrevDayHi", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("PrevDayHi", "                Day High",fontsize,"Arial", White);
   ObjectCreate("PrevDayLo", OBJ_TEXT, 0, 0, 0);   
   ObjectSetText("PrevDayLo", "                Day Low",fontsize,"Arial", White); 
   ObjectCreate("PrevDayOpen", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("PrevDayOpen", "                Prev. Day Open",fontsize,"Arial", White);
   ObjectCreate("PrevDayClose", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("PrevDayClose", "                Prev. Day Close",fontsize,"Arial", White);
    
   //---- last counted bar will be recounted
//   if(counted_bars>0) counted_bars--;
} 
  limit=(Bars-counted_bars)-1;



for (i=limit; i>=0;i--)
{ 

LastHigh=High[Highest(NULL,0,MODE_HIGH,i+1)];
LastLow=Low[Lowest(NULL,0,MODE_LOW,i+1)];
if (Open[i+1]>LastOpen) LastOpen=Open[i+1];

//Print("TimeDay(Time[i]=",TimeDay(Time[i]),"TimeDay(Time[i+1])",TimeDay(Time[i+1]));
if (TimeDay(Time[i])!=TimeDay(Time[i+1]))
   { 
RefreshRates( ) ;

PrevDayHi=LastHigh;
PrevDayLo=LastLow;
PrevDayOpen=LastClose;
PrevDayClose=Open[i];
LastLow=Open[i];
LastHigh=Open[i];
LastOpen=Open[i];
LastClose=Open[i];
  
   ObjectMove("PrevDayHi", 0, Time[i], PrevDayHi);
   ObjectMove("PrevDayLo", 0, Time[i], PrevDayLo);
    ObjectMove("PrevDayOpen", 0, Time[i], PrevDayOpen);
    ObjectMove("PrevDayClose", 0, Time[i], PrevDayClose);


   }
   
    PrevDayHiBuffer[i]=PrevDayHi;
    PrevDayLoBuffer[i]=PrevDayLo;
    PrevDayOpenBuffer[i]=PrevDayOpen;
    PrevDayCloseBuffer[i]=PrevDayClose;
   
    
}
if (Ask > LastClose) {
fb= PrevDayHi-(PrevDayHi-PrevDayLo)*0.382;
fe= PrevDayHi-(PrevDayHi-PrevDayLo)*0.618;
tp1=((PrevDayHi-PrevDayLo)*0.618)+fb; 
tp2=(PrevDayHi-PrevDayLo)+fb;
tp3=1.618*(PrevDayHi-PrevDayLo)+fb;
ri=MathRound((+fb-fe)*10000)/10000;
re1=MathRound((+tp1-fb)*10000)/10000;
re2=MathRound((+tp2-fb)*10000)/10000;
re3=MathRound((+tp3-fb)*10000)/10000;
ra1=MathRound((+re1/ri)*10)/10;
ra2=MathRound((+re2/ri)*10)/10;
ra3=MathRound((+re3/ri)*10)/10;
RefreshRates( ) ;
ObjectCreate("fb", OBJ_TEXT, 0, Time[0], fb);
ObjectSetText("fb", " BUY LEVEL", 8, "Arial", EMPTY);
ObjectCreate("fb Line", OBJ_HLINE, 0, Time[0],fb);
ObjectSet("fb Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fb Line", OBJPROP_COLOR, Blue);
ObjectMove("fb",fb, Time[0], fb);

ObjectCreate("fe", OBJ_TEXT, 0, Time[0], fe);
ObjectSetText("fe", " STOPLOSS LEVEL", 8, "Arial", EMPTY);
ObjectCreate("fe Line", OBJ_HLINE, 0, Time[0],fe);
ObjectSet("fe Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fe Line", OBJPROP_COLOR,OrangeRed );
ObjectMove("fe",fe, Time[0], fe);

ObjectCreate("tp1", OBJ_TEXT, 0, Time[0], tp1);
ObjectSetText("tp1", " PROFIT TARGET 1", 8, "Arial", EMPTY);
ObjectCreate("tp1 Line", OBJ_HLINE, 0, Time[0],tp1);
ObjectSet("tp1 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp1 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp1",tp1, Time[0],tp1 );

ObjectCreate("tp2", OBJ_TEXT, 0, Time[0], tp2);
ObjectSetText("tp2", " PROFIT TARGET 2", 8, "Arial", EMPTY);
ObjectCreate("tp2 Line", OBJ_HLINE, 0, Time[0],tp2);
ObjectSet("tp2 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp2 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp2",tp2, Time[0],tp2);

ObjectCreate("tp3", OBJ_TEXT, 0, Time[0], tp3);
ObjectSetText("tp3", " PROFIT TARGET 3", 8, "Arial", EMPTY);
ObjectCreate("tp3 Line", OBJ_HLINE, 0, Time[0],tp3);
ObjectSet("tp3 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp3 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp3",tp3, Time[0],tp3);

if((ra1>2)&&(ra2>2)&&(ra3>2))
Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ","\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ," Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ," Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3," Risk/Reward Ratio : ", ra3 ," OK Trade ");
else 
Comment("Owner : ", AccountName()," Account number : ", AccountNumber(),"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was UP ","\nBUY @ ",fb ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ," Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ," Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3," Risk/Reward Ratio : ", ra3 ," NO TRADE ");

}
if (Bid < LastClose) {
fs=(PrevDayHi-PrevDayLo)*0.382+(PrevDayLo);
fe=(PrevDayHi-PrevDayLo)*0.618+(PrevDayLo);
tp1=((PrevDayLo-PrevDayHi)*0.618)+fs; 
tp2=(PrevDayLo-PrevDayHi)+fs;
tp3=1.618*(PrevDayLo-PrevDayHi)+fs;
ri=MathRound((+fs-fe)*10000)/10000;
re1=MathRound((+tp1-fs)*10000)/10000;
re2=MathRound((+tp2-fs)*10000)/10000;
re3=MathRound((+tp3-fs)*10000)/10000;
ra1=MathRound((+re1/ri)*10)/10;
ra2=MathRound((+re2/ri)*10)/10;
ra3=((+re3/ri)*10)/10;
RefreshRates( ) ;
ObjectCreate("fs", OBJ_TEXT, 0, Time[0], fs);
ObjectSetText("fs", " SELL LEVEL", 8, "Arial", EMPTY);
ObjectCreate("fs Line", OBJ_HLINE, 0, Time[0],fs);
ObjectSet("fs Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fs Line", OBJPROP_COLOR, Red);
ObjectMove("fs",fs, Time[0], fs);

ObjectCreate("fe", OBJ_TEXT, 0, Time[0], fe);
ObjectSetText("fe", " STOPLOSS LEVEL", 8, "Arial", EMPTY);
ObjectCreate("fe Line", OBJ_HLINE, 0, Time[0],fe);
ObjectSet("fe Line", OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSet("fe Line", OBJPROP_COLOR,OrangeRed );
ObjectMove("fe",fe, Time[0], fe);

ObjectCreate("tp1", OBJ_TEXT, 0, Time[0], tp1);
ObjectSetText("tp1", " PROFIT TARGET 1", 8, "Arial", EMPTY);
ObjectCreate("tp1 Line", OBJ_HLINE, 0, Time[0],tp1);
ObjectSet("tp1 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp1 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp1",tp1, Time[0],tp1 );

ObjectCreate("tp2", OBJ_TEXT, 0, Time[0], tp2);
ObjectSetText("tp2", " PROFIT TARGET 2", 8, "Arial", EMPTY);
ObjectCreate("tp2 Line", OBJ_HLINE, 0, Time[0],tp2);
ObjectSet("tp2 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp2 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp2",tp2, Time[0],tp2);

ObjectCreate("tp3", OBJ_TEXT, 0, Time[0], tp3);
ObjectSetText("tp3", " PROFIT TARGET 3", 8, "Arial", EMPTY);
ObjectCreate("tp3 Line", OBJ_HLINE, 0, Time[0],tp3);
ObjectSet("tp3 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("tp3 Line", OBJPROP_COLOR,SpringGreen );
ObjectMove("tp3",tp3, Time[0],tp3);


if((ra1>2)&&(ra2>2)&&(ra3>2))
Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ","\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ," Risk/Reward Ratio : ", ra1 ," OK Trade ","\nTakeProit 2 ",tp2 ," Risk/Reward Ratio : ", ra2 ," OK Trade ","\nTakeProit 3 ",tp3," Risk/Reward Ratio : ", ra3 ," OK Trade ");
else 
Comment("Owner : ", AccountName(),"Account number : ", AccountNumber(),"\n\nPrevDayHi ",PrevDayHi,"\nPrevDayLo ", PrevDayLo,"\nTrend was Down ","\nSELL @ ",fs ,"\nStopLoss ",fe,"\nTakeProit 1 ",tp1 ," Risk/Reward Ratio : ", ra1 ," NO TRADE ","\nTakeProit 2 ",tp2 ," Risk/Reward Ratio : ", ra2 ," NO TRADE ","\nTakeProit 3 ",tp3," Risk/Reward Ratio : ", ra3 ," NO TRADE ");


}

//----
   return(0);
  }
//+------------------------------------------------------------------+
void Refresh()   {
   ObjectDelete("PrevDayHi"); ObjectDelete("fe");ObjectDelete("fe Line");
   ObjectDelete("PrevDayLo"); ObjectDelete("fs");ObjectDelete("fs Line");
   ObjectDelete("PrevDayOpen");
   ObjectDelete("PrevDayClose");
   ObjectDelete("tp3");ObjectDelete("tp3 Line");
   ObjectDelete("tp2");ObjectDelete("tp2 Line");
   ObjectDelete("tp1");ObjectDelete("tp1 Line");
   ObjectDelete("fb");ObjectDelete("fb Line");}

														

Comments