MetaEditor5 видит функции из mql4. - страница 3

 
Alexey Navoykov:

А почему Digits() вместо номера бара?

Копипаст. Сейчас исправлю...

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("");
   ResetLastError();
   Print("iClose(Symbol(),Period(),0): ",DoubleToString(iClose(Symbol(),Period(),0),Digits()));
   Print("GetLastError: ",GetLastError());
   Print("Custom iClose(0): ",DoubleToString(Close(0),Digits()));

   ResetLastError();
   Print("iBarShift(Symbol(),Period(),TimeCurrent(),false): ",iBarShift(Symbol(),Period(),TimeCurrent(),false));
   Print("GetLastError: ",GetLastError());

   ResetLastError();
   Print("iBarShift(Symbol(),Period(),TimeCurrent(),true): ",iBarShift(Symbol(),Period(),TimeCurrent(),true));
   Print("GetLastError: ",GetLastError());
  }
//+------------------------------------------------------------------+ 
//| Get Close for specified bar index                                | 
//+------------------------------------------------------------------+ 
double Close(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   double Close[1];
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,Close);
   if(copied>0)
      close=Close[0];
   return(close);
  }
//+------------------------------------------------------------------+

Результат:

iClose(Symbol(),Period(),0): 0.00000
GetLastError: 0
Custom iClose(0): 1.17693
iBarShift(Symbol(),Period(),TimeCurrent(),false): 0
GetLastError: 0
iBarShift(Symbol(),Period(),TimeCurrent(),true): -1
GetLastError: 0
Файлы:
Test_1.mq5  4 kb
 

Советник который показывает, что работает, а то не работает из новых iXXXX функций:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.000"
#property description "Test new MQL5 Function iXXXX..."
input int shift=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime m_iTime  = iTime(Symbol(),Period(),shift);
   double   m_iOpen  = iOpen(Symbol(),Period(),shift);
   double   m_iHigh  = iHigh(Symbol(),Period(),shift);
   double   m_iLow   = iLow(Symbol(),Period(),shift);
   double   m_iClose = iClose(Symbol(),Period(),shift);
   long     m_iVolume= iVolume(Symbol(),Period(),shift);
   int      m_iBars  = iBars(Symbol(),Period());

   Comment("Time: ",TimeToString(m_iTime,TIME_DATE|TIME_SECONDS),"\n",
           "Open: ",DoubleToString(m_iOpen,Digits()),"\n",
           "High: ",DoubleToString(m_iHigh,Digits()),"\n",
           "Low: ",DoubleToString(m_iLow,Digits()),"\n",
           "Close: ",DoubleToString(m_iClose,Digits()),"\n",
           "Volume: ",IntegerToString(m_iVolume),"\n",
           "Bars: ",IntegerToString(m_iBars));
  }
//+------------------------------------------------------------------+


Пока в тестере так:


Файлы:
Test.mq5  5 kb
 
Спасибо, проверим
 
Renat Fatkhullin:
Спасибо, проверим

Спасибо, в 1846 пример из  (тест новых iXXXX функций в MQL5) заработал!


 

иногда вываливает значения типа -3435246541634324635168743656564765464565243645463847563524465678623466844256646447566842345546984565644564854766845466544568 по этому пока отказался ...



 
Vladimir Pastushak:

иногда вываливает значения типа -3435246541634324635168743656564765464565243645463847563524465678623466844256646447566842345546984565644564854766845466544568 по этому пока отказался ...



Ну обработка ошибок всегда нужна. Просто так запрашивать и использовать ничего нельзя. Просто ещё эти функции не описаны в справке. В Вашем случая я думаю, Вы пытались получить данные с чужого символа/таймфрейма - а это не всегда в пол-пинка работает: данные должны быть подготовлены (так было и раньше).

 
Vladimir Karputov:

Ну обработка ошибок всегда нужна. Просто так запрашивать и использовать ничего нельзя. Просто ещё эти функции не описаны в справке. В Вашем случая я думаю, Вы пытались получить данные с чужого символа/таймфрейма - а это не всегда в пол-пинка работает: данные должны быть подготовлены (так было и раньше).

нет, текущий символ и текущий таймфрейм, на первом тике такое потом нормально...

 
Vladimir Pastushak:

нет, текущий символ и текущий таймфрейм, на первом тике такое потом нормально...

А что при этом GetLastError() говорит (на первом тике)?

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.000"
#property description "Test new MQL5 Function iXXXX..."
input int shift=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ResetLastError();

   datetime m_iTime  = iTime(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iTime ERROR: ",_LastError);
      return;
     }

   double   m_iOpen=iOpen(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iOpen ERROR: ",_LastError);
      return;
     }

   double   m_iHigh=iHigh(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iHigh ERROR: ",_LastError);
      return;
     }

   double   m_iLow=iLow(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iLow ERROR: ",_LastError);
      return;
     }

   double   m_iClose=iClose(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iClose ERROR: ",_LastError);
      return;
     }

   long     m_iVolume=iVolume(Symbol(),Period(),shift);
   if(GetLastError()!=0)
     {
      Print("iVolume ERROR: ",_LastError);
      return;
     }

   int      m_iBars=iBars(Symbol(),Period());
   if(GetLastError()!=0)
     {
      Print("iBars ERROR: ",_LastError);
      return;
     }

   Comment("Time: ",TimeToString(m_iTime,TIME_DATE|TIME_SECONDS),"\n",
           "Open: ",DoubleToString(m_iOpen,Digits()),"\n",
           "High: ",DoubleToString(m_iHigh,Digits()),"\n",
           "Low: ",DoubleToString(m_iLow,Digits()),"\n",
           "Close: ",DoubleToString(m_iClose,Digits()),"\n",
           "Volume: ",IntegerToString(m_iVolume),"\n",
           "Bars: ",IntegerToString(m_iBars));
  }
//+------------------------------------------------------------------+
Файлы:
Test.mq5  6 kb
 
Vladimir Karputov:

А что при этом GetLastError() говорит (на первом тике)?

0

 
я сейчас разбираюсь в коде, возможно это мой косяк. Позже отпишусь..
Причина обращения: