任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 65

 

祝大家今天愉快如果我试图在拖网上设置止损,在策略测试器中就会失效,但我从未失去过一个。在策略测试器中,当EA应该设置止损时,它没有这样做,但有时会这样做,但我没有发现任何规律性,测试的准确性受到很大影响。演示存款上的同一专家顾问显示,拖网工作。终端没有报告任何错误。这是代码的错误还是终端的错误?你能帮助我理解它吗?我已经尝试了所有的代码,不明白哪里出了问题,我不想改变跟踪策略。我附上了专家顾问的完整代码,下面是trawl的代码(由Yury Dzyuban 略加修改的烛台影子上的追踪)。

void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent) {  
   int i;
   double new_extremum;

   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET))) {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
   } 
   if (OrderType()==OP_BUY) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i); else if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
      }  
  
      if ((((new_extremum - indent*Point)>OrderStopLoss() + 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
   }
   if (OrderType()==OP_SELL) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i); else if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
      }         
      if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss() - 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());     
   }      
}

double getLots(double newSL) {
   int opnTime = 0; // время открытия трейда для цикла пересчета позиций
   double lotSum = 0; 
   for (int i = 0; i <= OrdersTotal()-1; i++) {
      OrderSelect(i, SELECT_BY_POS);     
      if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; }
      }
   }   
   return(lotSum);
}
附加的文件:
avalanche.mq4  12 kb
 
你在什么时间范围内测试,质量如何?
 

eurusd,m1,99%,90%。

起初我使用标准的tick历史,用MT加载,我发现了这个问题,以及报价历史中无法解释的差距,所以我已经切换到Tick Data Suite,我从Dukascopy下载报价,质量从90增加到99,但问题仍然存在。

ZS: 可能在现实生活中也有同样的情况,或者我测试的时间不够长(大约3周),在此期间我不得不手动关闭几次,因为没有安装trawl,但我认为这是因为我不得不定期断开终端机器的连接,这在某种程度上影响了EA的运行,最近也许在一周前将其转移到VPS,现在似乎也出现了同样情况

 

测试是在一个等于tmfrm变量值的时间框架上进行的,还是没有?

如果没有,你应该确保在tmfrm时间框架上有一个历史记录...

和变量bar_n中传送的坦克数量对应于变量tmfrm中传送的时间框架 ?

 
keekkenen:

测试是在一个等于tmfrm变量值的时间框架上进行的,还是没有?

如果没有,你应该确保在tmfrm时间框架上有一个历史记录...

和变量bar_n中传递的坦克数量对应于变量tmfrm中传递的时间框架 ?


是的,我想你是对的,我忽略了别人函数的代码,没有深入研究,没有考虑到这个参数。因此,止损 被设定为一个不同的时期。谢谢你的帮助。

ZS:事情总是这样:一些小事使代码不能按我希望的方式工作。

 

下午好!谁知道记录本上的红砖到底是怎么回事?

2013.08.05 08:00:41 '9291791': 信号 - 未找到更新信号 - 基准中的7400

我的代码没有任何问题!而且还有信号!这意味着什么呢?

 
Mepkypuu:


是的,看来你是对的,我忽略了别人的函数代码,没有详细研究,没有考虑到这个参数。因此,止损被设定为一个不同的时期。谢谢你的帮助。

ZS:总是这样:一些小事使代码不能按我希望的方式工作。


我对它高兴得太早了,跟踪已经开始工作得更好了,但在历史上仍有不工作的情况,也就是说,问题只是部分地解决了。
 
splxgf:

因为在运行过程中采取的是当前的点差,但在新闻和晚间,它与每日点差不同。

你如何解决传播问题?毕竟,OrderSend 指定的是Ask或Bid。
 
Mepkypuu:

我对它还不满意,拖尾的效果比较好,但仍有不工作的情况,也就是说,问题只是部分解决了。

你所说的尾随并不是真正的尾随,它是以不同的方式计算的,其行为可能是不符合逻辑的。
 
Leo59:

如何才能解决差价问题?毕竟,OrderSend指定的是Ask或Bid。
在测试器下的TF!