Ea正在创建多个相同的待定/限价订单 [请帮助] - 页 2 1234 新评论 [删除] 2015.11.11 12:34 #11 GumRai: 首先,不要试图在另一个函数中声明一个函数。我无法通过查看你所发布的代码来了解你想要做什么。所以我不能帮助你。感谢GumRai的及时回复。 我的程序有很多条件,如以下。我检查了到P12的情况。它就像一个支点。如果条件满足,那么它就会在这些水平P1, P2,....,其数量为12,开启限价交易。我不想在每个实例上都写上买入/卖出代码。这就是为什么做了单独的买入/卖出函数。下面是我卖出的旧代码。 if( P1 == 1 || P1 ==5 || P1 ==7) { if ( BuyTicket == 0) BuyCall(S0); } if( P2 == 1 || P2 ==5 || P2 ==7) { if ( BuyTicket == 0) BuyCall(S1); } .......................many more int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,expiration,Red); BuyTicket = 0; // counter tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); SellTicket = 0; } } } } return(SellTicket); } [删除] 2015.11.11 12:43 #12 这是一个例子。同样的交易放置在每个tick上。我需要在每个小时内放置这个。因为它是一个小时的中枢。 Keith Watford 2015.11.11 13:20 #13 int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,expiration,Red); BuyTicket = 0; // counter tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); SellTicket = 0; } } } } return(SellTicket); }当你打开一个卖出限制 时,你把BuyTicket设置为0。接下来你检查BuyTicket是否==0,当然它是的,你刚刚设置了它。然后你把SellTicket设置为0。下一个勾选,Sellticket==0,所以你打开一个卖出限制,再次将BuyTicket设置为0。等等,等等............ [删除] 2015.11.11 13:54 #14 GumRai: 当你打开一个卖出限制时,你把BuyTicket设置为0。接下来你检查BuyTicket是否==0,当然它是的,你刚刚设置了它。然后你把SellTicket设置为0。下一个勾选,Sellticket==0,所以你打开一个卖出限制,再次将BuyTicket设置为0。等等,等等............那么我是否应该删除你强调的那两行。我这样做了。现在只显示2个月数据回测的一小时结果。我注意到另一件事,在我的卖出看涨期权中,我有一个反向的买入交易。如果卖出交易被止损,那么买入交易将打开。现在,卖出交易功能 返回(Selltickets),这样做可以吗?谢谢你 [删除] 2015.11.12 05:25 #15 int SellCall(double SC) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { if( SellTicket == 0) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,0,Red); // reverse tradee // if ( Ask > SellStopLoss && BuyTicket == 0) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { BuyStopLoss = Ask - (StopLoss * CalcPoint1); BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); } } } } return(SellTicket);我现在明白了,在这段代码中,首先它检查sellticket==0是的,很明显,然后下了卖单,接下来buyticket==0是的,接下来下了买单...但是当返回时...再次检查sellticket==0,现在没有了...所以这就是为什么Ea在取完一组后就停止了。但如何消除这个问题。在我的EA中,不活跃的挂单在开始时间的每59分钟被删除。我是这样设置的。 [删除] 2015.11.14 04:42 #16 现在我以如下方式改变了代码,它读取了所有的支撑和阻力。我在一个小时内最多有6个支持和6个阻力。在这6个支撑和阻力中,如果有一个符合条件,它就会对这6个支撑和阻力开出限价单。这就是算法。因此,我将代码设置为以下方式的函数调用。int BuyCall( double BC) { if ( BuyTicket >= 0 && BuyTicket <= 5) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,TimeCurrent()+3540,Green); } return(0); } int SellCall(double SC) { if( SellTicket >= 0 && SellTicket <= 5) { SellStopLoss = SC + (StopLoss * CalcPoint1); SellTakeProfit = SC - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Limit Order",MagicNumber,TimeCurrent()+3540,Red); } return(0); }现在它运行了一个小时,每次买入/卖出都要检查6个级别。但只运行了一个小时。怎样才能使它完美地运行于全部数据集呢? Keith Watford 2015.11.14 05:02 #17 if ( BuyTicket >= 0 && BuyTicket <= 5)这只在策略测试器中起 作用,一旦前6个订单被打开,将不再有任何作用。你不能以这种方式为测试使用票号。 [删除] 2015.11.14 10:35 #18 GumRai:这只在策略测试器中起作用,一旦前6个订单被打开,将不再有任何作用。你不能以这种方式为测试使用票号。谢谢你的回答。那么我应该怎么做。如果我删除BuyTicket =>0或任何BuyTicket条件。那么EA就会在每个tick.....,给我带来148的订单结束错误。 William Roeder 2015.11.16 15:54 #19 cashcube: 那么我应该怎么做。 以前回答过。 Keith Watford 2015.11.16 22:22 #20 cashcube:谢谢你的答复。那我应该怎么做。如果我删除BuyTicket =>0或任何BuyTicket条件。那么EA就会在每个tick.....,给我带来148的订单结束错误。我们不知道你想做什么。如果你一次只想做一笔交易,那么在发送新的订单之前,请检查 是否有未结订单。如果你只想每个柱子有一笔交易,那么每个柱子只测试一次如果你想要一个组合条件,就测试这个组合。 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
首先,不要试图在另一个函数中声明一个函数。
我无法通过查看你所发布的代码来了解你想要做什么。所以我不能帮助你。
感谢GumRai的及时回复。 我的程序有很多条件,如以下。我检查了到P12的情况。它就像一个支点。如果条件满足,那么它就会在这些水平P1, P2,....,其数量为12,开启限价交易。我不想在每个实例上都写上买入/卖出代码。这就是为什么做了单独的买入/卖出函数。下面是我卖出的旧代码。
这是一个例子。同样的交易放置在每个tick上。我需要在每个小时内放置这个。因为它是一个小时的中枢。
当你打开一个卖出限制 时,你把BuyTicket设置为0。
接下来你检查BuyTicket是否==0,当然它是的,你刚刚设置了它。
然后你把SellTicket设置为0。
下一个勾选,Sellticket==0,所以你打开一个卖出限制,再次将BuyTicket设置为0。
等等,等等............
当你打开一个卖出限制时,你把BuyTicket设置为0。
接下来你检查BuyTicket是否==0,当然它是的,你刚刚设置了它。
然后你把SellTicket设置为0。
下一个勾选,Sellticket==0,所以你打开一个卖出限制,再次将BuyTicket设置为0。
等等,等等............
那么我是否应该删除你强调的那两行。我这样做了。现在只显示2个月数据回测的一小时结果。
我注意到另一件事,在我的卖出看涨期权中,我有一个反向的买入交易。如果卖出交易被止损,那么买入交易将打开。现在,卖出交易功能 返回(Selltickets),这样做可以吗?
谢谢你
我现在明白了,在这段代码中,首先它检查sellticket==0是的,很明显,然后下了卖单,接下来buyticket==0是的,接下来下了买单...但是当返回时...再次检查sellticket==0,现在没有了...所以这就是为什么Ea在取完一组后就停止了。但如何消除这个问题。在我的EA中,不活跃的挂单在开始时间的每59分钟被删除。我是这样设置的。
现在我以如下方式改变了代码,它读取了所有的支撑和阻力。
我在一个小时内最多有6个支持和6个阻力。在这6个支撑和阻力中,如果有一个符合条件,它就会对这6个支撑和阻力开出限价单。这就是算法。
因此,我将代码设置为以下方式的函数调用。
现在它运行了一个小时,每次买入/卖出都要检查6个级别。但只运行了一个小时。怎样才能使它完美地运行于全部数据集呢?
这只在策略测试器中起 作用,一旦前6个订单被打开,将不再有任何作用。
你不能以这种方式为测试使用票号。
这只在策略测试器中起作用,一旦前6个订单被打开,将不再有任何作用。
你不能以这种方式为测试使用票号。
谢谢你的回答。
那么我应该怎么做。如果我删除BuyTicket =>0或任何BuyTicket条件。那么EA就会在每个tick.....,给我带来148的订单结束错误。
谢谢你的答复。
那我应该怎么做。如果我删除BuyTicket =>0或任何BuyTicket条件。那么EA就会在每个tick.....,给我带来148的订单结束错误。
我们不知道你想做什么。
如果你一次只想做一笔交易,那么在发送新的订单之前,请检查 是否有未结订单。
如果你只想每个柱子有一笔交易,那么每个柱子只测试一次
如果你想要一个组合条件,就测试这个组合。