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

 
dimkh87:
下午。请问MT4和MT5是否可以将一个工具的图表与不同的时间段重叠,以及这些时间段的指标?例如,我想在一个窗口中显示欧元/美元对 的3张图表,其中有TFs:日、4小时和小时,还可以叠加这些TFs的滑动指标。这有可能吗?我期待着任何帮助。

如何处理这条时间线?或者从较小的时间尺度上画出几条宽的条形?

 
Вадим Мотеюнас:

先生们,请指教,我从Kim那里拿了一个函数,返回最后开仓的条数或-1

我调用这个函数并写了一个条件

我查看了Print,发现这个函数返回-1,起初我以为没有订单,但过了一会儿,订单重新出现了,在同一个柱子上,停止后有一笔交易被打开。

static datetime time_open = 0;
if(Open[2]>Close[2] && Open[1]>Close[1] && Close[1]<Low[2])
     {
      Comment("цена входа = ",DoubleToStr(Low[2],Digits));
      if( Open[0] != time_open )
         if(NumberOfBarOpenLastPos("",0,-1,-1)!=0)//вызвал здесь
            ticket=OrderSend(Symbol(),OP_SELLLIMIT,0.1,Low[2],2,0,0,magic,0);

      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
        {
         time_open = Open[0];
         TP=NormalizeDouble(OrderOpenPrice()-tp*Point,Digits);
         SL=NormalizeDouble(OrderOpenPrice()+sl*Point,Digits);
         modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
       }
      }
 
Konstantin Nikitin:
错误指示if( iOpen[0] != time_open )'iOpen' - 未声明的标识符

 
Вадим Мотеюнас:
错误被写入,指向if( iOpen[0] != time_open )'iOpen' - 未声明的标识符

金的所有功能都在工作!你没有正确地应用它。

 
Vitaly Muzichenko:

金的所有功能都在工作!你没有正确地应用它。

没有人在争论,我只是想了解我是如何误用的。

 
Вадим Мотеюнас:

没有人在争论,我想了解我是如何误用的

打印一切--这是识别错误和不足的正确做法。

Print( NumberOfBarOpenLastPos("",0,-1,-1) );
 
Vitaly Muzichenko:

打印一切--这是识别错误和不足的最佳解决方案。

我是说它返回-1,即函数没有找到订单开仓的最后一棒,我担心我没有传递正确的参数。

 
int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();//что означает это строка?что текущее время раньше цены открытия ордера, это как?
                    }
                 }
              }
           }
        }
     }
 
Вадим Мотеюнас:

这句话的意思是,你通过所有的位置,选择/记住最新的位置,然后用它来工作。这是为了防止职位不按顺序,而是分散的情况。

 

该函数按时间顺序排列并选择最新的一个,即最后一个

int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot=0; // Инициализируем нулём
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime(); // Ищем последнюю позицию
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(sym, tf, oot, True));
  }

接下来,我们有一个选定的,我们把它代入函数iBarShift(sym, tf,oot ,true)

该函数按时间 返回酒吧编号。这就是全部。

不幸的是,我不能检查它,但当我使用它时,它工作得很好,以及我在这里发表的所有功能。

原因: