fibocalc_V3

Download script
Author: Copyright � 2006,
fibocalc_V3

This script is designed to assist traders by automatically identifying key price levels based on the previous day's market activity and calculating potential entry points, stop-loss limits, and profit targets. It essentially acts as a visual roadmap for the current trading day.

Core Functionality

1. Data Tracking (Previous Day Analysis) The script monitors the historical data of the preceding trading day to capture four critical price points:

  • Day High: The highest price reached during the previous day.
  • Day Low: The lowest price reached during the previous day.
  • Day Open: The starting price of the previous day.
  • Day Close: The ending price of the previous day.

The tool automatically labels these levels on your chart, providing a clear reference for where the "action" happened in the past.

2. Automated Trade Scenarios Depending on where the current market price sits relative to the previous day's closing price, the script calculates two distinct types of setups:

  • Buy Scenarios (Bullish): If the current market price is above yesterday's close, the script identifies potential "Buy" zones. It uses mathematical ratios (Fibonacci-style logic) to determine an entry level, a protective stop-loss level, and three different profit target levels.
  • Sell Scenarios (Bearish): If the current market price is below yesterday's close, the script shifts its focus to identify "Sell" zones. It calculates corresponding entry points, stop-losses, and three profit targets based on a downward trend.

3. Risk Management and Validation One of the key features of this script is its built-in "Quality Control." For every calculated trade setup, the script automatically calculates a Risk/Reward Ratio for all three profit targets.

To ensure the trades are mathematically sound, the script checks if the reward is significantly higher than the risk. If the ratios meet specific requirements (greater than 2), it displays an "OK Trade" message in the corner of your screen. If the potential reward is too small compared to the risk, it will warn you with a "NO TRADE" message.

Visual Aids

To make this information easy to read at a glance, the script draws several dynamic lines on your chart:

  • Entry Lines: Clearly marked in Blue (Buy) or Red (Sell).
  • Stop-Loss Line: Marked in Orange-Red to show where to exit if the trade goes against you.
  • Profit Target Lines: Three distinct lines marked in Spring Green showing exactly where your first, second, and third targets are located.

Summary for the User

Instead of manually calculating complex price levels and checking risk ratios every time you want to enter a trade, this script does the "heavy lifting" for you. It looks at yesterday's performance, identifies the best places to enter today based on current trends, and tells you—in plain text on your screen—whether the potential trade is worth taking based on your risk-to-reward goals.

Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
fibocalc_V3
/*+------------------------------------------------------------------+
 | 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