[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 444

 
Elena56:

在优化过程中,我检查了可视化项目并按下了启动键,之后策略测试器渐渐消失,可视化标记也消失了,测试以非常缓慢的速度进行着。这是什么意思? 我正在加载报价和更新。(MT4)

这就是优化,而不是测试。
 

先生们,请帮帮我吧。我有一个问题--不想在订单结束时写文字,请告诉我为什么。

   OrderSelect(otbH,SELECT_BY_TICKET);
   if(OrderSelect(otbH,SELECT_BY_TICKET)==true)
   { 
      Print("1");
      if(OrderCloseTime()>0)
      {
         Print("2");
         ObjectCreate("ndp"+OrderTicket(),OBJ_TEXT,0,0,0);
         ObjectSet("ndp"+OrderTicket(),OBJPROP_TIME1,TimeCurrent());
         ObjectSet("ndp"+OrderTicket(),OBJPROP_PRICE1,OrderClosePrice());
         ObjectSetText("ndp"+OrderTicket(),OrderProfit(),5,"Arial",Aqua);
      } 
   }    
   
   

otbH - 这是票号。有趣的是,数字 "1 "可以打印出来,但数字 "2 "却拒绝打印。我搞不清楚原因......因为它选择的顺序...向我解释...

 
CLAIN:

先生们,请帮帮我吧。我有一个问题--不想在订单的最后写上文字,请告诉我为什么。

otbH - 这是票号。有趣的是,数字 "1 "可以打印出来,但数字 "2 "却拒绝打印。我搞不清楚原因......因为它选择的顺序...向我解释...


该订单是否关闭?
 

订单首先打开,然后关闭。

这个脚本在每次打勾时都会运行,所以在某一时刻它肯定会被关闭...

先按票据选择订单--OrderSelect(otbH,SELECT_BY_TICKET);--它将选择它,不管它在哪里,对吗?

然后它应该确定它是关闭还是打开...但由于某些原因,它并没有...

 
CLAIN:

订单首先打开,然后关闭。

这个脚本在每次打勾时都会运行,所以在某一时刻它肯定会被关闭...

我先按票据选择订单--OrderSelect(otbH,SELECT_BY_TICKET);--它将选择它,不管它在哪里,对吗?

然后它应该确定它是关闭还是打开...但由于某些原因,它并没有...


尝试选择一个封闭的订单
 
告诉我如何,我不知道如何。
 
CLAIN:
告诉我如何,我不知道如何。

   int total=OrdersHistoryTotal();
   for (int i=total-1;i>=0;i--) 
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==MagicNumber )
            {
               // Ваши действия с ордером
            }
         }
      }
   }
 

问题是--开盘价 是在两个移动的交叉点上计算的(夸张的),在测试中--一切正常,但当你把它放在演示中时,开盘价是假的(因为在一个条形图的形成过程中,价格在里面从最小跳到最大),因此想法是在条形图形成时才考虑到交叉,即条形图形成后(看到交叉),然后在下一个市场进入,考虑到交叉。

 
DOCTORS:

问题是这样的:开盘价是通过两个滑块的交叉来计算的(夸张的),在测试中一切正常,但当你把它放在演示中时,开盘价是假的(因为在创建一个条形的过程中,里面的价格从最小跳到最大),因此想法是在条形形成后才考虑交叉,即条形形成后(我们看到交叉),然后用交叉进行下一个市场的进入。

奇怪的是,为什么在测试器中没有问题--在测试器中,零条也没有形成,也会有错误的交叉。

在第1和第2小节上寻找交叉点。如果在第二条上,МА1<=МА2,而在第一条上,МА1>МА2,这意味着МА1已经从下往上越过了МА2。对于自上而下,则是相反的情况。

只做减法的比较。

   double MA1=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,1);
   double MA2=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,2);
   if (NormalizeDouble(MA1-MA2,Digits)<=0)
   if (NormalizeDouble(MA1-MA2,Digits)>0) {
      // MA1 пересекла MA2 снизу-вверх
      }

对于自上而下,反之亦然。

你可以不与零比较,而是与某个最小值比较,例如0.1*Point。

 
artmedia70:

奇怪的是,为什么在测试器中没有问题--在测试器中,零条也没有形成,也会有错误的交叉。

在第1和第2小节上寻找交叉点。如果在第二个MA1<=MA2,在第一个MA1>MA2,那么MA1已经从下到上越过了MA2。对于自上而下,则是相反的情况。

只做减法的比较。

对于自上而下,反之亦然。

你可以不与零比较,而是与某个最小值比较,例如0.1*Point。


非常感谢您!

原因: