订单关闭不工作 - 页 5 12345 新评论 Lee Jia 2014.02.27 09:27 #41 谢谢GumRai Lee Jia 2014.02.27 16:57 #42 你好。 我把EA附在几个不同的货币图表上。如果条件满足,EA将在一个图表中开出许多订单。怎样编码才能确保每个图表只有一个订单? Keith Watford 2014.02.27 23:04 #43 chuale:你好。我把EA附在几个不同的货币图表上。如果条件满足,EA将在一个图表中开出许多订单。怎样的编码才能确保每个图表只有一个订单? 循环查看未结订单,并检查 神奇的数字和符号。 如果已经有一个订单了,就不要再开了。 PS.你真的应该开一个新的主题,因为你的问题与这个主题的标题没有任何关系:) Daniel Petrovai 2014.02.28 01:15 #44 chuale:嗨,threwel。Time[0]是指第0条的时间吗?是否有Time[1],Time[2]等?我试着用谷歌搜索了一下,但网上的信息不多。另外,如果我把这个EA连接到两个货币对上,这是否意味着OrderSelect只选择图表本身的订单,还是终端的所有订单? Time[0]是当前 条形图开始的时间。是的,Time[1]是上一个柱子开始的时间,以此类推。 如果您想在多个图表上运行同一个EA,您需要确保每个EA的 "MagicMunber "变量是不同的,即使您在不同图表上有相同的符号。 这样,EA的订单就不会相互干扰了。 OrderSelect()并不是从图表上获取数值,而是从服务器上获取。 关于您的账户和订单的信息存储在服务器上,这就是为什么当您关闭您的电脑时,您的订单止损或止盈仍然被执行。 Daniel Petrovai 2014.02.28 01:20 #45 chuale: 嗨,threwel。 为什么我在编码 "if(ticket<0)Print("Error OP_BUY order failed, error: "+GetLastError()); "时得到这个警告信息 "implicit conversion from 'number' to 'string' postin forum.mq4 69 61"? 如果你想用Comment()显示一个双倍变量,或者你想用Print()打印,你必须用DoubleToString()函数 将其转换成字符串。 对于int变量来说,转换是很明显的,所以如果你不使用IntToString()来做,它仍然会编译和工作,因为它是如此明显。 Daniel Petrovai 2014.02.28 01:36 #46 chuale: 你好。 我把EA附在几个不同的货币图表上。如果条件得到满足,EA将在一个图表中打开许多订单。怎样的编码才能确保每个图表只有一个订单? 你好,Chuale。 我对你的EA做了一些修改,使其能够正常工作。 MagicNumber是一个变量,你必须确保它在每个图表上都是不同的! 如果你想让我向你解释为什么以及这些改动是如何工作的,请联系我,如果可以的话,我很乐意帮助你。 你可以自己运行一些测试,看看它是如何工作的,我在USDJPY上测试过。 最大和最小变量在你的条件中取代了1和-1的值,所以你可以优化,看看其他值是否效果更好。 if(bar2 <-1) //changed to if(bar2 < Min if(bar2 > 1) //changed to if(bar2 > Max 你知道如何优化参数 吗? 如果你有任何问题,请告诉我或发邮件。 这里是代码。 //+------------------------------------------------------------------+ //| chuale_test1.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=150; extern double Lots=0.1; extern double StopLoss=300; extern int Max = 6; extern int Min = -9; extern int MagicNumber = 12345; extern int Slip = 3; double bar1; double bar2; double bar3; double bar3max,bar3min; int myTrades,ticket; datetime previousTime; int xMultiply; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- if(Digits==3) xMultiply=100; if(Digits==5) xMultiply=10000; //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { myTrades = CountTrades(); // bar1=(iClose(Symbol(),0,2)-iClose(Symbol(),0,3))*xMultiply; bar2=(iClose(Symbol(),0,1)-iClose(Symbol(),0,2))*xMultiply; bar3=(iClose(Symbol(),0,0)-iClose(Symbol(),0,1))*xMultiply; // if(myTrades>0) { if(bar3<Min) CloseThisSymbolAll("OP_BUY"); if(bar3>Max) CloseThisSymbolAll("OP_SELL"); } // if(Time[0]==previousTime) return(0); previousTime=Time[0]; // if(myTrades<1) { if(bar2>1) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green); if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); return(0); } if(bar2<-1) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red); if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError()); return(0); } } return(0); } //======================================================================== int CountTrades() { int count=0; int trade; for(trade=OrdersTotal()-1;trade>=0;trade--) { OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber) if(OrderType()==OP_SELL || OrderType()==OP_BUY) count++; } return(count); } //======================================================================== void CloseThisSymbolAll(string direction) { string dir = direction; int trade; for(trade=OrdersTotal();trade>=0;trade--) { OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()!=Symbol()) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY && dir == "OP_BUY")OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue); if(OrderType()==OP_SELL&& dir == "OP_SELL")OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red); } } } //======================================================================== Lee Jia 2014.02.28 04:01 #47 嗨,threwel。 非常感谢你。你是非常善良和有帮助的。我会先通过你的编码。再次感谢。 Lee Jia 2015.04.21 04:02 #48 嗨,Thrdel。这意味着我必须在每个回溯测试 中尝试不同的最大和最小值,以确定哪个是最优化的值?谢谢 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好。
我把EA附在几个不同的货币图表上。如果条件满足,EA将在一个图表中开出许多订单。怎样编码才能确保每个图表只有一个订单?
你好。
我把EA附在几个不同的货币图表上。如果条件满足,EA将在一个图表中开出许多订单。怎样的编码才能确保每个图表只有一个订单?
循环查看未结订单,并检查 神奇的数字和符号。
如果已经有一个订单了,就不要再开了。
PS.你真的应该开一个新的主题,因为你的问题与这个主题的标题没有任何关系:)
嗨,threwel。
Time[0]是指第0条的时间吗?是否有Time[1],Time[2]等?我试着用谷歌搜索了一下,但网上的信息不多。另外,如果我把这个EA连接到两个货币对上,这是否意味着OrderSelect只选择图表本身的订单,还是终端的所有订单?
Time[0]是当前 条形图开始的时间。是的,Time[1]是上一个柱子开始的时间,以此类推。
如果您想在多个图表上运行同一个EA,您需要确保每个EA的 "MagicMunber "变量是不同的,即使您在不同图表上有相同的符号。
这样,EA的订单就不会相互干扰了。
OrderSelect()并不是从图表上获取数值,而是从服务器上获取。
关于您的账户和订单的信息存储在服务器上,这就是为什么当您关闭您的电脑时,您的订单止损或止盈仍然被执行。
嗨,threwel。
为什么我在编码 "if(ticket<0)Print("Error OP_BUY order failed, error: "+GetLastError()); "时得到这个警告信息 "implicit conversion from 'number' to 'string' postin forum.mq4 69 61"?
如果你想用Comment()显示一个双倍变量,或者你想用Print()打印,你必须用DoubleToString()函数 将其转换成字符串。
对于int变量来说,转换是很明显的,所以如果你不使用IntToString()来做,它仍然会编译和工作,因为它是如此明显。
你好。
我把EA附在几个不同的货币图表上。如果条件得到满足,EA将在一个图表中打开许多订单。怎样的编码才能确保每个图表只有一个订单?
你好,Chuale。
我对你的EA做了一些修改,使其能够正常工作。
MagicNumber是一个变量,你必须确保它在每个图表上都是不同的!
如果你想让我向你解释为什么以及这些改动是如何工作的,请联系我,如果可以的话,我很乐意帮助你。
你可以自己运行一些测试,看看它是如何工作的,我在USDJPY上测试过。
最大和最小变量在你的条件中取代了1和-1的值,所以你可以优化,看看其他值是否效果更好。
if(bar2 > Max你知道如何优化参数 吗?
如果你有任何问题,请告诉我或发邮件。
这里是代码。
嗨,threwel。
非常感谢你。你是非常善良和有帮助的。我会先通过你的编码。再次感谢。
嗨,Thrdel。
这意味着我必须在每个回溯测试 中尝试不同的最大和最小值,以确定哪个是最优化的值?
谢谢