[MT4指标]兔女郎交叉和开仓指示
//+------------------------------------------------------------------+
//| Bunnygirl Cross and Daily Open.mq4 |
//| Copyright ? 2005, David W. Thomas |
//| mailto:[email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright ? 2005, David W. Thomas"
#property link "mailto:[email protected]"
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 DarkViolet
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Gray
#property indicator_color5 Blue
#property indicator_color6 Red
//---- input parameters
extern int PipsForBounce=3;
extern int TimeZoneOfData=0;
extern int ma_method=MODE_LWMA;
extern int FilterInPips=20;
//---- 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;
filter = FilterInPips * 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 < 0) counted_bars = 0;
//---- last counted bar will be recounted
if (counted_bars > 0) counted_bars--;
if (counted_bars > indexbegin) counted_bars = indexbegin;
if (Period() == 30)
{
double ma20c, ma20p1, ma20p2,
diff0, diff1, diff2;
for (i = indexbegin-counted_bars; i >= 0; i--)
{
if ((TimeMinute(Time) == 0) && (TimeHour(Time) - TimeZoneOfData == 0))
dailyopen = Open;
DailyOpenBuffer = 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 > 0)
{
if (diff1 < 0) // simple bull cross.
{
crossdir = true;
// determine which bar is closer to the cross:
if (MathAbs(diff0) < MathAbs(diff1))
{
crosstime = Time;
crossamount = ma20c;
}
else
{
crosstime = Time[i+1];
crossamount = ma20p1;
}
}
else
if (diff1 == 0 && diff2 < 0) // exact cross on last bar.
{
crossdir = true;
crosstime = Time[i+1];
crossamount = ma20p1;
}
else
if (diff1 > 0 && diff2 > diff1 && diff0 >= diff1 && diff1 <= PipsForBounce*Point) // a bounce.
{
crossdir = true;
crosstime = Time[i+1];
crossamount = ma20p1;
}
}
else
// bear signals:
if (diff0 < 0)
{
if (diff1 > 0) // simple bear cross.
{
crossdir = false;
// determine which bar is closer to the cross:
if (MathAbs(diff0) < MathAbs(diff1))
{
crosstime = Time;
crossamount = ma20c;
}
else
crosstime = Time[i+1];
crossamount = ma20p1;
{
}
}
else
if (diff1 == 0 && diff2 > 0) // exact cross on last bar.
{
crossdir = false;
crosstime = Time[i+1];
crossamount = ma20p1;
}
else
if (diff1 < 0 && diff2 < diff1 && diff0 <= diff1 && MathAbs(diff1) <= PipsForBounce*Point) // a bounce.
{
crossdir = false;
crosstime = Time[i+1];
crossamount = ma20p1;
}
}
CrossBounceBuffer = crossamount;
if (TimeHour(Time) >= beginfiltertime && TimeHour(Time) <= endfiltertime)
{
if (crossdir)
{
BuyFilterBuffer = crossamount + filter + Ask - Bid;
SellFilterBuffer = 0;
if (i > 0 && BuyFilterBuffer != BuyFilterBuffer[i+1])//crosstime == Time)
BuySymbolBuffer = BuyFilterBuffer + 5*Point;
}
else
{
SellFilterBuffer = crossamount - filter;
BuyFilterBuffer = 0;
if (i > 0 && SellFilterBuffer != SellFilterBuffer[i+1])//crosstime == Time)
SellSymbolBuffer = SellFilterBuffer - 5*Point;
}
}
if (crosstime == Time[i+1] && TimeHour(Time[i+1]) >= beginfiltertime && TimeHour(Time[i+1]) <= endfiltertime)
{
CrossBounceBuffer[i+1] = crossamount;
if (crossdir)
{
BuyFilterBuffer[i+1] = crossamount + filter + Ask - Bid;
BuySymbolBuffer[i+1] = BuyFilterBuffer[i+1] + 5*Point;
BuySymbolBuffer = 0.0;
}
else
{
SellFilterBuffer[i+1] = crossamount - filter;
SellSymbolBuffer[i+1] = SellFilterBuffer[i+1] - 5*Point;
SellSymbolBuffer = 0.0;
}
}
}
}
else
if (Period() < 30)
{
// diff formula from [email protected].
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 >= 0; i--)
{
j = (i + per30 - diff)/per30;
dailyopen = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
PipsForBounce, TimeZoneOfData, ma_method, 0, j);
DailyOpenBuffer = dailyopen;
crossamount = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
PipsForBounce, TimeZoneOfData, ma_method, 3, j);
CrossBounceBuffer = crossamount;
if (CrossBounceBuffer[i+1] != crossamount)
crosstime = Time;
BuyFilterBuffer = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
PipsForBounce, TimeZoneOfData, ma_method, 1, j);
SellFilterBuffer = iCustom(NULL, PERIOD_M30, "Bunnygirl Cross and Daily Open",
PipsForBounce, TimeZoneOfData, ma_method, 2, j);
if (i > 0 && BuyFilterBuffer > 0.0 && BuyFilterBuffer[i+1] == 0.0)
BuySymbolBuffer = BuyFilterBuffer + 5*Point;
else if (i > 0 && SellFilterBuffer > 0.0 && SellFilterBuffer[i+1] == 0.0)
SellSymbolBuffer = SellFilterBuffer - 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 [email protected].
Comment("Current daily open = ", DoubleToStr(dailyopen,Digits), "\nLast ", mastrtype, " cross/bounce: ", TimeToStr(crosstime), ", ", crossdirstr, " at ", DoubleToStr(crossamount,Digits));
else
Comment("Current daily open = ", DoubleToStr(dailyopen,Digits), "\nLast ", mastrtype, " cross/bounce: ", crossdirstr, " at ", DoubleToStr(crossamount,Digits));
return(0);
}
//+------------------------------------------------------------------+Bunnygirl%20Cross%20and%20Daily%20Open.jpg
发表于:2015-07-03 14:06只看该作者
2楼
谢谢楼主分享,不买也要顶个!
韬客社区www.talkfx.co
发表于:2015-07-04 00:40只看该作者
3楼
谢谢分享
韬客社区www.talkfx.co
发表于:2015-07-08 01:08只看该作者
4楼
感谢分享
韬客社区www.talkfx.co
发表于:2015-09-23 03:47只看该作者
6楼
谢谢楼主分享,不买也要顶个!
韬客社区www.talkfx.co
发表于:2015-09-24 10:25只看该作者
7楼
错哇!
韬客社区www.talkfx.co
发表于:2015-10-29 09:30只看该作者
8楼
谢谢楼主分享,不买也要顶个!
韬客社区www.talkfx.co
发表于:2016-12-07 10:20只看该作者
9楼
谢楼主的分享
韬客社区www.talkfx.co
发表于:2017-08-08 07:25只看该作者
10楼
灌水赚通宝,谢谢分享