//+------------------------------------------------------------------+
//|   TRO_SR_RR_X                                                    |
//|                                                                  | 
//|   Copyright � 2008, Avery T. Horton, Jr. aka TheRumpledOne       |
//|                                                                  |
//|   PO BOX 43575, TUCSON, AZ 85733                                 |
//|                                                                  |
//|   GIFTS AND DONATIONS ACCEPTED                                   | 
//|                                                                  |
//|   therumpledone@gmail.com                                        |  
//+------------------------------------------------------------------+ 

#property  copyright "Copyright � 2008, Avery T. Horton, Jr. aka TRO" 
#property  link      "http://www.therumpledone.com/" 

#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Silver

//---- input parameters 


bool UseBias     = true ;

extern int  myBiasPeroid      = 1440 ;
extern string myOpenHHMM      = "14:00"; // 05:00 am pst = 14:00 server time 
extern int       myBars       = 21 ;


 int       myShift      = 1 ;
 int       myRR         = 1.5 ;


double     SignalBuffer[];

 double    iLevel1=0.24; 
 double    iLevel2=0.382; 
 double    iLevel3=0.5; 
 double    iLevel4=0.618; 
 double    iLevel5=0.76; 



//---- buffers

double    myUpper      = 0 ; 
double    myLower      = 0 ;
double    myWindow     = 0 ;

int i;
  
double R1, R2, R3 ;  

double X05 ;
double X06 ;   
double X07 ;
double X08, XRN ; 
double xRet ;
double xRetPct;    
  
string symbol,tChartPeriod ; 


double range  ;
double DynR; 
double DynS;  
datetime StartTime;
int digits,period ;

double Entry, work, goShort = 0, goLong = 0, reward = 0, risk = 0, ratio = 0, pHigh, pLow, pClose, LgTrigger, ShTrigger, pivot ;
double hipv, pvlo, pvpct, fibpct, ShortPL, LongPL, point, close, MaxRatio = 0, MaxReward = 0,MaxRisk = 0;

double Bias_Open, Bias_Close, Bias_High, Bias_Low, Bias_Diff, Bias_Mid, Bias_Pivot ;

string BiasMsg, tBiasPeroid ;

bool long = false , short = false ;

bool Bias_Long = false , Bias_Short = false ;


bool OKtoLong   = false ;
bool OKtoShort  = false ; 

bool xAutoCalc = true;
int nHH, nLL; 

 
color  ColorShortPL = Yellow, ColorLongPL = Yellow, ColorRatio = Yellow, ColorBias = Yellow ;

double xfb1; 
double xfb2; 
double xfb3; 
double xfb4; 
double xfb5; 

      
datetime Trigger ;      

//+------------------------------------------------------------------+
   
int init()
  {

  symbol       =  Symbol() ;
  period       =  Period() ;
  tChartPeriod =  TimeFrameToString(period ) ;

  
  tBiasPeroid = TimeFrameToString(period) ;
 
   SetIndexStyle(0,DRAW_HISTOGRAM); 
   SetIndexBuffer(0,SignalBuffer);


    
   return(0);
  }

//+------------------------------------------------------------------+
int deinit()
  {

       
   return(0);
  }

//+------------------------------------------------------------------+
int start()
{


  
/*   
Reward = Target Point - Entry Point = 1.9869-1.9782 = 87 pips

Risk= Entry Point - Stop Loss = 1.9782 - 1.9747 = 35pips

Risk to Reward Ratio = 87 / 35 = 1:2.5

*/


 
 close    =  iClose(symbol,period,0) ; 
 
 nHH      =  Highest(symbol,period,MODE_HIGH,myBars,myShift); 
 nLL      =  Lowest(symbol,period,MODE_LOW,myBars,myShift); 
 
 myUpper      = iHigh(symbol,period,nHH); 
 myLower      = iLow(symbol,period,nLL); 
  
 

 if( nHH < nLL ) { pClose = iClose(symbol,period,nHH); pHigh  = iHigh(symbol,period,nHH); pLow = iLow(symbol,period,nHH);} 
 else            { pClose = iClose(symbol,period,nLL); pHigh  = iHigh(symbol,period,nLL); pLow = iLow(symbol,period,nLL);}  
 
 
      
   pivot  = ( pHigh + pLow + pClose ) / 3 ;
   pivot  =  NormalizeDouble(pivot,4) ;
   hipv   = myUpper - pivot ;
   pvlo   = pivot - myLower ;
 
   work   = MathMin(hipv, pvlo)  ;
 
   goLong  = myLower + work ;
   goLong  = NormalizeDouble(goLong, 4) ;
   
   goShort = myUpper - work ;    
   goShort = NormalizeDouble(goShort, 4) ; 
 
/*        
   reward   = myUpper - goLong ;
   risk     = goLong - myLower ;
   
   if(risk != 0) { ratio = reward / risk ; } else { ratio = -999 ; } 
   
   range    = myUpper -  myLower ;
   
   if(range != 0) { pvpct = work / ( range ) ; } else { pvpct = -999 ; } 
 


   if(ratio  > myRR   )   { ColorRatio = Green ; } else  { ColorRatio = Red ; }
   
   if(ratio  > MaxRatio)  { MaxRatio  = ratio ; }
   
   if(reward > MaxReward) { MaxReward = reward ; }
   
   if(risk   > MaxRisk)   { MaxRisk   = risk ; }
 
 */      
   
//------------   

int   yy = TimeYear(Time[0]);
int   mm = TimeMonth(Time[0]);
int   dd = TimeDay(Time[0]);  
   
string  yymmddms = yy+"."+mm+"."+dd+" " + myOpenHHMM ;
         
datetime var1 = StrToTime(yymmddms);  
  
  
datetime day  = 24*60*60;
datetime   r  = var1 ;


int   cd = iBarShift(symbol,period,r,FALSE);
 
datetime r2=r-day;


if(TimeDayOfWeek(r2)==0) r2=r2-day-day;
int cd2=iBarShift(symbol,period,r2,FALSE);

if( var1 > Time[0] ) { r = r2 ;cd = cd2 ;} // if date/time is greater than current date/time go back 1 day


//------------
OKtoLong   = false ;
OKtoShort  = false ; 

Bias_Long  = false ; 
Bias_Short = false ;

 Bias_Close   = iClose(symbol,myBiasPeroid,0) ; 

 Bias_High    = iHigh(symbol,myBiasPeroid,1) ; 
 Bias_Low     = iLow(symbol,myBiasPeroid,1) ;
 

 if( myBiasPeroid == 1440 ) {Bias_Open = iOpen(symbol,period,cd) ; } else {Bias_Open = iOpen(NULL,myBiasPeroid,0) ; } 

  
 Bias_Diff    = Bias_Close - Bias_Open ;
 
 Bias_Mid     = ( Bias_High + Bias_Low ) * 0.50 ;
 Bias_Mid     = NormalizeDouble( Bias_Mid , digits ) ;
 
 Bias_Pivot   = ( Bias_High + Bias_Low + Bias_Close ) * 0.33333 ; 
 Bias_Pivot   = NormalizeDouble( Bias_Pivot , digits ) ; 
 
    
  
   if( Bias_Diff > 0 && Bias_Close > Bias_Mid ) { Bias_Long  = true ; SignalBuffer[0] = 2;  BiasMsg = "UP STRONG" ; ColorBias = Green   ; } else 
   if( Bias_Diff > 0 && Bias_Close < Bias_Mid ) { Bias_Long  = true ; SignalBuffer[0] = 1;  BiasMsg = "Up Weak" ;   ColorBias = Green   ; } else    
   if( Bias_Diff < 0 && Bias_Close < Bias_Mid  ){ Bias_Short = true ; SignalBuffer[0] = -2; BiasMsg = "DN STRONG" ; ColorBias = Red     ; } else 
   if( Bias_Diff < 0 && Bias_Close > Bias_Mid  ){ Bias_Short = true ; SignalBuffer[0] = -1; BiasMsg = "Dn Weak" ;   ColorBias = Red ; } else    
                                                {                     SignalBuffer[0] = 0;  BiasMsg = "No Bias" ;   ColorBias = Gray; }
                                                
   if( (UseBias && Bias_Long)  || !UseBias ) { OKtoLong  = true ; }                                                                                 
   if( (UseBias && Bias_Short) || !UseBias ) { OKtoShort = true ; }  
                                                   
  
         
   LongPL   = 0 ;
   ShortPL  = 0 ;   
   

        
   if( OKtoLong && MarketInfo(symbol,MODE_ASK)  == goLong  && goLong  > iLow(symbol,period,0) ) 
   { 
      long  = true; 
      short = false ; 
            
      if( Trigger != Time[0] )
      { 
         Trigger = Time[0] ;  
         SignalBuffer[0] = 3; 
      }
   }
        
 
  if( OKtoShort && MarketInfo(symbol,MODE_BID) == goShort && goShort < iHigh(symbol,period,0) )
  {  
      long = false; 
      short = true ;      
      
      if( Trigger != Time[0]  )
      {         
         Trigger = Time[0] ; 
         SignalBuffer[0] = -3; 
      }
  }     


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

string TimeFrameToString(int tf)
{
   string tfs;
   switch(tf) {
      case PERIOD_M1:  tfs="M1"  ; break;
      case PERIOD_M5:  tfs="M5"  ; break;
      case PERIOD_M15: tfs="M15" ; break;
      case PERIOD_M30: tfs="M30" ; break;
      case PERIOD_H1:  tfs="H1"  ; break;
      case PERIOD_H4:  tfs="H4"  ; break;
      case PERIOD_D1:  tfs="D1"  ; break;
      case PERIOD_W1:  tfs="W1"  ; break;
      case PERIOD_MN1: tfs="MN";
   }
   return(tfs);
}

//+------------------------------------------------------------------+ 

/*
  
Comment(

BiasMsg, "\n",
"OKtoShort = ",OKtoShort, "\n",
"OKtoLong = ",OKtoLong, "\n",

"symbol = ",symbol, "\n",
"period = ",period, "\n",
"myBiasPeroid = ",myBiasPeroid, "\n",
"SignalBuffer[0] = ",SignalBuffer[0], "\n",


"myUpper = ",DoubleToStr(myUpper,4), "\n",
"goShort = ",DoubleToStr(goShort,4), "\n",
"goLong = ",DoubleToStr(goLong,4), "\n",
"myLower = ",DoubleToStr(myLower,4), "\n",

"MarketInfo(symbol,MODE_ASK) = ",DoubleToStr(MarketInfo(symbol,MODE_ASK),4), "\n",
"MarketInfo(symbol,MODE_BID) = ",DoubleToStr(MarketInfo(symbol,MODE_BID),4), "\n",

"iHigh(symbol,period,0) = ",DoubleToStr(iHigh(symbol,period,0),4), "\n",
"iLow(symbol,period,0) = ",DoubleToStr(iLow(symbol,period,0),4), "\n",

"Bias_Open = ",Bias_Open, "\n", 

"") ;   
        
   
Comment(
"SignalBuffer[0] = ", DoubleToStr( SignalBuffer[0], 4), "\n",

"") ; 

Comment(
"goLong = ", DoubleToStr( goLong, Digits), "\n",
"goShort = ", DoubleToStr( goShort, Digits), "\n",
"close = ", DoubleToStr( close, Digits), "\n",
"LongPL = ", DoubleToStr( LongPL, Digits), "\n",
"ShortPL = ", DoubleToStr( ShortPL, Digits), "\n",
"") ;



Comment(
"myUpper = ", DoubleToStr( myUpper, Digits), "\n",
"myLower = ", DoubleToStr( myLower, Digits), "\n",
"reward = ", DoubleToStr( reward, Digits), "\n",
"risk = ", DoubleToStr( risk, Digits), "\n",
"ratio = ", DoubleToStr( ratio, Digits), "\n",
"pivot = ", DoubleToStr( pivot, Digits), "\n",
"") ; 


      
*/