【如何防止机器人误判】讨论代码时请使用代码表述功能
- 2023.06.13
- www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能。(如图) 感谢您的配合...
RT哪位大佬能帮忙看看以下代码那里有问题吗?第一次做这个mt4的指标不大理解这个。很简单的一个需求就是外部输入超卖超买的点,然后穿过就提示。
但是现在不提示。排查了半天不知道哪里有问题
#property indicator_separate_window
#property indicator_buffers 5
//----
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Gold
//----
#property indicator_level1 72
#property indicator_level2 50
#property indicator_level3 25
//----
int BBPrd=20;
double BBDev=2.0;
int SBPrd=13;
int SBATRPrd=21;
double SBFactor=2;
int SBShift=1;
extern int RSIPeriod=14;
extern int BullLevel=72;
extern int BearLevel=25;
extern bool AlertOn=true;
//----
double RSI[];
double DnRSI[];
double Buy[];
double Sell[];
double Squeeze[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
// SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,RSI);
// SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,DnRSI);
// SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID);
// SetIndexArrow(2,159);
SetIndexBuffer(2,Buy);
// SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID);
// SetIndexArrow(3,159);
SetIndexBuffer(3,Sell);
// SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID);
//SetIndexArrow(4,159);
SetIndexBuffer(4,Squeeze);
IndicatorShortName("RSI("+RSIPeriod+")");
IndicatorDigits(2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int shift,limit;
double BuyNow, BuyPrevious, SellNow, SellPrevious;
static datetime prevtime=0;
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-31;
if(counted_bars>=31) limit=Bars-counted_bars-1;
for(shift=limit;shift>=0;shift--)
{
RSI[shift]=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,shift);
if(RSI[shift]>=BullLevel && RSI[shift]>50)
{
Sell[shift]=BullLevel;
Buy[shift]=EMPTY_VALUE;
}
else if( RSI[shift]<=BearLevel && RSI[shift]<50 )
{
Sell[shift]=EMPTY_VALUE;
Buy[shift]=BearLevel;
}
else
{
Buy[shift]=EMPTY_VALUE;
Sell[shift]=EMPTY_VALUE;
}
}
if(AlertOn)
{
if(prevtime==Time[0])
{
return(0);
}
prevtime=Time[0];
BuyNow=Buy[0];
BuyPrevious=Buy[1];
SellNow=Sell[0];
SellPrevious=Sell[1];
if((BuyNow ==BearLevel) && (BuyPrevious ==EMPTY_VALUE) )
{
Alert(Symbol(), " M", Period(), " Buy Alert");
}
else
if((SellNow ==BullLevel) && (SellPrevious ==EMPTY_VALUE) )
{
Alert(Symbol(), " M", Period(), " Sell Alert");
}
IndicatorShortName("RSI("+RSIPeriod+") (Alert on)");
}
// ======= Alert Ends =========
return(0);
}
//+------------------------------------------------------------------+