[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 443

 

是的,我知道...

 

也许我不明白?

这样的一句话。

if( MACD[ i] < 0) ExtMapBuffer2[ i] = High[ i]+iATR(Symbol(), 0, 14, i);

将MACDa值与零进行比较,如果条件符合,就会画出一个箭头

它是如何工作的?

if (MACD[i] * MACD[i+1]<0) {

它是怎么做的?如果MACD[i]>0并且macd[i+1]也大于0,那么如何满足条件??????????????????

 
igrok2008 писал(а)>>

也许我不明白?

这样的一句话。

将MACDa值与零进行比较,如果条件符合,就会画出一个箭头。

它是如何工作的?

这是什么意思?如果MACD[i]>0,并且MACD[i+1]也大于0,那么如何满足条件??????????????????

如果前一个值与当前值的乘积小于零,那么这些值就在零线的不同一侧。

乘法比逻辑条件快10倍左右。我已经用一个乘法和一个逻辑条件代替了两个逻辑条件。

首先,我们检查是否有一个零线的交点。如果有一个交叉点,那么确定交叉点的方向。

 

请原谅,但我在执行该条件时遇到了困难。

MACD向上,越过N水平(当然,是减号)--画出一个箭头,NACD向下,越过N水平(+号)--画出一个箭头。

N级是一个特定的水平,比如对于CCI - 20和80。逻辑很清楚,但如何实现......?????。

 
igrok2008 писал(а)>>

请原谅我,但我的条件是不可行的。

MACD向上,越过N水平(当然,是减号)--画出一个箭头,NACD向下,越过N水平(+号)--画出一个箭头。

N级是一个特定的水平,比如对于CCI - 20和80。逻辑很清楚,但如何实现......?????。

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
这是一种水平渗透控制。在你的情况下,你将需要做两个控制。分别用于正负两个级别
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

它是这样的吗?


      if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
         ((MACD[i]+Level)*(MACD[i+1]+Level)>0){
 

抱歉打扰了,你已经帮我定义了NonLagDOT指标的输入参数,并通过iCustom()函数将其输出到专家顾问中。

请告知如何为该指标开立订单。


/+------------------------------------------------------------------+
||NonLagDOT.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 黄色
#property indicator_width1 1
#property indicator_color2 RoyalBlue
#property indicator_width2 1
#property indicator_color3 Red
#property indicator_width3 1


//---- 输入参数
外来的int Price = 0;
外部int Length = 20;
extern intplace Displace = 0;
外来的int Filter = 0;
外来的int Color = 1;
外部int ColorBarBack = 0;
外来的双倍偏差 = 0;

double Cycle = 4;

//---- 指示器缓冲区
双重MABuffer[]。
双倍UpBuffer[]。
双重DnBuffer[]。
双倍价格[]。
双重趋势[]。

//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
int init()
{
int ft=0。
string short_name;
//---- 指标线
IndicatorBuffers(5)。
SetIndexStyle(0,DRAW_ARROW)。
SetIndexBuffer(0,MABuffer)。
SetIndexStyle(1,DRAW_ARROW)。
SetIndexBuffer(1,UpBuffer)。
SetIndexStyle(2,DRAW_ARROW)。
SetIndexBuffer(2,DnBuffer)。
SetIndexBuffer(3,price)。
SetIndexBuffer(4,trend)。
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS))。
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
SetIndexArrow(3,159);
//---- DataWindow和指标子窗口标签的名称
short_name="NonLagDot("+Length+")"。
IndicatorShortName(short_name)。
SetIndexLabel(0, "NLD")。
SetIndexLabel(1, "Up")。
SetIndexLabel(2, "Dn")。
//----
SetIndexShift(0,Displace)。
SetIndexShift(1,Displace)。
SetIndexShift(2,Displace)。

SetIndexDrawBegin(0,Length*Cycle+Length)。
SetIndexDrawBegin(1,Length*Cycle+Length)。
SetIndexDrawBegin(2,Length*Cycle+Length)。
//----
return(0);
}

//+------------------------------------------------------------------+
//| NonLagMA_v4 |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit;
double alfa,beta,t,Sum,Weight,step,g;
双重π=3.1415926535。

double Coeff = 3*pi;
int Phase = Length-1;
double Len = Length*Cycle + Phase;

如果( counted_bars > 0 ) limit=Bars-counted_bars。
如果( counted_bars < 0 ) 返回(0)。
如果( counted_bars ==0 ) limit=Bars-Len-1。
如果( counted_bars < 1 )
for(i=1;i<Length*Cycle+Length;i++)
{
MABuffer[Bars-i]=0。
UpBuffer[Bars-i]=0。
DnBuffer[Bars-i]=0。
}

for(shift=limit;shift>=0;shift--)
{
Weight=0;Sum=0;t=0。

for (i=0;i<=Len-1;i++)
{
g=1.0/(Coeff*t+1)。
如果(t <= 0.5 )g = 1。
beta = MathCos(pi*t)。
alfa = g * beta。
//如果(shift>=1) price[i] = iMA(NULL,0,Per,Displace,Mode,Price,shift+i)。
//其他
price[i] = iMA(NULL,0,1,0,MODE_SMA,Price, shift+i);
Sum += alfa*price[i];
重量 += alfa;
如果 ( t < 1 ) t += 1.0/(Phase-1);
else if ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1) 。
}

如果(重量>0)MABuffer[shift]=(1.0+Deviation/100)*Sum/Weight。

如果(Filter>0)
{
如果( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point ) MABuffer[shift]=MABuffer[shift+1];
}

如果(颜色>0)
{
trend[shift]=trend[shift+1]。
如果(MABuffer[shift]-MABuffer[shift+1]>Filter*Point) trend[shift]=1。
如果(MABuffer[shift+1]-MABuffer[shift]>Filter*Point) trend[shift]=-1。
如果(趋势[shift]>0)
{
UpBuffer[shift] = MABuffer[shift]。
如果(趋势[shift+ColorBarBack]<0)UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack]。
DnBuffer[shift] = 0。
}
如果(趋势[shift]<0)
{
DnBuffer[shift] = MABuffer[shift]。
如果(趋势[shift+ColorBarBack]>0)DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack]。
UpBuffer[shift] = 0。
}
}
}
return(0);
}
 
igrok2008 писал(а)>>

它是这样的吗?

if (( MACD[ i]- LevelUP)*( MACD[ i+1]- LevelUP)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]- LevelDN)*( MACD[ i+1]- LevelDN)<0){
   if ( MACD[ i]- LevelDN<0) {//}
}
它可能是这样的。只要你知道自己在做什么。显然,我让你很为难
 
请解释LevelUP和LevelDN这两个术语
 
igrok2008 писал(а)>>
请解释LevelUP和LevelDN这两个术语

LevelUP--积极的水平

LevelDN--负数水平。

一般来说,它们的绝对值是相等的。

如果它们是相等的,可以用

if (( MACD[ i]- Level)*( MACD[ i+1]- Level)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]+ LevelDN)*( MACD[ i+1]+ LevelDN)<0){
   if ( MACD[ i]+ Level<0) {//}
}