[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 60

 
7777877: 参数转移是指通过参照物进行的参数转移?

这里是通过参考的参数 转移,做一个这样的脚本。

int start(){
   int res = 999;
   Print("func = ",func(res)," , res = ",res);
return(0);
}
//__________________________
int func(int &a){
   a = 10;
   return(a*10);
}

专家标签将显示以下记录:2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

并试图回答为什么我们分配给res =999;而日志得到res = 10的问题。

 

你能告诉我如何连接这些图书馆吗?它们存在于mqh文件中,但在复制时,它们给出了

'strlib.mqh' - 无法打开程序文件

 
IgorM:

这里是链接中的参数 转移,做一个这样的脚本。

专家标签将显示以下条目:2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

并尝试回答为什么我们指定res =999;但在日志中得到res = 10的问题。


以下是我的解释。

打印函数调用用户函数func。参数res=999被传递给func函数。当func函数本身被评估时,参数a=10被使用。值a*10=100被传回调用func函数的地方。由于我们最终得到的是res=10,我由此推断,通过引用传递参数 意味着:你可以将相关类型的任何值(在本例中,res=999)传递给被调用的函数(在本例中,传递给func),但函数本身将以该值进行评估(即(即在我们的例子中,a=10),它将在函数本身中被初始化(在特定情况下,它也可以与传递到被调用函数中的值相一致,即在本例中,传递到func中)。而在将函数中计算出的值(在本例中为func)转移回函数调用字符串时,变量(在本例中为res)将已经有一个与之前不同的值,即它在函数func计算时得到的值(即在本例中为res=10)。所以:当通过引用将一个参数传入一个函数时,在一个被评估的函数中,参数值可能会改变,而且,在函数调用字符串中返回计算值后,这个参数将有一个改变的(在特定情况下,相同的)值,它是在评估被调用函数时收到的。

我说对了吗?

 
7777877: 当一个参数通过引用 传递给一个函数时,参数的值可以 在被评估的函数中改变
是的,它是
 
IgorM:
这就对了。

衷心感谢您!!!"。
 

请告诉我,我想对订单进行修改,这样EA就会在我指定的时间改变止损值,但它开始变得愚蠢。

以下是我的代码

extern int tp = 350; // profit value takeprofit
extern int sl = 400; // loss value stoploss

int ticket;

int start()
{
//----
if (OrdersTotal()==0 && Hour() ==2 && Minute( )==0) //订单在终端时间2:00打开
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) //这里我设置了一个条件,即选定票据的订单必须在终端时间3h00修改。时间。

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); //这里我指定了订单选择,交易
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); //用选定的票据修改订单,从开仓价 开始,改变SL值的点数,TP保持不变


}
//--。

}


在测试过程中出现了一个问题:专家顾问开始在时间上做很多无用的修改,从3点00分到3点59分。EA正在胡闹,每一秒都在进行修改!为什么,代码有什么问题?

 
oleg_felix:

请告诉我,我想对订单进行修改,使EA在我指定的时间改变止损值,但它开始胡闹了。

以下是我的代码

外来的int tp = 350; // 获利值
外部int sl = 400; // 止损值

int票。

int start()
{
//----
如果(OrdersTotal()==0 && Hour()==2 && Minute()==0) //订单在终端时间2:00打开
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"" 123,0,Red);

//----

if (OrdersTotal()==1 && Hour()==3 && Minute()==0) //这里我指定了一个条件,根据终端时间,所选票据的订单必须在下午3点被修改。

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); //在这里我指定了订单选择,贸易
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); //用选定的票据修改订单,从开仓价格开始,改变SL值(点数),保持TP不变。


}
//--

}


在测试时,出现了一个问题:专家顾问开始在时间内做很多无用的修改,从3点钟00分到3点钟59分。专家顾问正在蠢蠢欲动,每一秒都在进行修改!为什么,代码有什么问题?



为什么在时间上.....,在利润上!!!

 

如何编写正确的函数来修改ECN账户中的未平仓订单,在这个账户中,你不能一次性放置止损和盈利,但你必须通过修改来完成。

问题是,有些地方出了问题,请帮助我找到错误。

extern int tp = 350; // profit value takeprofit
extern int sl = 400; // loss value stoploss

int ticket;
int start()
{
//----
if (OrdersTotal()==0 &&) Close[1]<Open[1] && High[1]<Bid) )==0) //订单在条件下打开
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,0t," ,123,0,Red);
//----
if (OrdersTotal()==1 ) // 在这里我设置了一个条件,用一个选定的订单修改一个订单。
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); //这里我指定了订单选择,交易
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Blue); //用选定的票据修改订单,从开仓 价格开始,改变SL值的点数,保持TP不变
}
}

 
oDin48:
  • 伙计们,我怎样才能连接图书馆?当我试图编译EA时,它给出的结果是

  • 'strlib.mqh' - 无法打开程序文件

A找到线。
#include <strlib.mgh>

并替换为。

#include <stdlib.mgh>
 
7777877:

各位,请用简单的形式解释一下什么是参数的引用转移。我读过文件,但只了解到这是可能的,而且在变量标识后面必须加上修饰词&。如果在解释的同时有一个带有解释的小程序,那就更好了...通常的参数传递和通过引用传递参数之间有什么区别?

通过 引用传递参数 的一般意义是,不是传递变量本身,而是将其地址传递到参数中。在相反的情况下,变量的副本被传递到参数中。