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

 
Youri Lazurenko:

我无法解决一个看似简单的问题。在图表的某个地方,有一个MA交叉点。我们在穿越后找到一个酒吧。我如何计算从该栏到当前栏的栏数

该特定酒吧的编号。不是吗?
 
Youri Lazurenko:

我无法解决一个看似简单的问题。在图表的某个地方,有一个MA交叉点。我们在穿越后找到一个酒吧。我如何计算从这个柱子到当前柱子的数量


似乎已经完成了(至少屏幕上的注释是正确的)。感谢"条数",我想我已经找到了解决办法。我使用iTime函数来确定所需条形图的日期时间。草图看起来是这样的。

空白的OnTick()

{

int nBarsUp, nBarsDn;

datetime date_dn = iTime(NULL, 0, IntersectionDN())。

datetime date_up = iTime(NULL, 0, IntersectionUp())。

datetime date_1 = iTime(NULL, 0, 1);

nBarsUp = Bars(Symbol(), 0, date_up, date_1);

nBarsDn = Bars(Symbol(), 0, date_dn, date_1);

Comment("Number of long bars: " + nBarsUp + "\n "+ "Number of short bars: " + nBarsUp + "\n")

"短柱的数量:" + nBarsDn)。

}

//+------------------------------------------------------------------+

int IntersectionDN()

{

for(int i = 0; i < 36; i++)

{

如果(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1) )

return(i-1);

}

返回(-1)。

}

交叉点上升()

{

for(int i = 0; i < 36; i++)

{

如果(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1)

return(i-1);

}

返回(-1)。

}

 
Youri Lazurenko:

似乎已经成功了(至少屏幕上的评论是正确的)。感谢"条数",我想我已经找到了一个解决方案。我使用iTime函数来确定所需酒吧的日期时间。草图看起来是这样的。

void OnTick()

{
   int nBarsUp, nBarsDn;
   datetime date_dn = iTime(NULL, 0, IntersectionDN());
   datetime date_up = iTime(NULL, 0, IntersectionUp());
   datetime date_1  = iTime(NULL, 0, 1);
  
   nBarsUp = Bars(Symbol(), 0, date_up, date_1);
   nBarsDn = Bars(Symbol(), 0, date_dn, date_1); 
   
   Comment("Количество длинных баров: " + nBarsUp + "\n"+
           "Количество коротких баров: " + nBarsDn);     
}

//+------------------------------------------------------------------+

int IntersectionDN()

{
   for(int i = 0; i < 36; i++)
   {
      if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)
         && iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))
         return(i-1);
   }  
   return(-1);
}

int IntersectionUp()
{
   for(int i = 0; i < 36; i++)
   {
      if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)
         && iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))
         return(i-1);
   } 
   return(-1);  

}

你要找的是循环中的一个交叉点。并从零条深入到历史。所以你的函数IntersectionXX()返回酒吧的编号。

这一切是为了什么?

int nBarsUp, nBarsDn;
   datetime date_dn = iTime(NULL, 0, IntersectionDN());
   datetime date_up = iTime(NULL, 0, IntersectionUp());
   datetime date_1  = iTime(NULL, 0, 1);
  
   nBarsUp = Bars(Symbol(), 0, date_up, date_1);
   nBarsDn = Bars(Symbol(), 0, date_dn, date_1); 
 
Artyom Trishkin:

你要找的是循环中的一个交叉点。而从零条到故事的底部。所以IntersectionXX()返回条形图的编号。

这一切是为了什么?


酒吧号码,是的。但我需要知道条数--从历史深处的这个条到零条。简而言之,我需要从MA开始的条形坡度的角度。但由于它不能像我看来的那样计算(垂直线上的价格和水平线上的柱状物彼此之间有一定的距离,它们是不相容的值)。曾几何时,论坛上有人建议引入一个系数--价格的差异除以条数。这个想法在我看来是合理的。我想把它付诸实践,但因为我自己是个哑巴,所以我试着找到一些东西,通过试验和错误来自己尝试。

P.S. 如何在MQL4中插入代码(像你的一样,不像我的)?
 

有没有人知道如何处理这个问题?


更换TF后,面板被扭曲了

 
Youri Lazurenko:

酒吧的数量,是的。但我需要知道条数--从故事后面的这个什么条到第0条。简而言之,我需要酒吧与MA的角度。但由于无法计算,在我看来(垂直线上的价格和水平线上的柱状物彼此之间有一定距离,它们是不相容的数值)。曾几何时,论坛上有人建议引入一个系数--价格的差异除以条数。这个想法在我看来是合理的。我想把它付诸实践,但作为一个哑巴,我试图找到一些东西,通过试错来尝试自己。

P.S. 如何在MQL4中插入代码(你的方式,不是我的方式)?
如果这是第十条,我怎么知道第十条和零条之间的区别?10-0=10
那么减法是为了什么呢?

 

你好!两个负数q和w比较 是不正确的,当它们相等时,if运算符认为一个比另一个大.错误是什么?当q=-0.0002,w也是-0.0002,res12=false,为什么?

 

你好!两个负数q和w比较 是不正确的,当它们相等时,if运算符认为一个比另一个大.错误是什么?当q=-0.0002,w也是-0.0002,res12=false,为什么?

static bool res12=true;

start()
{   

double SPREAD=MarketInfo(Symb,MODE_SPREAD);// Спред

   double q=High[0]-3.0*Point-High[1];
   double w=-SPREAD*Point;
      
   if (New_Bar==true&&ticket1<=0)
     {
      if(q>w)
       {
        res12=false; 
        Alert("res12=false");
        Alert (q);
        Alert (w);
       }
     }
      if (New_Bar==true&&ticket1<=0)
     {
        if(q<=w)
        {
         res12=true;
         Alert("res12=true");
         Alert (q);
         Alert (w);
        }
      }





}
 
Jenya77769:

你好!两个负数q和w比较 是不正确的,当它们相等时,if运算符认为一个比另一个大.错误是什么?当q=-0.0002,w也是-0.0002,res12=false,为什么?


我认为我们需要规范化,就是这样,如果不规范化,你就不能把双打互相比较。

如果NormalizeDouble (q<=w)
 
Vyacheslav Kornev:

我想我需要归一化,就这样了,因为不归一化就不可能比较它们之间的双倍。


谢谢,它起作用了,但我把q和w分别归一化了!

if(NormalizeDouble(q,4)> NormalizeDouble(q,4))
原因: