MMA_Breakout_strategy_volume I (没有MM或MF) - 由WhooDoo22编码 - 页 2

 
同样,有多种方法来选择订单,例如,我可以使用布尔值来检查一个订单是开放还是关闭。例子:订单被发送,五个布尔值被设置为真。当移动平均线开始交叉时,布尔值将被设置为假。如果某些布尔变量为真,某些移动平均线交叉,某些布尔变量被宣布为假,订单的某个手数被关闭。 还有其他方法,但我没有多想。我只是希望为你提供一个解决方案。我希望它是令人满意的。我相信我会找到一个更简单的方法,但同样,我也没有多加考虑。它仍然很重要,但在这个策略中,它不像MF或MM那样难以编码。谢谢你。
 
如果我有一个曾经交易过的真实账户,而且目前没有任何未结的真实订单 ......如果我在欧元兑美元M30上运行你的EA,会发生什么? 它会进行交易吗?
 

顺便说一下,我在策略测试器中 运行了你的EA,结果有一个11GB的错误日志文件......例如......。

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify错误1

23:08:49 2007.05.06 22:00 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: close #6 buy 0.01 EURUSD at 1.36028 sl: 1.31028 at price 1.35960

23:08:49 2007.05.06 22:01 MMA_Breakout_strategy_volumeaIk_withouteMMjoreMF_u-rcodedmbywWhooDoo22 EURUSD,M30: OrderModify函数的未知票6

不能修改6号票,因为它刚刚被关闭 . . .
 
WhooDoo22:
我相信有多种方法来选择订单,所有选择订单的方法都应该使用OrderSelect()函数。说到这里,我不明白为什么会失败,因为在策略测试器中,EA显然对所有订单都执行了OrderClose()函数而没有错误。

你的 "关闭订单 "显然是不工作的。如果你检查过 你的退货代码,你就会知道。你的orderSelect是不工作的,但你没有检查。

如果I不是票号,那么你的orderSelect就失败了,其他的也是如此。

如果我是一个票号,下一个票号不是i+1(除了在测试器中)。

   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.04)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,25,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.03)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,50,0,MODE_SMMA,PRICE_CLOSE,1)))      {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
     }}}}
     
   OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderLots()==0.02)                                                                       {
   if(OrdersTotal()>0)                                                                         {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<(iMA(NULL,0,100,0,MODE_SMMA,PRICE_CLOSE,1)))     {  
     {
      OrderClose(i,0.01,Bid,30,CLR_NONE); 
      i++;
     }
 

西蒙。

如果我有一个真实账户...

RE:我强烈不建议你在实盘账户余额 上运行第一卷!当然,选择权在你手中,但我代表你,强烈建议你在第一卷到第二卷的演变完成之前,不要在真实账户上运行它。第一卷仍在开发中,在其完全编码之前不应运行。我不确定会发生什么,因为我还没有在真实账户上测试过它。我理解它还没有完成,并选择在启动真实账户测试之前满足它的基本要求。


顺便说一下,...

回复:我相信我明白这个错误是怎么回事......这个错误反映了 "EMERGENCY SL "代码块中的一个错误。我从来没有真正把力量集中在这上面,因为它没有那么难编码。我对它进行了部分编码,但并没有完成它的成熟度。EMERGENCY SL "代码块缺乏重要的定制。我相信,如果你完全删除卖出和买入 "EMERGENCY SL "代码块,你将不会收到11G的错误列表。之所以一开始就有11G的错误,是因为我相信这是同一个错误在历史上不断重复被测试的过程。

谢谢你。


威廉。

我要说的是,我没有像西蒙那样与你讨论代码的历史,但我希望继续推进你的帖子(感谢你的帖子!它是受欢迎的)。

你希望在第一/二卷中看到的是什么?

我正在严格地运行测试,并添加必要的代码进行测试,以保证其交易价值。然后,我将对剩下的代码问题进行微调,以确保在现场/模拟中的安全交易。

谢谢你。

 
RaptorUK:
如果我有一个曾经交易过的真实账户,而且目前没有开放的真实订单......如果我在欧元兑美元M30上运行你的EA,会发生什么? 它会进行交易吗?

WhooDoo22:

西蒙。

如果我有一个真实账户...

RE:我强烈不建议你在实盘账户余额上运行第一卷! 当然,选择权在你,但我代表你,强烈建议你在实盘账户上运行它,直到它从第一卷到第二卷的演变已经完成。第一卷仍在开发中,在其完全编码之前不应运行。我不确定会发生什么,因为我还没有在真实账户上测试过它。我理解它还没有完成,并选择在启动真实账户测试之前满足它的基本要求。


我想说的是,如果有任何账户历史记录,你代码中的这几行将阻止任何交易 ......

   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  
   if(OrdersHistoryTotal()==0)                                                                 
      {
      if(OrdersTotal()<MaxOrders)  


使用OrderSend() 下单的其他地方是有现有订单的地方 ... ...所以如果历史上有任何旧的订单,你的EA将不会进行任何交易 ... ...如果你在Demo或Live上测试你的代码,你可能会发现这一点。

 

西蒙。

我想说的是...

RE:明白了。你认为是否有可能使用OrderSelect()函数 来搜索一个唯一的票据变量,然后下面会出现包含 "if (OrdersHistoryTotal()==0){"的代码块。由于OrderSelect()函数选择了唯一的票据变量 "ticket",而OrdersHistoryTotal()函数只搜索唯一的票据变量的交易历史,因为上面的OrderSelect()函数,这样做是否行不通。if语句 "只搜索历史上一个特定变量的订单,即唯一的票据变量。

//*************************
// BUY ORDER OPEN SECTION ;
//*************************

   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   if(OrdersHistoryTotal()==0)                                                                 {
   if(OrdersTotal()<MaxOrders)                                                                 {
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,2)<(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,2)))     { 
   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)>(iMA(NULL,0,200,0,MODE_SMMA,PRICE_CLOSE,1)))     { 
     {
      ticket=OrderSend(Symbol(),OP_BUY,0.05,Ask,30,0,0,"",0,0,Blue);    
      i++;
     }
     }}}}

谢谢你。

 
WhooDoo22:

西蒙。

我想说的是...

RE:明白了。你认为是否有可能使用OrderSelect()函数来搜索一个唯一的票据变量,下面会有包含 "if OrdersHistoryTotal()==0{"的代码块。由于OrdersHistoryTotal()函数只搜索唯一的票据变量的先前交易,这难道不可行吗?这个 "if语句 "只是在搜索一个特定变量的历史订单,即唯一的票据变量。

谢谢你。

我想你有点糊涂了 ......你说:"由于OrdersHistoryTotal()函数只搜索唯一票据变量的先前交易,这就不能工作吗?"这是不正确的,查看文档,OrderHistoryTotal() 是这样做的。

"返回加载到终端的账户历史中的关闭订单数量。历史列表的大小取决于终端的 "账户历史 "标签的当前设置。


它与任何票据号码或票据变量或神奇数字或其他任何东西无关 ...... 它返回历史池中的交易总数...... 唯一的限制因素是你选择在账户历史标签中显示什么 .........所有历史,过去3个月,上个月或自定义时期。
 
还有一点 ......如果我一直在使用您的EA,并且它有一笔交易,那么我需要关闭我的电脑几分钟,当我重新启动MT4,您的EA启动时,它将永远找不到未结订单。你所有的OrderSelect()调用 都是按票据选择的 ......要么使用你的票据 变量,要么使用你的i 变量,这两个变量都没有办法保存我未结订单的票据号码。
 

西蒙。

我想你有点糊涂了......。

RE: 第二卷必须根据一个条件开始订单的发送过程。一 旦第一个订单被发送(基于条件),OrderClose()函数 会阻止执行所有未来的交易。请试着把这看成是一个循环。根据条件让球滚动起来,然后一旦第一个订单(滚球订单)被关闭,循环就开始了。这个周期继续计算数字并检查活动条件,直到未来条件得到满足。

谢谢你