A way for good trade

Dear Friend
Attached file could help everyone to trade in safe mode.

//±-----------------------------------------------------------------+
//| Bunnygirl Cross and Daily Open.mq4 |
//| Copyright � 2005-2006, David W. Thomas |
//|
//±-----------------------------------------------------------------+
#property copyright “Copyright � 2005-2006, David W. Thomas”
#property link “http://www.davidwt.com

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 DarkViolet
#property indicator_color2 Aqua
#property indicator_color3 Red
#property indicator_color4 Orange
#property indicator_color5 Aqua
#property indicator_color6 Red

//---- input parameters
extern int PipsForBounce=3;
extern int TimeZoneOfData=0;
extern int ma_method=MODE_LWMA;

//---- buffers
double DailyOpenBuffer[];
double BuyFilterBuffer[];
double SellFilterBuffer[];
double CrossBounceBuffer[];
double BuySymbolBuffer[];
double SellSymbolBuffer[];

//---- variables
int indexbegin = 0;
string mastrtype = “”;
double dailyopen = 0,
crossamount,
filter = 0;
datetime crosstime = 0;
bool crossdir = true;
bool FilterTradingTime = true;
int beginfiltertime = 0;
int endfiltertime = 24;

//±-----------------------------------------------------------------+
//| Custom indicator initialization function |
//±-----------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, DailyOpenBuffer);
SetIndexLabel(0, “Daily Open”);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, BuyFilterBuffer);
SetIndexLabel(1, “Buy Filter”);
SetIndexEmptyValue(1, 0.0);
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, SellFilterBuffer);
SetIndexLabel(2, “Sell Filter”);
SetIndexEmptyValue(2, 0.0);
SetIndexStyle(3, DRAW_LINE, STYLE_DOT);
SetIndexBuffer(3, CrossBounceBuffer);
SetIndexLabel(3, “Cross/Bounce”);
SetIndexEmptyValue(3, 0.0);
SetIndexStyle(4, DRAW_ARROW);
SetIndexArrow(4, 233);
SetIndexBuffer(4, BuySymbolBuffer);
SetIndexLabel(4, “Cross Up Symbol”);
SetIndexEmptyValue(4, 0.0);
SetIndexStyle(5, DRAW_ARROW);
SetIndexArrow(5, 234);
SetIndexBuffer(5, SellSymbolBuffer);
SetIndexLabel(5, “Cross Down Symbol”);
SetIndexEmptyValue(5, 0.0);
//----
indexbegin = Bars - 20;
if (indexbegin < 0)
indexbegin = 0;
if (Symbol() == “EURUSD”)
filter = 20 * Point;
else
filter = 25 * Point;
if (ma_method == MODE_EMA)
mastrtype = “EMA”;
else
mastrtype = “WMA”;
Print(" Cross of “, mastrtype, " with a filter of “, filter/Point, " pips.”);
if (FilterTradingTime)
{
beginfiltertime = 6 + TimeZoneOfData;
endfiltertime = 17 + TimeZoneOfData;
Print(” Only shows buy/sell filters from “, beginfiltertime, " to “, endfiltertime, " hours (chart time).”);
}
else
{
beginfiltertime = 0;
endfiltertime = 24;
Print(” Show buy/sell filters at all times.");
}

return(0);

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

//----
return(0);
}
//±-----------------------------------------------------------------+
//| Custom indicator iteration function |
//±-----------------------------------------------------------------+
int start()
{
int i;
int counted_bars = IndicatorCounted();
string crossdirstr = “”;

//---- check for possible errors
if (counted_bars &lt; 0) counted_bars = 0;
//---- last counted bar will be recounted
if (counted_bars &gt; 0) counted_bars--;
if (counted_bars &gt; indexbegin) counted_bars = indexbegin;

if (Period() == 30)
{
	double ma20c, ma20p1, ma20p2,
			 diff0, diff1, diff2;

	for (i = indexbegin-counted_bars; i &gt;= 0; i--)
	{
		if ((TimeMinute(Time[i]) == 0) && (TimeHour(Time[i]) - TimeZoneOfData == 0))
			dailyopen = Open[i];
		DailyOpenBuffer[i] = dailyopen;

		ma20c = iMA(NULL, PERIOD_M30, 20, 0, ma_method, PRICE_CLOSE, i);
		ma20p1 = iMA(NULL, PERIOD_M30, 20, 0, ma_method, PRICE_CLOSE, i+1);
		ma20p2 = iMA(NULL, PERIOD_M30, 20, 0, ma_method, PRICE_CLOSE, i+2);
		diff0 = iMA(NULL, PERIOD_M30, 5, 0, ma_method, PRICE_CLOSE, i) - ma20c;
		diff1 = iMA(NULL, PERIOD_M30, 5, 0, ma_method, PRICE_CLOSE, i+1) - ma20p1;
		diff2 = iMA(NULL, PERIOD_M30, 5, 0, ma_method, PRICE_CLOSE, i+2) - ma20p2;

		// bull signals:
		if (diff0 &gt; 0)
		{
			if (diff1 &lt; 0) // simple bull cross.
			{
				crossdir = true;
				// determine which bar is closer to the cross:
				if (MathAbs(diff0) &lt; MathAbs(diff1))
				{
					crosstime = Time[i];
					crossamount = ma20c;
				}
				else
				{
					crosstime = Time[i+1];
					crossamount = ma20p1;
				}
			}
			else
			if (diff1 == 0 && diff2 &lt; 0) // exact cross on last bar.
			{
				crossdir = true;
				crosstime = Time[i+1];
				crossamount = ma20p1;
			}
			else
			if (diff1 &gt; 0 && diff2 &gt; diff1 && diff0 &gt;= diff1 && diff1 &lt;= PipsForBounce*Point) // a bounce.
			{
				crossdir = true;
				crosstime = Time[i+1];
				crossamount = ma20p1;
			}
		}
		else
		// bear signals:
		if (diff0 &lt; 0)
		{
			if (diff1 &gt; 0) // simple bear cross.
			{
				crossdir = false;
				// determine which bar is closer to the cross:
				if (MathAbs(diff0) &lt; MathAbs(diff1))
				{
					crosstime = Time[i];
					crossamount = ma20c;
				}
				else
					crosstime = Time[i+1];
					crossamount = ma20p1;
				{
				}
			}
			else
			if (diff1 == 0 && diff2 &gt; 0) // exact cross on last bar.
			{
				crossdir = false;
				crosstime = Time[i+1];
				crossamount = ma20p1;
			}
			else
			if (diff1 &lt; 0 && diff2 &lt; diff1 && diff0 &lt;= diff1 && MathAbs(diff1) &lt;= PipsForBounce*Point) // a bounce.
			{
				crossdir = false;
				crosstime = Time[i+1];
				crossamount = ma20p1;
			}
		}
		CrossBounceBuffer[i] = crossamount;
		if (TimeHour(Time[i]) &gt;= beginfiltertime && TimeHour(Time[i]) &lt;= endfiltertime)
		{
			if (crossdir)
			{
				BuyFilterBuffer[i] = crossamount + filter + Ask - Bid;
				SellFilterBuffer[i] = 0;
				if (i &gt; 0 && BuyFilterBuffer[i] != BuyFilterBuffer[i+1])//crosstime == Time[i])
					BuySymbolBuffer[i] = BuyFilterBuffer[i] + 5*Point;
			}
			else
			{
				SellFilterBuffer[i] = crossamount - filter;
				BuyFilterBuffer[i] = 0;
				if (i &gt; 0 && SellFilterBuffer[i] != SellFilterBuffer[i+1])//crosstime == Time[i])
					SellSymbolBuffer[i] = SellFilterBuffer[i] - 5*Point;
			}
		}
		if (crosstime == Time[i+1] && TimeHour(Time[i+1]) &gt;= beginfiltertime && TimeHour(Time[i+1]) &lt;= endfiltertime)
		{
			CrossBounceBuffer[i+1] = crossamount;
			if (crossdir)
			{
				BuyFilterBuffer[i+1] = crossamount + filter + Ask - Bid;
				BuySymbolBuffer[i+1] = BuyFilterBuffer[i+1] + 5*Point;
				BuySymbolBuffer[i] = 0.0;
			}
			else
			{
				SellFilterBuffer[i+1] = crossamount - filter;
				SellSymbolBuffer[i+1] = SellFilterBuffer[i+1] - 5*Point;
				SellSymbolBuffer[i] = 0.0;
			}
		}
	}
}
else
if (Period() &lt; 30)
{
  // diff formula from &lt;[email protected]&gt;.
	int diff = (TimeMinute(Time[0]) - TimeMinute(iTime(NULL, PERIOD_M30, 0))) / Period() + 1;
	int per30 = 30 / Period();
	int j;
	for (i = indexbegin-counted_bars; i &gt;= 0; i--)
	{
		j = (i + per30 - diff)/per30;
		dailyopen = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
								PipsForBounce, TimeZoneOfData, ma_method, 0, j);
		DailyOpenBuffer[i] = dailyopen;
		crossamount = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
								PipsForBounce, TimeZoneOfData, ma_method, 3, j);
		CrossBounceBuffer[i] = crossamount;
		if (CrossBounceBuffer[i+1] != crossamount)
			crosstime = Time[i];
		BuyFilterBuffer[i] = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
								PipsForBounce, TimeZoneOfData, ma_method, 1, j);
		SellFilterBuffer[i] = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
								PipsForBounce, TimeZoneOfData, ma_method, 2, j);
		if (i &gt; 0 && BuyFilterBuffer[i] &gt; 0.0 && BuyFilterBuffer[i+1] == 0.0)
			BuySymbolBuffer[i] = BuyFilterBuffer[i] + 5*Point;
		else if (i &gt; 0 && SellFilterBuffer[i] &gt; 0.0 && SellFilterBuffer[i+1] == 0.0)
			SellSymbolBuffer[i] = SellFilterBuffer[i] - 5*Point;
	}
	crossdir = BuyFilterBuffer[0] != 0.0;
}
else
{
	dailyopen = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
								PipsForBounce, TimeZoneOfData, ma_method, 0, 0);
	crossamount = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
							PipsForBounce, TimeZoneOfData, ma_method, 3, 0);
	BuyFilterBuffer[0] = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
							PipsForBounce, TimeZoneOfData, ma_method, 1, 0);
	SellFilterBuffer[0] = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
							PipsForBounce, TimeZoneOfData, ma_method, 2, 0);
	crossdir = BuyFilterBuffer[0] != 0.0;
}

if (crossdir)
	crossdirstr = "bull";
else
	crossdirstr = "bear";

if (crosstime != 0)  // use of Digits suggested by &lt;[email protected]&gt;.
	Comment("Current daily open = ", DoubleToStr(dailyopen,Digits), "

Last ", mastrtype, " cross/bounce: ", TimeToStr(crosstime), ", ", crossdirstr, " at ", DoubleToStr(crossamount,Digits));
else
Comment("Current daily open = ", DoubleToStr(dailyopen,Digits), "
Last ", mastrtype, " cross/bounce: ", crossdirstr, " at ", DoubleToStr(crossamount,Digits));

return(0);

}
//±-----------------------------------------------------------------+