Ошибки, баги, вопросы - страница 621

 
sergey1294:
во первых вы делите целые числа по этому и получаете целое число, почитайте про приведение типов https://www.mql5.com/ru/docs/basis/types/casting
Да действительно , но раньше такого не было. Я даже не заморачивался.
 
ivandurak:
Да действительно , но раньше такого не было. Я даже не заморачивался.

Раньше это в четвёрке? потому как в пятёрке это было с самого начала и будет так всегда (1/2=0; 1./2.=0.5).

Если желаете явно задавать дубли добавляйте точку.

// Script program start function                                    
void OnStart()
  {
   int i;
   double   a,b ;
   for(i=0;i<10;i++)
      {
         a=1./2.;
         b=1./2.;
         Print("a=",a," ","b=",b) ;
      }   
  }
 
Urain:

Раньше это в четвёрке? потому как в пятёрке это было с самого начала.

Если желаете явно задавать дубли добавляйте точку.

Такого ни в четверке, ни в пятерке не было никогда.

Целочисленная арифметика (да еще и в виде чистых целочисленных констант) однозначная.

 

Столкнулся вот с каким расхождением между тестером и демо счетом:

После успешно проведенной торговой операции по разному заполняются поля price в структуре ответа торгового сервера. На демосчете все как должно быть в поле price - цена, по которой совершена сделка, в тестере в этом поле остается 0.

Для проверки набросал советника, который покупает каждый тик и выводит в журнал код возврата и цену:

//+------------------------------------------------------------------+
//|                                                  test-expert.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
         MqlTradeRequest trade_request;
         MqlTradeResult  trade_result;
         ZeroMemory(trade_request);
         ZeroMemory(trade_result);
         trade_request.action=TRADE_ACTION_DEAL; 
         trade_request.volume=0.1; 
         trade_request.type=ORDER_TYPE_BUY; 
         trade_request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK); 
         trade_request.symbol=_Symbol;
         OrderSend(trade_request,trade_result);
         Print(trade_result.retcode, "купили по цене ",trade_result.price);
  }
//+------------------------------------------------------------------+

 При запуске на демосчете в логе такие строки:

 2012.01.16 12:48:29 test-expert (EURUSD,H1) 10009купили по цене 1.266

А при запуске в визуализаторе такие :

 2012.01.16 12:49:12 2011.12.30 00:00:11   10009купили по цене 0.0

Скажите это баг, фича, или я что то неправильно делаю ?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 

Есть ли какой нибудь способ управлять предисторией в тестере .

А то тестирование на 1 час , с периода 1.01.2011 по сегодня подгружает всего 6000 бар . В настройках стоит - макс баров безлимит . история вся подгружена с 1971 г на минутке .

 

Такой вопрос возник неожиданно:

При загрузке в эксперте индикатора через iCustom, индикатор загружается, правильно работает - единственное, что не вызывается в нем функция OnTimer.

Это так задумано или это, таки, баг?

Тот же индикатор, просто кинутый на график, работает абсолютно исправно.

Билд 574.

 
Dima_S:

Такой вопрос возник неожиданно:

При загрузке в эксперте индикатора через iCustom, индикатор загружается, правильно работает - единственное, что не вызывается в нем функция OnTimer.

Это так задумано или это, таки, баг?

Так задумано.
 
antt:
Так задумано.
Очень оригинально)
 
Dima_S:
Очень оригинально)

События таймера генерируются для графика, а оттуда уже программам, которые работают на нем (наброшены на него). Такова идеология - Выполнение программ:

Клиентский терминал отсылает возникающие события в соответствующие открытые графики. Также события могут генерироваться графиками (события графика) либо mql5-программами (пользовательские события).  Генерацию событий создания и удаления графических объектов на графике можно включать и отключать заданием свойств графика CHART_EVENT_OBJECT_CREATE и CHART_EVENT_OBJECT_DELETE. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события.

Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления.

Поэтому индикатор, который вызывается из эксперта, не принимает событий таймера. Попробуйте из эксперта набросить этот идикатор на график функцией ChartIndicatorAdd, что-нибудь изменится?

 
Dima_S:
Очень оригинально)
Изначально событие предназначалось для экспертов и по сути является событием чарта. Использование события в индикаторах было добавлено позднее и с ограничением - индикатор должен быть добавлен на чарт.
Причина обращения: