任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 95

 
hoz:

是的,带i_ 的变量是输入变量(来自intut这个词,可以由用户改变...),pt 也是一个全局变量,在任何地方都是可见的...不,这批货还没有被规范化。在测试器中从未遇到过...而地段与对象有什么关系(错误4200)?

很多东西跟它有什么关系?如果批号无效,就会调用错误处理函数,这将导致对象被建立

如果批次不对,测试器中就会出现错误。你说你不建立对象,但在函数中

void pr (string txt)

仍在构建对象。

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

这可能是埋藏错误的地方。你可能必须在那里做一些事情。在这个函数中注释出图表的输出。如果错误消失了,你要在函数中寻找其背后的原因。

void pr (string txt)
 
vovak_85:

你好,我是mql编程的新手。我有一个问题,我有一个自定义的指标,不是我写的,它以箭头的形式产生买入和卖出信号,为此在指标中有两个缓冲区,问题是我不能正确地从指标中读取信号,以使专家顾问进行买入或卖出。

该指标的代码。

...

要在论坛中正确粘贴代码,请点击SRC,然后复制代码。

 

SRC插入代码!!!

而且这不是一个障碍,是强烈推荐的!

论坛导航器和对常见问题的回答。强烈推荐阅读! ( 1 2 3 4 5 6 ) 52 18.02.2011 常见问题

 

你好,我是mql编程的新手。我有一个问题,我有一个自定义的指标,不是我写的,它以箭头的形式产生买入和卖出信号,为此在指标中有两个缓冲区,问题是我不能正确地从指标中读取信号,以使专家顾问进行买入或卖出。

指标代码。

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
我知道了,谢谢你!修复它?
在你之前的帖子中是正确的。
 
vovak_85:
我知道了,谢谢你!修复它?
当然了!通过移除一个不必要的破坏者!"。
 
hoz:

pr 是一个打印功能。而错误,这已经是一个标准的常数。从逻辑上讲,这完全是不可接受的。如果你仍然怀疑pr的 功能,这里就是。


好吧,用通常的印刷品代替它,并观察日志。

在创建对象时,对象名称不唯一,这就是为什么在创建对象 时出现错误。

 
artmedia70:

这与该地段有什么关系?如果很多东西是错的,那么就会调用错误处理函数,它将导致构建对象。

如果这批货是错的,那么在测试器中也会有错误。你说你不建立对象,但在函数中

对象仍在建设中。

这可能是问题所在。你可能必须在那里做一些事情。在这个函数中注释出图表的输出。如果错误没有了,你要在函数中寻找错误的原因



我自己已经想到了这一点,而你的回答正好击中了我的要害。用这个函数注释出的地方,问题就消失了。显然,在使用它时,你必须一次删除输入中的所有对象,对吗?我的意思是,在pr 函数的最开始。
 
hoz:

我自己已经考虑过了,刚才你的回答也击中了我的要害。用这个函数注释出的地方,问题就消失了。显然,在使用它时,你必须一次删除输入端的所有对象,对吗?即在pr 函数的最开始,我是说...

老实说,我不知道你的函数的逻辑。它是应该删除对象还是建立对象,我不知道。告诉我你想让它做什么,我们来看看哪里的逻辑是错的。然而,如果该函数试图建立一个图形对象但失败了,这意味着它已经存在。那么,根据你的程序逻辑,接下来该怎么办?你可以用不同的名字建立一个新的对象(例如,将当前时间 添加到对象名称中(TimeToStr(TimeCurrent()))))或者,如果你已经有一个对象,但需要改变它的属性,不要再建立它,只需改变它的属性。然后错误就不会再出现。

就这么简单。最主要的是要知道你想要什么。:)

 
vovak_85:

你好,我是mql编程的新手。我有一个问题,我有一个自定义的指标,不是我写的,它以箭头的形式产生买入和卖出信号,为此在指标中有两个缓冲区,问题是我不能正确地从指标中读取信号,以使专家顾问进行买入或卖出。

指标代码。


你确定你已经把所有的大括号都放好了。它们在一些地方缺失。这就是为什么你的逻辑是有缺陷的。而最有可能的是,结果并不是你所期望的那样。