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

 
faton:

Доброго дня. Подскажите, написал простенький индикатор.. и при наступлении новго бара, выскакивает вот такое поведение линии индикатора. В чем может быть проблема? 

CopyRates(FirstAktiv,PERIOD_CURRENT,0,rates_total,mrate1);
CopyRates(SecondAktiv,PERIOD_CURRENT,0,rates_total,mrate2);
Проверяйте, что возвращает  CopyRates. Количество скопированных элементов не обязательно равно запрошенному. Поэтому может возникнуть выход за границы массива, и данные в этом месте буфера окажутся нулевыми, что и случилось.
 

Кажется, что во время апдейта новой версии терминала, происходит ПОЛНОЕ копирование папки Program Files\Meta Trader 5\MQL5 в папку C:\Users\user\AppData\Roaming\MetaQuotes\Terminal\00C5B588590D4A2C89EFC1E0C5301ECA\MQL5 (речь о Win7, хотя  в других ОС видимо тоже самое + может и другие папки тоже). Иначе не могу объяснить, куда делись пару часов работы, сделаной несколько дней назад и плоды которой успешно тестировал.

Дело в том, имею привычку оформалять классы через .mqh-файл, а потом подключать. По незнанию, закинул свой mqh и mq5 в  Program Files\Meta Trader 5\MQL5, увидел, что не появились в навигаторе и перекинул в рабочую папку (C:\Users\user\AppData\Roaming\MetaQuotes\Terminal\00C5B588590D4A2C89EFC1E0C5301ECA\MQL5). Всё было хорошо, пока не обновился терминал - запустил советник тестироваться дальше, а потом захотелось что-то ещё подправить, и увидел старый код, копию того, что лежит в Program Files\Meta Trader 5\MQL5. Оптимизировалась правильная версия, ибо mq5 не изменился и терминал не догадался, что изменения произошли в mqh. Перекомпиляция привела к возврату к старой версии.

 В итоге - очень зол, опять придётся потратить час-другой на то, что уже делал.

В этой ситуации вижу выходы -

1) копировать папку не целиком, а лишь по списку файлов входящих в стандартную поставку;

2) как-то предупреждать пользователя, что будет перезапись (хотя, при изменении многих файлов стандартной библиотеки - будет муторно);

3) каким-то образом определять (подсчитать crc, например), что папка mql5 в Program Files изменилась и перед установкой новой версии выдать предупреждение, чтобы можно было сохранить свои данные;

4) сделать копию старого MQL5 в Terminal\00C5B588590D4A2C89EFC1E0C5301ECA\  (прибавить, например, версию MQL5.384) - проще всего.

 Проблема редкая, но блин, западлистая. 

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
notused:

Кажется, что во время апдейта новой версии терминала, происходит ПОЛНОЕ копирование папки.................................

...........................            ......................

  .............................

 В итоге - очень зол, опять придётся потратить час-другой на то, что уже делал.

В этой ситуации вижу выходы -   ................

....................

 Проблема редкая, но блин, западлистая. 

Конструктивчег  разработчикам:    Сделайте, пожалуйста, автоматической резервное копирование всей папки MQL5 из предыдущего билда, при установке новой версии.  Время жизни - до следующего билда, потом замена.   Это не отменяет бережного обращения с клиентскими файлами при установке билда, это на случай форс-мажора (подобного описанному) + для сохранения клиентских версий стандартной библиотеки.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 

Фактор восстановления (Recovery Factor) — данный показатель отображает рискованность стратегии, какой суммой советник рискует чтобы заработать полученную прибыль. Он вычисляется как отношение полученной прибыли к максимальной просадке; (не сказано какой )

STAT_RECOVERY_FACTOR

Фактор восстановления – отношение STAT_PROFIT/STAT_BALANCE_DD

double



 

Print("Factor=",TesterStatistics(STAT_RECOVERY_FACTOR));                                    // Выводим Фактор Восстановления
Print("Profit/BalanceDD=",TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_BALANCE_DD)); // Отношение профита к просадке по балансу
Print("Profit/EquityDD=",TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_EQUITY_DD));   // Отношение профита к просадке по средствам

 

 

Опытным путем установлено,что Фактор восстановление считается как отношение профита к просадке по средствам ,а не по балансу.

В справке ошибка получается? 

 
ilunga:
Ну правильно, вам последние 50000 и показали. В сутках 1440 баров

Спасибо..

Вопрос не в том.. Да и не вопрос это, а горестный вздох..

Если я выбираю для теста только июнь месяц (30 дн Х 1440 < 50 000), что я должен увидеть на графике по уму? август???

Кстати, таймпикеры в тестере имеют неприятное свойство - самозакрываться через секунду - другую..

не фатально - всё равно ручками быстрее дату можно выбрать, но..

 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.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"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+

Никак непойму почему вызывается OnTick хотя цена неизменяется?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491   1.2787   1.2789  1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490   1.2787   1.2789  1.2788 300000
 

 
EQU:

Спасибо..

Вопрос не в том.. Да и не вопрос это, а горестный вздох..

Если я выбираю для теста только июнь месяц (30 дн Х 1440 < 50 000), что я должен увидеть на графике по уму? август???

Напишите в сервис-деск. Мне тоже не понятно, почему количество баров на чарте _всегда_ отсчитывается от реала, а не от конечной даты, установленной в тестере.
 
sion:
Volume - может меняться, да и еще чтонибудь есть)

так видно же что объем не меняется!!!

 
dentraf:

так видно же что объем не меняется!!! 

Посмотрел уже код.
 

Что-то не пойму как это работает иль не работает)


Print("<><><><><",request_action.magic);//Print((ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000);
  if(magic_num!=(ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000){Print("<<<<<<<<<<<<<<<<<<<<<",(ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000," magic_num=",magic_num);return;}

 

KG 0 prp4 (EURJPY,M15) 02:23:25 <><><><><73200011000
RR 0 prp4 (EURJPY,M15) 02:23:25 <<<<<<<<<<<<<<<<<<<<<732 magic_num=732   <-поидее числа равны и условие не должно срабатывать

Разкомментировал Print

Print("<><><><><",request_action.magic);Print((ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000);
  if(magic_num!=(ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000){Print("<<<<<<<<<<<<<<<<<<<<<",(ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000," magic_num=",magic_num);return;}

MH 0 prp4 (EURJPY,M15) 02:28:11 <><><><><73200011000
PE 0 prp4 (EURJPY,M15) 02:28:11 92233720368     <- и это число хз откуда взялось, видимо при первом подсчете  "(ulong)MathMod(request_action.magic-MathMod(request_action.magic,100000000),100000000000)/100000000" этого, что-то странное считается

<-условие не выполнилось, принт не напечатался, значит числа были равны.

 Где-то до часа ночи, с этим проблем вообще не было.

P.S. попробовал на ноуте, там еще 687 билд стоит, те-же пироги. 

Причина обращения: