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

 
a.lxrn:

这是一个来自初学者的问题)代码中的条件为例,请帮助。

如何使一条消息在真实条件下被输出一次,即price>ma输出一条消息(而不是多条),我想你知道我的意思。

如何正确地开出柜台?

if(Work==false) // Критическая ошибка
     {
      if(AlertWork==false)   // Если Алерта еще не было
        {  Alert("Критическая ошибка. Эксперт не работает."); AlertWork=true; }
      return;
     }                        

怎么说呢,但你没有一次需要显示警报,分别的标志就得重置。

 

你好,你能告诉我如何对一个自定义指标 进行编程,以便在指标连接到图表时不显示额外的线条(缓冲区)?


 
Alexey Kazmin:

你好,你能告诉我如何对一个自定义指标 进行编程,以便在指标连接到图表时不显示额外的线条(缓冲区)?


使用这些属性

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


关于交易、自动交易系统和策略测试的论坛

初学者的常见问题 MQL4 MT4 MetaTrader 4

Vitaly Muzichenko, 2020.06.14 16:29

在MT5中可以使用,但在MT4中使用同样的设置,我得到了沉默。

建1260


奇怪的事情。昨天和今天我的发送不成功,而刚才已经成功了,信息已经发送。根本没有改变或重建任何东西。

 
Igor Makanu:

使用这些属性

谢谢,我会试一试的。

 
我对图形对象感到困惑,我搞不清楚如何从CORNER_RIGHT_UPPER获得X Y坐标High[0]的像素?计算int X和int Y的函数是什么?
 
Valeriy Yastremskiy:

不知何故,但你必须显示警告不止一次,所以必须重新设置标志。

   if(sizeBar && maxmin)
     {
      
                   while(true)
                   {
                         int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 5, sl, tp);
                         if(ticket>0) break;                        
                   }      
             
     }

我还是不明白

假设有一个开仓的条件,比如说价格应该在手腕之上,并且开了一个买入订单

这个条件将在很长一段时间内为真,在每一次迭代中,将由这个代码打开一个订单

我应该如何使一个订单被这个条件打开,这将是它?

 
a.lxrn:

我不明白。

我们假设有一个开仓的条件,我们假设价格应该高于手腕,买入订单 将被打开。

这个条件将在很长一段时间内为真,在每一次迭代中,将由这个代码打开一个订单

我应该如何使一个订单被这个条件打开,这将是它?

如果开单条件为真,开单标志为假,则开单并将开单标志设为真。
 
a.lxrn:

我不明白。

我们假设有一个开仓的条件,我们假设价格应该高于手腕,买入订单 将被打开。

这个条件将在很长一段时间内为真,在每一次迭代中,将由这个代码打开一个订单

我应该如何使一个订单被这个条件打开,这将是它?

如果开单条件为真,开单标志为假,则开单并将开单标志设为真。
 

删除订单

请帮助我找到代码中的错误。编译器和测试器都没有显示错误,但限制没有被删除......。

void OnTick()
            
      if (Low[1] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)

      {
      
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5); 
          
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "EU buy", Magic, 0, Red);
      
      if(ticket<0)
         Print("Не удалось открыть ордер");
      }
            
      {
      if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price1 - StopLoss1*Point, 5);
      TP = NormalizeDouble(price1 + TakeProfit1*Point, 5); 
     
      ticket1 = OrderSend(Symbol(), OP_BUYLIMIT, Lots1, price1, 3, SL, TP, "EU buy", Magic1, 0, Red);
      

            {
            if (BUY() == 0 && BUYLIMIT1() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }
      
      {
      if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price2 - StopLoss2*Point, 5);
      TP = NormalizeDouble(price2 + TakeProfit2*Point, 5); 

      ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, Lots2, price2, 3, SL, TP, "GU buy", Magic2, 0, Red);
      

            {
            if (BUY1() == 0 && BUYLIMIT2() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}