如何编码? - 页 302 1...295296297298299300301302303304305306307308309...347 新评论 Mladen Rakic 2012.07.16 07:25 #3011 ... 是的,你可以 唯一的限制是,当它以一个死循环结束时,你不会遇到 "循环调用"。除此以外,对函数调用 没有任何限制。 crsnape@btinternet.com: 说得好。我得看看这个问题。 关于函数的一个问题,是否可以在一个函数中调用一个函数?例如,我有这样一个函数。 string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort) { 如果(......等 然后我再调用它。 double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort) [删除] 2012.07.16 12:51 #3012 我输入了这段代码来检索最后打开的订单。 //------计算最后打开的订单的票号的函数 int LastOpenTicket() { datetime lastTime = 0; int lastTicket = -1; // 没有打开。 int pos; for (pos = OrdersTotal() - 1; pos >= 0; pos--) 如果(OrderSelect(pos, SELECT_BY_POS) // 只有我的订单w/) && OrderMagicNumber() == MagicNumber // 我的神奇数字 && OrderSymbol() == Symbol() // 和我的配对。 && OrderOpenTime() > lastTime) { lastTime = OrderOpenTime(); lastTicket = OrderTicket()。 } 返回(lastTicket)。 } 它是一个从我的GetLots函数中调用的函数--编译器没有错误,但当我回测时,结果部分是完全清楚的。没有交易。这是因为在上面的代码中,第一笔交易没有以前的交易可以调用吗? 在日志中,它加载了外部变量(其中加载了神奇的42号,但在我的代码中是42552......),但此后就没有了。 编码帮助 [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Mladen Rakic 2012.07.16 13:03 #3013 ... 你的魔法号码的声明是什么(应该是int MagicNumber; ) crsnape@btinternet.com: 我输入这段代码是为了找回最后一笔开仓的订单。//-----计算最后一次开票的票号的函数 int LastOpenTicket() { datetime lastTime = 0; int lastTicket = -1; // 没有打开。 int pos; for (pos = OrdersTotal() - 1; pos >= 0; pos--) 如果(OrderSelect(pos, SELECT_BY_POS) // 只有我的订单w/) && OrderMagicNumber() == MagicNumber // 我的神奇数字 && OrderSymbol() == Symbol() // 和我的配对。 && OrderOpenTime() > lastTime) { lastTime = OrderOpenTime(); lastTicket = OrderTicket()。 } 返回(lastTicket)。 } 它是一个从我的GetLots函数中调用的函数--编译器没有错误,但当我回测时,结果部分是完全清楚的。没有交易。这是因为在上面的代码中,第一笔交易没有以前的交易可以调用吗? 在日志中,它开始加载外部变量(其中加载了神奇的42号,但在我的代码中是42552......),但此后就没有了。 [删除] 2012.07.16 13:11 #3014 是的,它是int MagicNumber = 42557 Mladen Rakic 2012.07.16 13:20 #3015 ... 那么,我无法从你发布的代码中看出它为什么做错了(例如,为什么它接收了错误的MagicNumber)。如果有任何指定的MagicNumber的订单被打开,该代码应该工作(它将在已打开的订单中循环),如果没有已打开的订单或MagicNumber和符号不匹配,它将返回-1(正如你所期望的),所以该代码是正确的(现在测试了它,它工作得很好)。 对不起,但这是我从你发布的代码中所能做的一切 crsnape@btinternet.com: 是的,它是int MagicNumber = 42557 [删除] 2012.07.16 13:27 #3016 如果以前没有开过单,而这是第一个,会发生什么?我知道它返回-1,但代码EA会不会运行失败,因为我的GetLots函数依赖于调用最后打开的订单票号。 Mladen Rakic 2012.07.16 13:31 #3017 如果它依赖于至少有一个先前打开的订单存在,那么它将失败 在你的条件中添加类似这样的内容。 如果(LastOpenOrder()==-1) ...那么你可以打开订单,如果所有其他的条件都满足的话 否则 ...像以前一样检查 最后打开的订单,再加上其他的条件 (只是在猜测你现在如何写你的EA条件) crsnape@btinternet.com: 如果以前没有开过单子,而这是第一个,会发生什么情况?我知道它返回-1,但EA代码会不会运行失败,因为我的GetLots函数依赖于调用最后开出的订单票号。 tkuan77 2012.07.16 13:48 #3018 你好,姆拉登。 你知道当随机 线在20级或80级交叉时如何设置开仓交易吗? 举例来说。 当随机指数在20级时相互交叉(超卖),做多 当随机指数在80级相互交叉时(超买),做空 问候 阮文杰 [删除] 2012.07.16 14:22 #3019 我在这段代码中增加了几行--这就是使用LastOpenTicket()函数的地方,但它还是不喜欢它。我添加了-1选项。你觉得这里有什么问题吗? string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort) { 如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE) { 如果(OrderProfit() > 0 && OrderType() == OP_SELL) { WinLossPreviousShort = "W"; 返回(WinLossPreviousShort)。 } 如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1) { WinLossPreviousShort = "L"; 返回 (WinLossPreviousShort); } } } Mladen Rakic 2012.07.16 14:39 #3020 ... 你为什么不在该函数 中增加一个可能的结果:比如当LastOpenTicket() == -1时,WinLossPreviousShort="Na" crsnape@btinternet.com: 我在这段代码中增加了几行--这就是使用LastOpenTicket()函数的地方,但它仍然不喜欢。我添加了-1选项。你觉得这里有什么问题吗?//---- 判断之前的卖单是否有利可图 string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort) { 如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE) { 如果(OrderProfit() > 0 && OrderType() == OP_SELL) { WinLossPreviousShort = "W"; 返回(WinLossPreviousShort)。 } 如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1) { WinLossPreviousShort = "L"; 返回 (WinLossPreviousShort); } } } 1...295296297298299300301302303304305306307308309...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
是的,你可以
唯一的限制是,当它以一个死循环结束时,你不会遇到 "循环调用"。除此以外,对函数调用 没有任何限制。
说得好。我得看看这个问题。
关于函数的一个问题,是否可以在一个函数中调用一个函数?例如,我有这样一个函数。
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
如果(......等
然后我再调用它。
double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)我输入了这段代码来检索最后打开的订单。
//------计算最后打开的订单的票号的函数
int LastOpenTicket()
{
datetime lastTime = 0;
int lastTicket = -1; // 没有打开。
int pos;
for (pos = OrdersTotal() - 1; pos >= 0; pos--)
如果(OrderSelect(pos, SELECT_BY_POS) // 只有我的订单w/)
&& OrderMagicNumber() == MagicNumber // 我的神奇数字
&& OrderSymbol() == Symbol() // 和我的配对。
&& OrderOpenTime() > lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket()。
}
返回(lastTicket)。
}
它是一个从我的GetLots函数中调用的函数--编译器没有错误,但当我回测时,结果部分是完全清楚的。没有交易。这是因为在上面的代码中,第一笔交易没有以前的交易可以调用吗?
在日志中,它加载了外部变量(其中加载了神奇的42号,但在我的代码中是42552......),但此后就没有了。
...
你的魔法号码的声明是什么(应该是int MagicNumber; )
我输入这段代码是为了找回最后一笔开仓的订单。
//-----计算最后一次开票的票号的函数
int LastOpenTicket()
{
datetime lastTime = 0;
int lastTicket = -1; // 没有打开。
int pos;
for (pos = OrdersTotal() - 1; pos >= 0; pos--)
如果(OrderSelect(pos, SELECT_BY_POS) // 只有我的订单w/)
&& OrderMagicNumber() == MagicNumber // 我的神奇数字
&& OrderSymbol() == Symbol() // 和我的配对。
&& OrderOpenTime() > lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket()。
}
返回(lastTicket)。
}
它是一个从我的GetLots函数中调用的函数--编译器没有错误,但当我回测时,结果部分是完全清楚的。没有交易。这是因为在上面的代码中,第一笔交易没有以前的交易可以调用吗?
在日志中,它开始加载外部变量(其中加载了神奇的42号,但在我的代码中是42552......),但此后就没有了。是的,它是int MagicNumber = 42557
...
那么,我无法从你发布的代码中看出它为什么做错了(例如,为什么它接收了错误的MagicNumber)。如果有任何指定的MagicNumber的订单被打开,该代码应该工作(它将在已打开的订单中循环),如果没有已打开的订单或MagicNumber和符号不匹配,它将返回-1(正如你所期望的),所以该代码是正确的(现在测试了它,它工作得很好)。
对不起,但这是我从你发布的代码中所能做的一切
是的,它是int MagicNumber = 42557
如果以前没有开过单,而这是第一个,会发生什么?我知道它返回-1,但代码EA会不会运行失败,因为我的GetLots函数依赖于调用最后打开的订单票号。
如果它依赖于至少有一个先前打开的订单存在,那么它将失败
在你的条件中添加类似这样的内容。
如果(LastOpenOrder()==-1)
...那么你可以打开订单,如果所有其他的条件都满足的话
否则
...像以前一样检查 最后打开的订单,再加上其他的条件
(只是在猜测你现在如何写你的EA条件)
如果以前没有开过单子,而这是第一个,会发生什么情况?我知道它返回-1,但EA代码会不会运行失败,因为我的GetLots函数依赖于调用最后开出的订单票号。
你好,姆拉登。
你知道当随机 线在20级或80级交叉时如何设置开仓交易吗?
举例来说。
当随机指数在20级时相互交叉(超卖),做多
当随机指数在80级相互交叉时(超买),做空
问候
阮文杰
我在这段代码中增加了几行--这就是使用LastOpenTicket()函数的地方,但它还是不喜欢它。我添加了-1选项。你觉得这里有什么问题吗?
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
如果(OrderProfit() > 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
返回(WinLossPreviousShort)。
}
如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
返回 (WinLossPreviousShort);
}
}
}
...
你为什么不在该函数 中增加一个可能的结果:比如当LastOpenTicket() == -1时,WinLossPreviousShort="Na"
我在这段代码中增加了几行--这就是使用LastOpenTicket()函数的地方,但它仍然不喜欢。我添加了-1选项。你觉得这里有什么问题吗?
//---- 判断之前的卖单是否有利可图
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
如果(OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
如果(OrderProfit() > 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
返回(WinLossPreviousShort)。
}
如果((OrderProfit() < 0 && OrderType() == OP_SELL)|| LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
返回 (WinLossPreviousShort);
}
}
}