如何编码? - 页 344 1...337338339340341342343344345346347 新评论 tkuan77 2015.12.22 12:58 #3431 mladen: tkuan77 你必须找到最后一个收盘条,并查看最后一个收盘条的日期是否与当前日期相同。 你可以使用类似这样的函数来获得最后一个收盘的时间。 datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime(); } return(CloseTime); } 然后你可以检查日期是否相同 你好,mladen。 但是我在哪里插入这部分代码?很抱歉问这个问题,因为我自己对编码还很陌生,似乎还搞不清楚For循环的工作原理。 谢谢 阮先生 Mladen Rakic 2015.12.22 13:27 #3432 tkuan77: 你好,mladen。 但是我在哪里插入这部分代码?很抱歉问这个问题,因为我自己对编码还很陌生,而且似乎还搞不清楚For循环的工作原理。 谢谢 瑞安 阮先生 像这样。 如果(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))// 没有交易 tkuan77 2015.12.22 13:47 #3433 mladen: 瑞安 类似这样的情况: 如果(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))// 没有交易 嗨,mladen,我已经把代码加进去了,但它似乎发出了某种形式的全局变量错误。另外,我注意到你有一个没有定义的变量MagicNumber,请问这是做什么的?我已经把它加到了int下,但我不确定这个变量有什么用。 请指教。再次感谢您的耐心解答。 //---- 输入参数 extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| 专家初始化函数| //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ //-- 触发贸易 //+------------------------------------------------------------------+ int ticket, total, MagicNumber; double TP_Value, SL_Value; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime) CloseTime = OrderCloseTime()。 } return(CloseTime)。 } total = OrdersTotal(); // 检查当前开放的交易总数 if(total < 1) { if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime() )) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } } 如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) ) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1])。 SL_Value = (High[1] + 0.0010)。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1])。 SL_Value = (High[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1])。 SL_Value = (High[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } } } return(0); } //+------------------------------------------------------------------+ 编码帮助 How to code? Coding help Mladen Rakic 2015.12.23 14:35 #3434 tkuan77: 嗨,mladen,我已经把代码加进去了,但它似乎出现了某种形式的全局变量错误。另外,我注意到你有一个没有定义的变量MagicNumber,请问这是做什么用的?我已经把它加到了int下,但我不确定这个变量有什么用。 请指教。再次感谢您的耐心解答。 //---- 输入参数 extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ //-- 触发贸易 //+------------------------------------------------------------------+ int ticket, total, MagicNumber; double TP_Value, SL_Value; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime) CloseTime = OrderCloseTime()。 } return(CloseTime)。 } total = OrdersTotal(); // 检查当前开放的交易总数 if(total < 1) { if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime() )) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1])。 SL_Value = (Low[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } } 如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) ) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1])。 SL_Value = (High[1] + 0.0010)。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1])。 SL_Value = (High[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1])。 SL_Value = (High[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } } } return(0); } //+------------------------------------------------------------------+ 这是一个函数 把它移到start()函数的主体之外 tkuan77 2015.12.27 09:01 #3435 ↵ mladen: 那是一个函数 把它移到start()函数的主体之外 嗨,mladen,我试着把这个函数 移出启动函数,然而,我的EA仍然每天触发超过1次交易,而不是限制每天只触发1次交易。 谢谢你的指点。 疑问 //---- 输入参数 extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int MagicNumber; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime) CloseTime = OrderCloseTime()。 } return(CloseTime)。 } int start() { //+------------------------------------------------------------------+ //-- 触发贸易 //+------------------------------------------------------------------+ int ticket, total; 双TP_Value, SL_Value。 total = OrdersTotal(); // 检查当前开放的交易总数 如果(total < 1) { if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // 多头机构的价值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // 空头主体的价值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } } 如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) ) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // 多头机构的价值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // 空头主体的价值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } } } return(0); } //+------------------------------------------------------------------+ 编码帮助 How to code? Coding help Mladen Rakic 2015.12.27 09:50 #3436 tkuan77:↵嗨,mladen,我试着将该功能移出启动功能,然而,我的EA仍然每天触发1次以上的交易,而不是限制在每天只触发1次交易。 谢谢你的指点。 疑问 //---- 输入参数 extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| 专家初始化函数 | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int MagicNumber; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { 如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime) CloseTime = OrderCloseTime()。 } return(CloseTime)。 } int start() { //+------------------------------------------------------------------+ //-- 触发贸易 //+------------------------------------------------------------------+ int ticket, total; 双TP_Value, SL_Value。 total = OrdersTotal(); // 检查当前开放的交易总数 如果(total < 1) { if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // 多头机构的价值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // 空头主体的价值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值 SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。 返回(0)。 } } 如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) ) { 如果((Close[1] - Open[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // 多头机构的价值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // 空头主体的价值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } 如果((Open[1] - Close[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值 SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。 返回(0)。 } } } return(0); } //+------------------------------------------------------------------+ tkuan77 替换掉这个: if(total < 1) 替换为这句话。 if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ; 而且它不应该再这样做了 tkuan77 2015.12.28 13:28 #3437 mladen: tkuan77 替换这个: if(total < 1) 换成这个: if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) 。 而且它不应该再这样做了 你好mladen,在我输入代码后,不是每天触发一次交易,而是一次触发多次交易,直到账户爆仓。会不会是由于某些触发机制造成的? 请注意 tkuan77 2016.01.11 14:32 #3438 你好mladen,我有这样一段特殊的代码,在我有一笔交易运行后,我将关闭所有的待定交易。我如何设置为在我触发交易后只取消我当前的待定交易而不是所有未来的待定交易? 谢谢..... int new_del() { int i,a; int total = OrdersTotal(); string comentario,par; for (i=total-1; i >=0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。 如果(OrderType()==OP_BUY || OrderType()==OP_SELL) { for (a=total-1; a >=0; a--) { OrderSelect(a,SELECT_BY_POS,MODE_TRADES)。 comentario=OrderComment(); par=StringSubstr(comentario,0,6)。 如果(OrderType()==OP_SELLSTOP)// && comentario==Symbol()) { OrderDelete(OrderTicket())。 Print("Deleting SELL_STOP"," Ordertype:",OrderType())。 return(1); } 如果(OrderType()==OP_BUYSTOP)// && par==Symbol()) { OrderDelete(OrderTicket())。 Print("Deleting BUY_STOP"," Ordertype:",OrderType())。 return(1); } } } } } Deleting a pending order How to code? 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Mladen Rakic 2016.01.11 15:42 #3439 tkuan77: 你好,我有这样一段特殊的代码,在我有一笔交易运行后,会关闭我所有的待定交易。我如何设置为在我触发交易后,只取消我当前存在的待定交易,而不是所有未来的待定交易?thanks..... int new_del() { int i,a; int total = OrdersTotal(); string comentario,par; for (i=total-1; i >=0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。 如果(OrderType()==OP_BUY || OrderType()==OP_SELL) { for (a=total-1; a >=0; a--) { OrderSelect(a,SELECT_BY_POS,MODE_TRADES)。 comentario=OrderComment(); par=StringSubstr(comentario,0,6)。 如果(OrderType()==OP_SELLSTOP)// && comentario==Symbol()) { OrderDelete(OrderTicket())。 Print("Deleting SELL_STOP"," Ordertype:",OrderType())。 return(1); } 如果(OrderType()==OP_BUYSTOP)// && par==Symbol()) { OrderDelete(OrderTicket())。 Print("Deleting BUY_STOP"," Ordertype:",OrderType())。 return(1); } } } } } tkuan77 当前待定交易 "是什么意思,"未来待定交易 "是什么意思? tkuan77 2016.01.12 05:57 #3440 mladen: tkuan77 目前的待定交易 "是什么意思?"未来的待定交易 "又是什么意思? Hi mladen, 当前待定交易是指:一旦满足条件,EA将设置2个待定交易(1个多头和1个空头)。因此,如果说多头交易被触发,EA将自动取消空头交易。 未来的待定交易是指:在EA取消之前的待定交易后,如果再次满足条件,EA应该再设置2个待定交易(1个多头和1个空头)。然而,如果EA目前有一个正在运行的交易,EA将自动取消EA试图设置的任何待定订单。 我想做的是,在交易被触发后,让系统只取消当前的待定交易。 感谢帮助。 问候 1...337338339340341342343344345346347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
tkuan77
你必须找到最后一个收盘条,并查看最后一个收盘条的日期是否与当前日期相同。
你可以使用类似这样的函数来获得最后一个收盘的时间。
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
你好,mladen。
但是我在哪里插入这部分代码?很抱歉问这个问题,因为我自己对编码还很陌生,似乎还搞不清楚For循环的工作原理。
谢谢
阮先生
你好,mladen。
但是我在哪里插入这部分代码?很抱歉问这个问题,因为我自己对编码还很陌生,而且似乎还搞不清楚For循环的工作原理。
谢谢
瑞安阮先生
像这样。
如果(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))// 没有交易
瑞安
类似这样的情况:
如果(TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))// 没有交易
嗨,mladen,我已经把代码加进去了,但它似乎发出了某种形式的全局变量错误。另外,我注意到你有一个没有定义的变量MagicNumber,请问这是做什么的?我已经把它加到了int下,但我不确定这个变量有什么用。
请指教。再次感谢您的耐心解答。
//---- 输入参数
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- 触发贸易
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)
CloseTime = OrderCloseTime()。
}
return(CloseTime)。
}
total = OrdersTotal(); // 检查当前开放的交易总数
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime() ))
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
}
如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) )
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1])。
SL_Value = (High[1] + 0.0010)。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1])。
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1])。
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
}
}
return(0);
}
//+------------------------------------------------------------------+
嗨,mladen,我已经把代码加进去了,但它似乎出现了某种形式的全局变量错误。另外,我注意到你有一个没有定义的变量MagicNumber,请问这是做什么用的?我已经把它加到了int下,但我不确定这个变量有什么用。
请指教。再次感谢您的耐心解答。
//---- 输入参数
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- 触发贸易
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)
CloseTime = OrderCloseTime()。
}
return(CloseTime)。
}
total = OrdersTotal(); // 检查当前开放的交易总数
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime() ))
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1])。
SL_Value = (Low[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
}
如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) )
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1])。
SL_Value = (High[1] + 0.0010)。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1])。
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1])。
SL_Value = (High[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
}
}
return(0);
}
//+------------------------------------------------------------------+
这是一个函数
把它移到start()函数的主体之外
↵
那是一个函数
把它移到start()函数的主体之外嗨,mladen,我试着把这个函数 移出启动函数,然而,我的EA仍然每天触发超过1次交易,而不是限制每天只触发1次交易。![](https://c.mql5.com/forextsd/smiles/frown.png)
谢谢你的指点。![](https://c.mql5.com/forextsd/smiles/smile.png)
疑问
//---- 输入参数
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)
CloseTime = OrderCloseTime()。
}
return(CloseTime)。
}
int start()
{
//+------------------------------------------------------------------+
//-- 触发贸易
//+------------------------------------------------------------------+
int ticket, total;
双TP_Value, SL_Value。
total = OrdersTotal(); // 检查当前开放的交易总数
如果(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // 多头机构的价值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // 空头主体的价值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
}
如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) )
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // 多头机构的价值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // 空头主体的价值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
}
}
return(0);
}
//+------------------------------------------------------------------+
↵
嗨,mladen,我试着将该功能移出启动功能,然而,我的EA仍然每天触发1次以上的交易,而不是限制在每天只触发1次交易。![](https://c.mql5.com/forextsd/smiles/frown.png)
谢谢你的指点。![](https://c.mql5.com/forextsd/smiles/smile.png)
疑问
//---- 输入参数
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| 专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() >CloseTime)
CloseTime = OrderCloseTime()。
}
return(CloseTime)。
}
int start()
{
//+------------------------------------------------------------------+
//-- 触发贸易
//+------------------------------------------------------------------+
int ticket, total;
双TP_Value, SL_Value。
total = OrdersTotal(); // 检查当前开放的交易总数
如果(total < 1)
{
if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // 多头机构的价值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // 空头主体的价值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值
SL_Value = (Low[1] - 0.0010); // 对多头来说总是一样的。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green)。
返回(0)。
}
}
如果(Hour()==Entry_Hour_1st &&((Low[1] - Low[0]) > 0.00100) &&((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()) )
{
如果((Close[1] - Open[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // 多头机构的价值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // 空头主体的价值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
如果((Open[1] - Close[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // 包括头部和尾部的整个蜡烛的值
SL_Value = (High[1] + 0.0010); // 对空头来说总是一样的。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red)。
返回(0)。
}
}
}
return(0);
}
//+------------------------------------------------------------------+
tkuan77
替换掉这个:
if(total < 1)
替换为这句话。
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
而且它不应该再这样做了
tkuan77
替换这个:
if(total < 1)
换成这个:
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) 。
而且它不应该再这样做了你好mladen,在我输入代码后,不是每天触发一次交易,而是一次触发多次交易,直到账户爆仓。会不会是由于某些触发机制造成的?
请注意
你好mladen,我有这样一段特殊的代码,在我有一笔交易运行后,我将关闭所有的待定交易。我如何设置为在我触发交易后只取消我当前的待定交易而不是所有未来的待定交易?
谢谢.....
int new_del()
{
int i,a;
int total = OrdersTotal();
string comentario,par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES)。
comentario=OrderComment();
par=StringSubstr(comentario,0,6)。
如果(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket())。
Print("Deleting SELL_STOP"," Ordertype:",OrderType())。
return(1);
}
如果(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket())。
Print("Deleting BUY_STOP"," Ordertype:",OrderType())。
return(1);
}
}
}
}
}
你好,我有这样一段特殊的代码,在我有一笔交易运行后,会关闭我所有的待定交易。我如何设置为在我触发交易后,只取消我当前存在的待定交易,而不是所有未来的待定交易?
thanks.....
int new_del()
{
int i,a;
int total = OrdersTotal();
string comentario,par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES)。
comentario=OrderComment();
par=StringSubstr(comentario,0,6)。
如果(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket())。
Print("Deleting SELL_STOP"," Ordertype:",OrderType())。
return(1);
}
如果(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket())。
Print("Deleting BUY_STOP"," Ordertype:",OrderType())。
return(1);
}
}
}
}
}tkuan77
当前待定交易 "是什么意思,"未来待定交易 "是什么意思?
tkuan77
目前的待定交易 "是什么意思?"未来的待定交易 "又是什么意思?
Hi mladen,
当前待定交易是指:一旦满足条件,EA将设置2个待定交易(1个多头和1个空头)。因此,如果说多头交易被触发,EA将自动取消空头交易。
未来的待定交易是指:在EA取消之前的待定交易后,如果再次满足条件,EA应该再设置2个待定交易(1个多头和1个空头)。然而,如果EA目前有一个正在运行的交易,EA将自动取消EA试图设置的任何待定订单。
我想做的是,在交易被触发后,让系统只取消当前的待定交易。 感谢帮助。![](https://c.mql5.com/forextsd/smiles/smile.png)
问候