Новый клиентский терминал MetaTrader 4 build 204 - страница 6

 
Спасибо Ренат...
Теперь понятна сия "избирательность" ;)))
т.к. обновлялся 203 билд а чуть ранее 202
где и была полная подгрузка...
 

И все это о-о-очень крупным шрифтом, жалко тут не видно, и совершенно по любому поводу.. Кроме этой, никакой другой справки получить не возможно.. :)


в Explorer шрифт надо уменьшить на средний.



Спасибо, Olek. Помогло.. :) А MetaQuotes спасибо, за то, что учли мои пожелания по поводу OrderStopLoss( ) и OrderTakeProfit( ) .. ;)
 
1CAdmin, для того чтобы сравнить наши результаты, необходимо быть уверенным, что мы считаем на одних и тех же данных.
Я так понял, что Вы скачали наши данные кнопкой Download в диалоге Ахива котировок.
Вы используете модель по ценам открытия. Символ - EURUSD.
Уточните, на каком таймфреме Вы тестируетесь и какие ограничивающие даты используете (если используете)


Котировки скачал через Даунлоад в диалоге Архива котировок.
Оптимизация по Ценам Открытия (я только так тестирую).
Символ ЕвроБакс.
ТАймфрейм 4-часовка.
На всем периоде истории.
Оптимизация идет очень медленно : 24 прохода за 18 часов.
Честно говоря,меня это не может устраивать.
Один тест идет относительно быстро : от 20 секунд до 5 минут.
Но вот сделать пару тысяч переборов у МТ4 пока что не получается.
Что посоветуете ?
 
Тут трудно советовать. Самый главный совет - оптимизировать работу советника, выявить узкие места в советнике и переписать, оптимизировать работу индикатора.

Очень тяжёлый советник. За 2 часа всего 22 прогона.
 
Тут трудно советовать. Самый главный совет - оптимизировать работу советника, выявить узкие места в советнике и переписать, оптимизировать работу индикатора.

Очень тяжёлый советник. За 2 часа всего 22 прогона.


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

Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.
 

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

Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.



У тебя вроде индикаторы нестандартные, может дело в них а не в советнике?
 
Я советник пишу модульно.
Каждый модуль(функция) отвечает за одно действие.
Мне приходится передвать в функции ссылки на массив.
В массиве я держу параметры ордера.
Например, у меня есть такая функция :

bool СчитатьПараметрыОрдера(int НомерСоветника, string& OrdParam[])
{
      OrdParam[0] = DoubleToStr(OrderMagicNumber(),0);
      OrdParam[1] = OrderComment();
      OrdParam[2] = "END";
      
      OrdParam[11]= OrderSymbol();                                         //Symbol
      OrdParam[12]= DoubleToStr(OrderType(),0);                            //cmd
      OrdParam[13]= DoubleToStr(OrderLots(),1);                            //volume
      OrdParam[14]= DoubleToStr(Open[StrToTime(OrdParam[1])],Digits);      //price
      OrdParam[15]= DoubleToStr(0,0);                                      //slippage
      OrdParam[16]= DoubleToStr(OrderStopLoss(),Digits);                   //stop-loss
      OrdParam[17]= DoubleToStr(OrderTakeProfit(),Digits);                 //take-profit
      OrdParam[18]= OrdParam[1];                                           //comment
      OrdParam[19]= OrdParam[0];                                           //magic-number
      OrdParam[20]= DoubleToStr(0,0);                                      //expiration
      OrdParam[21]= DoubleToStr(Blue,0);                                   //color
      //OrdParam[22]= DoubleToStr(iBarShift(Symbol(),0,StrToTime(OrdParam[1])),0);   //бар, на котором вошли           
      OrdParam[23]= DoubleToStr(OrderOpenPrice(),Digits);                  //реальная цена открытия            
      OrdParam[24]= DoubleToStr(OrderTicket(),Digits);                     //номер тикета ордера 
          
      return(TRUE);
}



При отправке ордера мне приходится делать преобразования :

int MOrderSend(string OrdParam[])  
  {  
  string   symbol       = OrdParam[11];
  int      cmd             = StrToInteger(OrdParam[12]);
  double   volume      = NormalizeDouble(StrToDouble(OrdParam[13]),Digits);
  double   price         = NormalizeDouble(StrToDouble(OrdParam[14]),Digits);
  int      slippage       = StrToInteger(OrdParam[15]);
  double   stoploss     = NormalizeDouble(StrToDouble(OrdParam[16]),Digits);
  double   takeprofit   = NormalizeDouble(StrToDouble(OrdParam[17]),Digits);
  string   comment     = OrdParam[18];
  int      magic            = StrToInteger(OrdParam[19]);
  datetime expiration   = StrToInteger(OrdParam[20]);
  color    arrow_color  = StrToInteger(OrdParam[21]);
  
  if (ПроверитьОрдер(cmd,price,stoploss,takeprofit)==FALSE) return(-1);
  LastTradeTime = TimeCurrent(); 
  return ( OrderSend( symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color ) ); 
  } 



При каждом баре я выбираю ордера, заношу их данные в массив и проверяю условия.
Что-то работает медленно - но вот что - непонятно.
Хотя структурно у меня все в порядке, структуру я долго и тщательно отрабатывал.
Скорее всего есть что-то, чего я не знаю про МТ4 - какая-нибудь особенность.
Давайте доведем это исследование до логического конца и устраним причины.
Самым простым было бы, если бы я где-то ошибся. Но вот если МТ4 не тянет - это хуже.

 
А индикаторы стандартные или сам написал?
 
Slawa индикатор смотрел - к нему особых претензий нет.
Да и писался он на базе стандартного индикатора.
В индикаторе при получении нового бара - рассчитывается только последний бар.
 
Я советник пишу модульно...

Не зная постановки задачи не берусь судить, насколько оправдана реализация через строковые массивы, но думаю что постоянные преобразования данных в строки и обратно операция весьма затратная. Да и нормализация может оказаться заметной добавкой (а может и нет, проверять надо). Для реалтайма это может заметно не сказываться, а вот в советнике для тестера я сделал бы всё возможное, чтобы отказаться от этих операций или свести их к минимуму. Интересно, чем вызвано желание загнать все параметры ордера в один массив?