问吧! - 页 176

 

PS:只是提醒一下--iCustom()调用中的第三个参数 是指标名称。第一个参数是符号,第二个参数是所需的时间框架。

mladen:
像这样做。
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

辽宁沈阳

我正在使用icustom在一个循环中调用一个自定义指标,用于几个货币对。我可以在专家标签上看到,该指标被卸载,然后为下一个货币对重新加载。 这是否意味着iCustom调用在每次加载时都会重新计算图表中整个最大条数的值? 另外,如果你为N条和N+1条分别连续调用它,第二次调用是否需要完全重新计算? 最后,如果连续调用的是不同的缓冲区,是否每个都要重新计算。

我记得你说过,每个iCustom调用都会产生一个单独的实例,所以我的推测是,每个实例都会被重新计算。

谢谢你的回答。

Tzuman

 

Tzuman,

Metatrader为每一组新的参数值创建一个新的指标实例(缓冲区编号 和索引除外)。

一个例子 - 以下两个调用:

iCustom(NULL,0, "name",1,0,0)。

iCustom(NULL,0, "name",2,0,0)。

将创建一个指标的两个实例(即使你用 "n "代替1和2,并在新调用iCustom()之前给n分配不同的值,它也会创建单独的实例。这就是为什么有些自适应指标不能用iCustom()来写,而必须用函数的形式来写。)

现在这就是关于实例的问题。但如果指标被加载后又被卸载,这通常是参数的问题(卸载部分通常表明这一点)。如果参数类型不匹配,那么它将做 "加载-卸载 "的特技。检查是否意外地传递给iCustom的一些参数不是预期的类型(或者一些参数被意外地省略了,这可能导致参数类型的混淆)。

Tzuman:
冯小刚

我正在使用icustom在一个循环中调用一个自定义指标,用于几个货币对。我可以在专家标签上看到,指标被卸载,然后为下一个交易对重新加载。 这是否意味着iCustom调用在每次加载时都会重新计算图表中整个最大条数的值? 另外,如果你为N条和N+1条分别连续调用它,第二次调用是否需要完全重新计算? 最后,如果连续调用的是不同的缓冲区,是否每个都要重新计算。

我记得你说过,每个iCustom调用都会产生一个单独的实例,所以我的推测是,每个实例都会被重新计算。

谢谢你的回答。

朱曼
 

我不想打断你们最近的讨论

请看一下这个新的主题

https://www.mql5.com/en/forum/182212

 

我看到,mrtools已经解决了这个问题。

MaaTini:
我不想打断你们最近的讨论

请看一下这个新的主题

https://www.mql5.com/en/forum/182212
 
mladen:
Tzuman。

Metatrader为每一组新的参数值创建一个新的指标实例(缓冲区编号和索引除外)。

举个例子 - 以下两个调用:

iCustom(NULL,0, "name",1,0,0);

iCustom(NULL,0, "name",2,0,0)。

将创建一个指标的两个实例(即使你用 "n "而不是1和2,并且在新调用iCustom()之前给n分配不同的值,它也会创建单独的实例。这就是为什么有些自适应指标不能用iCustom()来写,而必须用函数的形式来写。)

现在这就是关于实例的。但如果指标被加载后又被卸载,这通常是参数的问题(卸载部分通常表明)。如果参数类型不匹配,那么它将做 "加载-卸载 "的特技。检查是否意外地有一些传递给iCustom的参数不是预期的类型(或者一些参数被意外地省略了,这可能导致参数类型的混淆)。

非常感谢你的解释。我以为加载/卸载是由于符号在循环的每次迭代中发生变化,所以它必须加载所有新的数据值。

例如:iCustom("EURUSD",0, "name" ,1,0,0); & iCustom("GBPUSD",0,name" ,1,0,0)。

我将仔细检查参数,但我已经着手写我自己的MA平均函数,有一些抄袭。 只是在任务管理器中看一下处理器的利用率,看起来我的cpu使用率下降了90-95%。 我很高兴

 

我是一个编码新手,你能帮助我在 "停止打开多个订单时,takeprofit击中 "我尝试这样的代码,但不工作,你能帮助我吗?

static datetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime();if((buy==true|| sell==true) && closeT==Time[0]) {buy=false; sell=false; } } } }

 

谢谢mladen,我将尝试你的代码。

 
RBarias:
你好,大师,我是编码的新手,你能帮助我在 "当止盈被击中时停止打开多个订单",我尝试了这样的代码,但没有工作,请你帮助我。

staticdatetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--){if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime();if((buy==true|| sell==true) && closeT==Time[0]) {buy=false; sell=false; }}}}

你可以试试这样的方法(它将检查最后一个平仓的订单是否在当前栏中平仓,以及是否击中了获利)。

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

嗨,mladen。

你的Symbols.mq4脚本在MT4 build 509中完美运行,但在build 636中出现了文件错误(当打开symbols.raw时)。

你能分享一下MT4 636版的更新版本吗?

非常感谢你。

谢谢。

Timo.