Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1252

 
ANDREY:
Всем доброго дня!
Тестирую алгоритм в тестере МТ-4 при помощи mql4. Мне нужно что бы функция Print() выводила в журнале цену Bid с 5 (пятью) знаками после запятой. А она почему то выводит только 4(четыре) знака. Подскажите пожалуйста как исправить мою ошибку, если она есть.
Вот мой код.
void OnTick()
{
Print("=======Bid =======  ",NormalizeDouble(Bid,Digits) );

}


В то же время если напечатать при помощи  Print() цену открытия, и закрытия ордера( по СЛ и ТР) , то  Print() печатает цену с 5(пятью) знаками.
Всем спасибо за помощь.

DoubleToString(), а не NormalizeDouble()

 
Igor Makanu:

я ж говорил, что мое решение мне не понравилось (((

писать еще раз лень

погуглите "массив найти повторы" - думаю что-нибудь найдется

enum EResult{Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
   int size=ArraySize(arr);
   if (ArrayResize(ret,size)!=size) return AllocError;
   int ii=0;
   for (int i=0;i<size;){
      T tmp=arr[i];
      uint repeatCount=1;
      while(++i<size&&arr[i]==tmp) ++repeatCount;
      if (repeatCount>=count) ret[ii++]=tmp;}
   return ArrayResize(ret,ii)==ii?Ok:AllocError;
}

void OnStart()
{
   int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
   int ret[];
   if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
} 
 
Artyom Trishkin:

DoubleToString(), а не NormalizeDouble()

Спасибо большое за информационную поддержку.

 
Коллеги, не сложно, если - гляньте плиз по моему вопросу
https://www.mql5.com/ru/forum/160683/page1251#comment_18219493
Если совсем конкретно, то как узнать значение минуты на которой открыта позиция?
 
Aleksey Masterov:
Если совсем конкретно, то как узнать значение минуты на которой открыта позиция?

используйте TimeToStruct()

https://www.mql5.com/ru/docs/dateandtime/timetostruct

 
Igor Makanu:

используйте TimeToStruct()

https://www.mql5.com/ru/docs/dateandtime/timetostruct

Да у меня это на мт4
 
Aleksey Masterov:
Да у меня это на мт4

это работает в МТ4

 
Igor Makanu:

это работает в МТ4

Что то мне пока не понятно как мне из этой структуры возвращающей тру при удачном ее срабатывании узнать значение минуты на которой была открыта позиция...
 
Aleksey Masterov:
Что то мне пока не понятно как мне из этой структуры возвращающей тру при удачном ее срабатывании узнать значение минуты на которой была открыта позиция...

datetime o_open = OrderOpenTime();

MqlDateTime  dt_struct;

TimeToStruct( o_open, dt_struct);

int min =  dt_struct.min;

 

Если не сложно, помогите понять что не так при попытке считать данные буфера индикатора.

Вот код из советника:

      if (IsTesting())
         {
         Trend    = GlobalVariableGet(GV_tradesTrend);
         TrendUP  = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
         TrendDN  = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
         if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
         if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
      else
         {
         Trend = GetLastTrendChange();
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
//+----------------------------------------------------------------------------+
int GetLastTrendChange()
   {
   int   trendType=0;
   int   y=0;
   int   t=500;
   while (y<t)
      {
      if (iOpen(NULL,0,t)==y) {return(0);}
      trendType=FindTrendChange(y);
      if (trendType==1 || trendType==-1) {return(trendType);}
      y++;
      }
   return(0);
   }
//+----------------------------------------------------------------------------+
int FindTrendChange(int index)
   {
   double   trendUP,trendDN;
   int      trendType=0;
   trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
   trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
   if (trendUP>0) {trendType=1;}
   if (trendDN>0) {trendType=-1;}
   return (trendType);
   }
//+----------------------------------------------------------------------------+

В реале и на тестах поиск последнего значения через функцию работает, но тест катастрофически замедляется (тест полугодия растягивается на несколько суток).

Поэтому решил использовать подмену на тестировании и запоминать последнее значение в глобальную переменную - советник перестал видеть данные буфера. При чём, хотя пустые буферы равны 0, почему то переменные советника принимают значения EMPTY_VALUE и не меняются.

comm

А наведение курсора на строку буфера в окне данных в подсказке появляются два значения, причём первое равно 0, например Value 5; 0.0000; 0.8855.

Я с этим никак не разберусь, хоть и ковырялся в коде индикатора. Поиск в интернете и в документации не помог. Может кто-нибудь подскажет, почему так затормаживается тест при обращении к этому индикатору?

Помогите пожалуйста!

 

Файлы:
Причина обращения: