当我使用自定义指示器时,它显示如下图形:
当我将Expert Advisor与自定义指标一起使用时,它显示以下内容:
我应该如何更改EA
它只打开了自定义指标;
它绘制与自定义指标
以下是自定义指标的代码( HitBollingerBand1.mq4
)
#property indicator_chart_window
#property indicator_buffers 2
sinput string s_ = " Bolinger Bands "; // ind#1
input int InpBandsPeriod = 20; //period
input double InpBandsDeviation = 2.0; //deviation
double CrossedUp[];
double CrossedDown[];
int limit, x;
double POINT;
int init()
{
SetIndexStyle(0, DRAW_ARROW, 1, 2,clrRed);
SetIndexBuffer(0,CrossedUp);
SetIndexStyle(1, DRAW_ARROW, 1, 2,clrRed);
SetIndexBuffer(1,CrossedDown);
POINT=0.0001;
return(0);
}
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=limit; i>=0; i--) {
isHitBollingerBand(i);
}
return(0);
}
void isHitBollingerBand(int candleIdx){
int dir[]={1,-1};
bool setUp=false;
bool setDown=false;
for (int j=0;j<ArraySize(dir);j++){
double bands = iBands(_Symbol,0,InpBandsPeriod,InpBandsDeviation,0,PRICE_CLOSE,dir[j]<0?MODE_LOWER:MODE_UPPER,candleIdx);
double _peak = dir[j]<0 ? iLow(_Symbol,0,candleIdx): iHigh(_Symbol,0,candleIdx);
if(dir[j] * (_peak-NormalizeDouble(bands,Digits) ) >= 0){
double result=_peak+ dir[j]*3*POINT;
if(dir[j]==1)
CrossedUp[candleIdx]=result;
else
CrossedDown[candleIdx]=result;
}
}
}
以下是EA使用自定义指标(HitBollingerBandEA.mq4
)
int init()
{
start();
return(0);
}
sinput string s_ = " Bolinger Bands "; // ind#1
input int InpBandsPeriod = 20; //period
input double InpBandsDeviation = 2.0; //deviation
int start()
{
double HitBollingerBandUp=iCustom(NULL, 0, "HitBollingerBand1", InpBandsPeriod,InpBandsDeviation,0,1);
double HitBollingerBandDown=iCustom(NULL, 0, "HitBollingerBand1", InpBandsPeriod,InpBandsDeviation,1,1);
if(HitBollingerBandUp!=EMPTY_VALUE){
printf("%i%s [%s]",__LINE__,__FUNCTION__,TimeToStr(Time[1],TIME_DATE|TIME_MINUTES));
}
return(0);
}
答案 0 :(得分:0)
CustomIndicator
-s类型的MQL4
- 代码在GUI上绘制这就是说,可以使用 iCustom()
从EA端“读取”来自任何CustomIndicator缓冲区的任何值。但这并不意味着,GUI窗口上有任何线条。
CustomIndicator
类型的MQL4
- 代码然后必须将 CustomIndicator
“放置”到“GUI窗口”上。手动或以编程方式(使用启动时“配置文件”定义)。
Q2:我应该如何更改EA,使其绘制与 Custom Indicator
相同的图表?
A2:在有这种需要的情况下,我们将整个CustomIndicator
逻辑转码为EA,以便EA在其自己的控制下执行所有GUI操作,而不是依赖于Graph的手动GUI设置。