编码帮助......我如何让指标过滤而不是警报? - 页 4

 
Aaragorn:
我把它归结为这一点......但是等等......。

如果这只是用这一个柱子的简单移动平均线乘以3.5来寻找一个高点。这个点怎么可能达到呢?线值不是从必须触及它才能发出信号的同一个柱子上计算的吗?随着条形图的上升,边缘线也在上升?

移动平均线 如果从1个以上的条形图中计算 ,所以线可以是一个值,而价格是另一个值。

 
elihayun:
如果你想知道上线是否接近价格,一种方法是如果它们之间的差异很小(比方说2点)。

我不在乎(这不是一个好主意)价格是否在线下或线上。对我来说,2个点的距离就够了。因此,差异是

上方 - 高方会 给你差值,但不是以点为单位(它是像0.0004或-0.0004)。为了确保差值是正的,我们使用了MathAbs 函数,它返回绝对值(正)。现在我们必须检查它是否小于2点。当价格上升1点时,保留字Point 将返回该值。每个货币对都是不同的。

把它放在一起

如果(MathAbs(upper - High)< 2*Point) 意味着差异小于2点,对我们来说已经很接近了。

事实上,使用High并不好,因为High可能在上面,但当前的价格却很远。我们必须使用Ask 而不是High(在指标中我们必须使用Close[x])。

为了确保价格在该线之上,我们可以这样做

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

你很好地回答了我这么多的问题,我希望我没有让你疲惫不堪 ,我很想学习。

我理解绝对值。我想知道使用问价而不是收盘价会有什么变化?使用收盘价不好吗?该点不是要乘以2吗?是我把'*'符号解释错了,还是那是乘法符号?

我看到ask-upper给出的是上线和现在的问价之间的差值。但把点乘以2?我不知道这样做的结果是什么,可以用来进行比较。

我是否可以这样做,只允许在信号发生在我的过滤买入公差以下时买入?

[php]

extern double longrange = 25; //--在不允许买入之前,允许接近顶部波段线的距离。

extern double shortrange = 20; //--允许接近底部波段线的距离,然后禁止卖出。

// 入场

if(total < 2 || isNewSumbol(Symbol()))//我也修改了if条件:原来是total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //计算对冲仓位的手数

如果(isCrossed == 1 && Ask < upper-longgrange)

{

如果(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,note,MAGICMA,0,Green)。

否则

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,注释,MAGICMA,0,Green)。

如果(ticket>0)

{

如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY订单打开:",OrderOpenPrice())。

}

else Print("打开BUY订单出错。",GetLastError())。
 

你错过了一件事。为了理解该点的内容,请想象以下情况

USDJPY的价格是114.95,EURUSD的价格是1.2773。

因此,在美元指数中,问价 - 上限将是这样的。114.95 - 114.93 = 0.02

而在欧元兑美元中,价格将是1.2773 - 1.2771 = 0.0002

两者都是2个点,但精度不同,所以在USDJPY中我们必须把2乘以0.01,在EURUSD中我们必须把它乘以0.0001,在每个货币对中这正是 的意义。

 
elihayun:
移动平均线如果是由1个以上的柱子计算的 ,所以线可以是一个值,而价格是另一个值。

正是如此!它怎么可能是只有一个柱子的平均值?

//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
你错过了一件事。为了理解 "点 "的含义,请想象一下

在USDJPY中的价格是114.95,在EURUSD中的价格是1.2773。

因此,在USDJPY的问价------上限将是:114.95 - 114.93 = 0.02

而在欧元兑美元中,价格将是1.2773 - 1.2771 = 0.0002

两者都是2个点,但精度不同,所以在美元兑日元中,我们必须将2乘以0.01,在欧元兑美元中,我们必须将其乘以0.0001,在每个货币对中,这正是 的意义。

好吧,我看到了问题所在......我想做的是根据接近上下线的程度创建一个障碍,超过这个障碍 就不允许交易。

-因此,首先我得到该线的当前值。

-然后我加减我想定义为不能容忍交易的距离,作为一个整数,我认为是1=1点的移动。

-然后,我必须得到每一个点的价格值,以便进行比较。

所以这一行应该是 "price_Typical "以外的东西。

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

我不知道如何保持不同的精确性,以免造成问题。我想做的是比较价格的变化与线的变化,这将指定 "不要在此水平以上做多 "或 "不要在此水平以下做空"。

我已经准备好休息了,我的大脑已经变成了浆糊。

 

PRICE_TYPICAL与此无关。你可以在MQL4的帮助中了解它。

你所要做的就是找出价格和线之间的差异,用一个减去另一个。正如我所说的,问题是有时你得到0.0006,有时你得到0.06,而这个点正在解决。

(我现在要关门了。我们明天再继续)

 
elihayun:
你错过了一件事。为了理解点的内容,请想象一下

在USDJPY中的价格是114.95,在EURUSD中的价格是1.2773。

因此,在USDJPY的问价------上限将是:114.95 - 114.93 = 0.02

在欧元兑美元中,价格将是1.2773 - 1.2771 = 0.0002

两者都是2个点,但精度不同,所以在USDJPY中我们必须将2乘以0.01,在EURUSD中我们必须将其乘以0.0001,在每个货币对中这正是Point 的作用。

所以这一点就像在每个货币对中跟踪点的移动,而不考虑不同的精度要求?

 
elihayun:
PRICE_TYPICAL与此无关,你可以在MQL4的帮助中了解它。

你所要做的就是找出价格和线之间的差异,用一个减去另一个。正如我所说的,问题是有时你得到0.0006,有时你得到0.06,这一点正在解决。

(我现在要关闭了。我们明天再继续)

非常感谢您的耐心和鼓励。

 

这就是我所做的....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

报告显示,它得到了设置,但空白....。

很明显,它不允许交易,但所有的交易都不允许?我觉得这很难让人相信,因为我只把多头和空头范围设置为1!?在这个范围内肯定有一些交易信号?我不认为这是在做我想做的事情。

附加的文件:
mac5.htm  5 kb
 

我改变了趋势带指标,使其更加灵活。

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

在这之后我把带宽移到了20,这样它就不会碰到波段了......它还是给我 "错误开盘131"

ERR_INVALID_TRADE_VOLUME 131无效的交易量

这到底是怎么回事?