Новый билд MetaTrader 4. Build 177. - страница 2

 
Тот же советник так же на Евре на том же тайм-фрейме (дневки) по той же модели (ОпенПрайс) и с теми же параметрами по умолчанию (
extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
extern double MovingPeriod       = 12;
extern double MovingShift        = 6;

)
так же на всей доступной истори на билде 177 , только на работе.

 
Но дома у меня оба билда (177 и 178) считают одинаково. У кого-нибудь есть такой же эффект?
 
Вот код советника, который на работе, щас сравню.

//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA  20050610
//#include <Tracert.mqh>
//#include <EquityOscillator.mqh>
extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
extern double MovingPeriod       = 12;
extern double MovingShift        = 6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//----
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
//   Print("OrdersTotal=",OrdersTotal());
//   SetTrace();
//   WriteEquity();
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+
 
С тестером и экспертом все нормально.

Я еще раз проверил работу стандартного эксперта со вышеуказанными стандартными настройками на EURUSD Daily на предыдущем и новом 177 билдах. При использовании демо-счета с нашего сервера все сходится до цента и до каждой операции (данные с 7 апреля 1989 года).

Полные отчеты выложены тут:
177 билд от 13 июля - https://www.metaquotes.net/en/metatrader5
177 билд от 13 июля - https://www.metaquotes.net/en/metatrader5

Все абсолютно одинаково и это правильно - тестер не менялся. Вот график баланса:



А после подключения к серверу Альпари и полной закачки их данных (тоже начиная с 7 апреля 1989 года) результаты резко поменялись.
Полный отчет по ссылке: https://www.metaquotes.net/en/metatrader5




Почему данные расходятся? Посмотрим на графики (сначала с сервера MetaQuotes, а потом Альпари)





Первая сделка на данных с MetaQuotes была проведена на следующем (18 сентября 1989 г) баре после 15 сентября (красная стрелка указывает на этот бар), где сгенерировался сигнал. Но на данных Альпари этот же фрагмент графика выглядит по-другому:
1) на графике Альпари не достает 2х баров (интересующий нас бар 15 сентября смещен на 2 бара левее)
2) скользящая SMA(12,3) проходит выше цены Close (а на графике MetaQuotes - ниже, что и сгенерировало сигнал)
3) на некоторых барах есть разница в 1 пипс

Недостающие в Альпари бары за 24 августа 1989 (четверг) и 8 сентября 1989 (пятница) дали искаженный график, что повлекло за собой сдвиги и расхождения в генерируемых сигналах...
 
Я проверил оба эксперта у меня (дома и на работе) - код одинаковый. И на работе и дома у меня котировки Альпари.

На всякий случай выкладываю результаты тестирования на работе по данным Альпари:
1 1989.10.16 00:00 buy 1 0.20 1.0658 0.0000 0.0000 0.00 0.00
2 1989.11.08 00:00 close 1 0.20 1.0608 0.0000 0.0000 -118.75 9881.25

Поскипано Ренатом чтобы упростить, содержимое полностью на 100% сходится со стейтментом: https://www.metaquotes.net/en/metatrader5
 
Ренат, я не пытаюсь доказать что у вас там что-то неправильно. Я хочу просто понять, почему не сходится, для себя. Дома инет накрылся, постараюсь вывалить результаты тестирования и по домашнему компьютеру.
 
Rosh, я в несколько заходов писал - в конце есть точное объяснение :)
Специально потратил время чтобы досконально разобраться и представить анализ с понятной и доказательной базой в виде скриншотов.

Похоже, нам надо в отчет добавлять еще один параметр - количество пропущенных/отсутствующих баров в истории + их процентное отношение к существующей истории.
 
Renat, могу ли я воспользоваться тестером, чтобы проверить работу эксперта
на тиковом графике, который я записал в юзерский файл истории ?
Если да, то как настроить тестер ?
 
Renat, могу ли я воспользоваться тестером, чтобы проверить работу эксперта
на тиковом графике, который я записал в юзерский файл истории ?
Если да, то как настроить тестер ?


"Юзерский" - это Offline график? Нет, автоматически используются только штатные графики.

Но есть возможность самостоятельно сгенерировать тестовую последовательность баров, которая будет скормлена тестеру.
Статья в разделе: https://www.mql5.com/en/code
Формат файла: "Формат файлов тестера *.FXT"
 
И еще. Что такое магическое число для выбранного ордера ?
И что магического в числе 20050610 ?
Причина обращения: