新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 80

 
Artyom Trishkin:

在测试器中的不同符号上?还是在演示/真实的不同符号上?还是在这个符号的测试器中?还是在这个符号上的演示/真实?

为什么要把你的一切都掏出来?

你的观点是什么?你在哪里试的有什么区别?问题是,点是否=0。如果可以,我如何正确地编写代码,以便不遇到错误:除以零
 
LuckySith:

对不起,我很书呆子 - 我不太明白。
也许你有最简单的指标与一些代码,我有一个类比的理解?因为我找不到一个。

我有一个非常简单的代码,把点放在条形图的中间。我怎样才能使文本在我悬停在它们上面时出现,或一个方框,等等。



#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black
//---- input parameters
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
//----  
   for(int i=limit; i>=0; i--)
     {
      double       fabody0 = fabs(Close[i]-Open[i]);
      double       fabody1 = fabs(Close[i+1]-Open[i+1]);
      double       fabody2 = fabs(Close[i+2]-Open[i+2]);
      double       fabody3 = fabs(Close[i+3]-Open[i+3]);
      double       fabody4 = fabs(Close[i+4]-Open[i+4]);
      double       fabody5 = fabs(Close[i+5]-Open[i+5]);
      double       fabody6 = fabs(Close[i+6]-Open[i+6]);
      double       fabody7 = fabs(Close[i+7]-Open[i+7]);
      if((fabody0>fabody1) && (fabody0>fabody2) && (fabody0>fabody3) && (fabody0>fabody4) && (fabody0>fabody5) && (fabody0>fabody6) &&(Volume[i]>Volume[i+1]))
      {  
         if (((Close[i]>Open[i])&&(Low[i]+(High[i]-Low[i])/2>Low[i+1]+(High[i+1]-Low[i+1])*0.9))||((Close[i]<Open[i])&&(Low[i]+(High[i]-Low[i])/2<Low[i+1]+(High[i+1]-Low[i+1])*0.1)))
         ExtMapBuffer1[i]=(iHigh(Symbol(),0,i)+iLow(Symbol(),0,i))/2;
      }
     }
//----
   return(0);
  }
尝试
附加的文件:
gmxdk8j.mq4  6 kb
 
Gevorg Hakobyan:
你的观点是什么?你在哪里试的有什么区别?问题是,点是否=0。如果可以,我应该如何写出正确的代码,才不会遇到错误:除以零
随你便吧。
所以在除法前要检查除法器是否为零。
还以为你对原因感兴趣,而不是对结果感兴趣,还有适当的拐杖。
 
Artyom Trishkin:
随你便吧。
所以在除法前要检查除法器是否为零。
还以为你对原因感兴趣,而不是对结果感兴趣,还有适当的拐杖。
我还没有读完整个对话,但我怀疑是打印小数点后第五位的问题。
 
Alexey Viktorov:
我还没有读完整个对话,但我怀疑是打印小数点后第五位的问题。
不,它除以Point(),得到的是除以0
这就是为什么我想得到一个连贯的答案,它是如何以及从哪里获得符号数据的。

 
Artyom Trishkin:
不,它除以Point(),得到除以0 的结果。
我试图得到一个明确的答案,它是如何以及从哪里获取符号的数据的。

如果(v=="NZD")
{
h=(iClose("NZDUSD",p,b)-iOpen("NZDUSD",p,b))/MarketInfo("NZDUSD",MODE_POINT)+
(iOpen("EURNZD",p,b)-iClose("EURNZD",p,b))/MarketInfo("EURNZD",MODE_POINT)+
(iOpen("GBPNZD",p,b)-iClose("GBPNZD",p,b))/MarketInfo("GBPNZD", MODE_POINT)+
(iOpen("AUDNZD",p,b)-iClose("AUDNZD",p,b))/MarketInfo("AUDNZD",MODE_POINT)+
(iClose("NZDJPY",p,b)-iOpen("NZDJPY",p,b))/MarketInfo("NZDJPY",MODE_POINT)+
(iClose("NZDCAD",p,b)-iOpen("NZDCAD",p,b))/MarketInfo("NZDCAD",MODE_POINT)+
(iClose("NZDCHF",p,b)-iOpen("NZDCHF",p,b))/MarketInfo("NZDCHF",MODE_POINT) 。
}
 
Alexey Viktorov:
我还没有读完整个对话,但我怀疑是打印小数点后第五位的问题。
这可能是问题所在吗?
 
Gevorg Hakobyan:
这可能是问题所在吗?
不,这只是在打印时和警报中第五位数字的隐蔽性问题。
 
Alekseu Fedotov:
尝试
一般来说,这是你需要的,但问题是,描述会相当大,而这种方法只能写几个字--其余的就不显示了。
 

你好。

请帮助。

现在,以下每个顺序的手数都在增加,1,2,3,4,5...。

我希望每个订单的手数不是每个订单都增加,而是以3为单位增加 所以1,1,1,1,2,2,2,3,3,3......。


extern double   LotStop        = 0.01;
extern double   Plus_LotStop   = 0.01;
extern double   Plus_N_ORD  = 3;        //каждые N ордеров
void OnTick()
  {
//---
      for (int i=1; i<=OrdersStop; i++)
   {
         if((Close[1]<Open[1]&&Close[2]>Open[2]&&NumberOfPositions(Symbol(), -1,_Magic)<1))
         {
            OPENORDER (OP_BUYSTOP,PriceBS,LOTs,_Magic,i);
            numB++;
            PriceBS = NormalizeDouble(PriceBS+Step_Stop*Point,Digits);
          
            OPENORDER (OP_SELLSTOP,PriceSS,LOTs,_Magic,i);
            numS++;
            PriceSS = NormalizeDouble(PriceSS-Step_Stop*Point,Digits);
         }
      
      LOTs=LOTs+Plus_LotStop;
      }
  }
原因: