初学者的问题 MQL4 MT4 MetaTrader 4 - 页 91

 
Jenya77769:

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

因为它是一个双数,而且它们并不完全相等。

图:比较归一化的数值

 
Jenya77769:

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


将它们的差值与零进行比较,这更正确,对任何类型的数字都适用。

 

人们,这里有一个问题--

一条横线,有一天长。

它有一个文本标签,一个标签对象。

我怎样才能使这个文本标签总是在线条的中间(在一天的中间),在图表的任何缩放中?

 
John Smith:

人们,这里有一个问题--

一条横线,有一天长。

它有一个文本标签,一个标签对象。

我怎样才能使这个文本标签总是在线条的中间(在一天的中间),在图表的任何缩放中?

改变标签的X坐标,即把它计算为线的中间位置
 
Renat Akhtyamov:
改变标记的X坐标,即把它计算为线的中间位置

嗯,这是可以理解的,但我怎么做呢?


我有第二个选择--将标记与一天的开始挂钩,使用文本变量在标记值前面插入空格,这取决于图表的缩放。

从本质上讲,我希望标签在近距离缩放时位于左边,而在缩放时,标签应该移到中间。由于mt4的缩放级别是标准的,那么对于每个缩放级别来说,找到合适的空间数并不难。但这里有一个问题--mql4是否有这样的功能,可以确定当前图表的缩放级别?

然后一切都会很简单,像这样:"如果chartzoom = 50%,那么 spacesnumber = 10",等等。

其中空格数是字符串变量,定义了标签文本前的空格数,如__________1.23456 - 有10个带_符号的空格。

 
John Smith:

嗯,这是可以理解的,但我怎么做呢?


我有第二个选择--将标记与一天的开始挂钩,使用文本变量在标记值前面插入空格,这取决于图表的缩放。

从本质上讲,我希望标签在近距离放大时位于左边,而在放大时,标签应该移到中间。由于mt4的缩放级别是标准的,那么对于每个缩放级别来说,找到合适的空间数并不难。但这里有一个问题--mql4是否有这样的功能,可以确定当前的图表缩放级别?

然后一切都会很简单,像这样:"如果chartzoom = 50%,那么 spacesnumber = 10",等等。

其中空格数是字符串变量,定义了标签文本前的空格数,如__________1.23456 - 有10个带_符号的空格。

在此 阅读我的评论
 

大家好!再次需要帮助。无法弄清错误是什么。再次拖网。由MA进行拖网。我需要翻阅几个订单。可能有循环。只要有一个开放的订单,一切都在完美地运作。只要再有一个订单被打开,狂欢就开始了--不断修改(用一个相同的参数)第一个订单(错误1没有显示)。在这种情况下,第二秩序被修改是应该的--当满足适当的条件时(第一秩序,当条件改变时,改变其参数并继续不断修改新的参数)。我找不到原因。谁能给我一个提示?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

大家好!再次需要帮助。搞不清楚错误是什么。再次拖网。由MA进行拖网。我需要翻阅几个订单。可能有循环。只要有一个开放的订单,一切都在完美地运作。只要再有一个订单被打开,狂欢就开始了--不断修改(用一个相同的参数)第一个订单(错误1没有显示)。在这种情况下,第二秩序被修改是应该的--当满足适当的条件时(第一秩序,当条件改变时,改变其参数并继续不断修改新的参数)。我找不到原因。谁能帮助我?


1.这个周期应该被逆转。

2.休息是为了什么?

 
Artyom Trishkin:

1.这个循环必须被逆转。

2. 休息是为了什么?


你好。

1 - "循环必须是逆向的"--你是指for(i = k; i > 0; i--)吗?

2."为什么要休息?"- 要退出。一般来说,在开始时,在选择订单类型 后,如果是针对趋势的突破。然后我们再次选择订单类型,如果它是趋势性的,我们就修改它。

这种变体的破译以前就帮助过我。当你建议用MA来解决拖网问题时。例如,如果在买入交易中,止损在MA之上,我得到错误1,直到MA在止损之上,之后错误就消失了。当我引入条件,即如果止损在MA之上,那么就打破,一切都回到了正常状态。

 
Youri Lazurenko:

你好。

1 - "循环必须反转" - 你是指for(i = k; i > 0; i--)吗?

2."为什么要休息?"- 要退出。一般来说,在开始时,在选择订单类型 后,如果是针对趋势的突破。然后我们再次选择订单类型,如果它是趋势性的,我们就修改它。

这种变体的破译以前就帮助过我。当你建议用MA来解决拖网问题时。例如,如果在买入交易中,止损在MA之上,我得到错误1,直到MA在止损之上,之后错误就消失了。当我设定的条件是,如果止损在MA之上,所有的一切都已正常化。

断裂彻底完成了循环。那么其他的职位呢?
查看止损点相对于其新水平的位置。
从OrdersTotal()-1到>=0的反向循环