fibocalc_V3_v1

Download script
Author: Copyright � 2006,
fibocalc_V3_v1

This tool is designed to provide traders with an automated visual analysis of price levels based on the previous day's market activity. It simplifies the process of identifying key support and resistance areas while automatically calculating potential entry, exit, and profit targets using mathematical ratios.

Core Functionality

Daily Data Tracking The script constantly monitors the trading history to identify three specific data points from the previous trading day:

  • The Highest Price reached.
  • The Lowest Price reached.
  • The Opening and Closing prices.

It then draws clear labels on your chart so you can see exactly where these "Previous Day" milestones were established.

Automatic Trade Level Calculations Once the script identifies the previous day's range (the distance between the High and the Low), it applies specific mathematical percentages to project new levels for the current session. The logic branches into two scenarios based on current market price action:

  • Buy Scenarios: If the current market price is trading above the previous day's close, the script calculates a "Buy Level," a "Stop Loss" level, and three distinct "Profit Target" levels.
  • Sell Scenarios: If the current market price is trading below the previous day's close, the script switches logic to calculate a "Sell Level," a "Stop Loss" level, and three corresponding "Profit Target" levels.

Visual Indicators and Feedback

To make this information easy to read at a glance, the script performs the following actions on your chart:

  • Dynamic Lines: It draws horizontal lines representing your Buy/Sell entry points (in Blue or Red), your Stop Loss (in Orange), and your three Profit Targets (in Green).
  • On-Screen Labels: Each line is accompanied by a text label (e.g., "PROFIT TARGET 1") so there is no ambiguity about what each price point represents.
  • Risk/Reward Analysis: This is a key feature of the logic. The script automatically calculates the Risk-to-Reward ratio for every profit target it generates.
  • Trade Validation: The script evaluates these ratios instantly. If the calculated risk is too high compared to the potential reward (specifically, if the ratio is less than 2), the tool will display a "NO TRADE" warning in the corner of your screen. If the math meets the requirements, it will display an "OK Trade" confirmation.

Summary for the User

Essentially, this script acts as an automated charting assistant. Instead of you having to manually calculate Fibonacci-style ratios and risk percentages every time the market opens, the script identifies the previous day's boundaries and instantly maps out a "blueprint" for your potential trades, complete with visual lines and a real-time audit of whether those trades are mathematically favorable.

Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
fibocalc_V3_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

/*+------------------------------------------------------------------+
 | fibo
 | Author: Copyright © 2006, 
 | 
 | 
 +------------------------------------------------------------------+*/
#property copyright "Copyright © 2006,"
#property link      "http://www.metaquotes.net"

#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");
   ObjectDelete("fe");ObjectDelete("fe Line");
   ObjectDelete("fs");ObjectDelete("fs Line");
   ObjectDelete("tp3");ObjectDelete("tp3 Line");
   ObjectDelete("tp2");ObjectDelete("tp2 Line");
   ObjectDelete("tp1");ObjectDelete("tp1 Line");
   ObjectDelete("fb");ObjectDelete("fb Line");
  //   ObjectsDeleteAll();
//  Not a good idea to use ObjectDeleteAll function.
// It will delete ALL object on the chart
// not just the ones created by this indicator
//
//----
   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() {

   int    counted_bars=IndicatorCounted();

   int limit, i;
//---- indicator calculation
   if (counted_bars==0)
   {
      x=Period();
      if (x>240) return(-1);
    
   //---- 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];
  
       if(ObjectFind("PrevDayHi") != 0)
       {
          ObjectCreate("PrevDayHi", OBJ_TEXT, 0, 0, 0);
          ObjectSetText("PrevDayHi", "                Day High",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayHi", 0, Time[i], PrevDayHi);
       }
   
       if(ObjectFind("PrevDayLo") != 0)
       {
         ObjectCreate("PrevDayLo", OBJ_TEXT, 0, 0, 0);   
         ObjectSetText("PrevDayLo", "                Day Low",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayLo", 0, Time[i], PrevDayLo);
       }
    
       if(ObjectFind("PrevDayOpen") != 0)
       {
         ObjectCreate("PrevDayOpen", OBJ_TEXT, 0, 0, 0);
         ObjectSetText("PrevDayOpen", "                Prev. Day Open",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayOpen", 0, Time[i], PrevDayOpen);
       }
   
       if(ObjectFind("PrevDayClose") != 0)
       {
         ObjectCreate("PrevDayClose", OBJ_TEXT, 0, 0, 0);
         ObjectSetText("PrevDayClose", "                Prev. Day Close",fontsize,"Arial", White);
       }
       else
       {
         ObjectMove("PrevDayClose", 0, Time[i], PrevDayClose);
       }
   
     }
   
     PrevDayHiBuffer[i]=PrevDayHi;
     PrevDayLoBuffer[i]=PrevDayLo;
     PrevDayOpenBuffer[i]=PrevDayOpen;
     PrevDayCloseBuffer[i]=PrevDayClose;
    
   }
   
// BUY
   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( ) ;
     if(ObjectFind("fb") != 0)
     {
        ObjectCreate("fb", OBJ_TEXT, 0, Time[0], fb);
        ObjectSetText("fb", " BUY LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fb",fb, Time[0], fb);
     }
     if(ObjectFind("fb Line") != 0)
     {
        ObjectCreate("fb Line", OBJ_HLINE, 0, Time[0],fb);
        ObjectSet("fb Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fb Line", OBJPROP_COLOR, Blue);
     }
     else
     {
        ObjectMove("fb Line",0, Time[0], fb);
     }


     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 ");

   }

// SELL
   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( ) ;
     if(ObjectFind("fs") != 0)
     {
        ObjectCreate("fs", OBJ_TEXT, 0, Time[0], fs);
        ObjectSetText("fs", " SELL LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fs",fs, Time[0], fs);
     }
     if(ObjectFind("fs Line") != 0)
     {
        ObjectCreate("fs Line", OBJ_HLINE, 0, Time[0],fs);
        ObjectSet("fs Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fs Line", OBJPROP_COLOR, Red);
     }
     else
     {
        ObjectMove("fs Line",0, Time[0], fs);
     }


     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 ");


   }
     if(ObjectFind("fe") != 0)
     {
        ObjectCreate("fe", OBJ_TEXT, 0, Time[0], fe);
        ObjectSetText("fe", " STOPLOSS LEVEL", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("fe",fe, Time[0], fe);
     }
     if(ObjectFind("fe Line") != 0)
     {
        ObjectCreate("fe Line", OBJ_HLINE, 0, Time[0],fe);
        ObjectSet("fe Line", OBJPROP_STYLE, STYLE_DASHDOT);
        ObjectSet("fe Line", OBJPROP_COLOR,OrangeRed );
     }
     else
     {
        ObjectMove("fe Line",0, Time[0], fe);
     }

     if(ObjectFind("tp1") != 0)
     {
        ObjectCreate("tp1", OBJ_TEXT, 0, Time[0], tp1);
        ObjectSetText("tp1", " PROFIT TARGET 1", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp1",tp1, Time[0],tp1 );
     }

     if(ObjectFind("tp1 Line") != 0)
     {
        ObjectCreate("tp1 Line", OBJ_HLINE, 0, Time[0],tp1);
        ObjectSet("tp1 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp1 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp1 Line",0, Time[0],tp1 );
     }

     if(ObjectFind("tp2") != 0)
     {
        ObjectCreate("tp2", OBJ_TEXT, 0, Time[0], tp2);
        ObjectSetText("tp2", " PROFIT TARGET 2", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp2",tp2, Time[0],tp2);
     }
     if(ObjectFind("tp2 Line") != 0)
     {
        ObjectCreate("tp2 Line", OBJ_HLINE, 0, Time[0],tp2);
        ObjectSet("tp2 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp2 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp2 Line",0, Time[0],tp2);
     }

     if(ObjectFind("tp3") != 0)
     {
        ObjectCreate("tp3", OBJ_TEXT, 0, Time[0], tp3);
        ObjectSetText("tp3", " PROFIT TARGET 3", 8, "Arial", EMPTY);
     }
     else
     {
        ObjectMove("tp3",tp3, Time[0],tp3);
     }
     if(ObjectFind("tp3 Line") != 0)
     {
        ObjectCreate("tp3 Line", OBJ_HLINE, 0, Time[0],tp3);
        ObjectSet("tp3 Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
        ObjectSet("tp3 Line", OBJPROP_COLOR,SpringGreen );
     }
     else
     {
        ObjectMove("tp3 Line",0, Time[0],tp3);
     }

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

Comments