MetaTrader 5 Strategy Tester! - страница 11

 

Вопросы относительно показателя "Просадка" из вкладки "Результаты оптимизации".

Согласно определению "Просадкаабсолютная просадка, наибольший убыток ниже значения начального депозита". 

В контекстном же меню и в соответствующей колонке результатов оптимизации наименование показателя указано как "Просадка %". На мой взгляд, символ процентов (%) отсылает к понятию относительной величины, т.е. к понятию относительной просадки.

Вопрос1: какой именно показатель просадки (относительной или абсолютной) фактически отражается в колонке "Просадка %"?

Вопрос2: если в колонке "Просадка %" отражен показатель относительной просадки, то относительно какого именно показателя?

 

В тестере работают глобальные переменные?

 
dentraf:

В тестере работают глобальные переменные?

Да. Но не имеющие никакого отношения к клиентскому терминалу. Этакая отдельная песочница. При начале тестирования нет ни одной глобальной переменной.
 
stringo:
Да. Но не имеющие никакого отношения к клиентскому терминалу. Этакая отдельная песочница. При начале тестирования нет ни одной глобальной переменной.
Получаеться что в тестере с ними по другому нужно работать?
 
dentraf:
Получаеться что в тестере с ними по другому нужно работать?
Каждое тестирование начинается с пустой базы глобальных переменных.
 

В индикаторе имеется GlobalVariableSet("MA1[0]",MA1[0]);

в советнике SmoothedBuffer1[0]=GlobalVariableGet("MA1[0]");

В тестере  советник выдает SmoothedBuffer1[0] всегда равно нулю, хотя в терминале все работает как надо

 
dentraf:

В индикаторе имеется GlobalVariableSet("MA1[0]",MA1[0]);

в советнике SmoothedBuffer1[0]=GlobalVariableGet("MA1[0]");

В тестере  советник выдает SmoothedBuffer1[0] всегда равно нулю, хотя в терминале все работает как надо

 

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

И ещё одна проблема тестера: не все позиции закрываются по окончании теста при мультивалютном тестировании. На графике имеется разрыв между окончательным балансом и эквити, хотя они должны совпадать. Проиллюстрирую картинками: выделенные позиции так и не были закрыты.

2010.06.07 16:001477buy0.30gbpusd1.452091477PriceChannel_multi H1out0.000.00390.90
2010.06.07 16:001478buy0.30gbpusd1.451871478PriceChannel_multi H1in0.00 
2010.06.07 16:001479sell0.30eurgbp0.822411479PriceChannel_multi H1in0.00 
2010.06.07 17:001480sell0.30usdcad1.058091480PriceChannel_multi H1out0.000.00339.10
2010.06.07 17:001481sell0.30usdcad1.058261481PriceChannel_multi H1in0.00 
2010.06.07 22:001482buy0.30eurusd1.191801482PriceChannel_multi H1out0.000.00395.70
2010.06.07 22:001483buy0.30eurusd1.191861483PriceChannel_multi H1in0.00 
2010.06.07 23:591485buy0.30gbpjpy132.4021485end of testout0.000.00582.08
2010.06.07 23:591486sell0.30gbpusd1.446851486end of testout0.000.00-150.60
2010.06.07 23:591487buy0.30usdcad1.061191487end of testout0.000.00-82.83
2010.06.07 23:591484buy0.30usdjpy91.4831484end of testout0.000.00192.82
  0.00 0.00 29 479.92
Closed P/L: 29 479.92

Пока выхожу из ситуации так: запрещаю открытие позиций в тестере за неделю до окончания теста. Работает только на закрытие:

if(m_position[m_index].Select(m_symbol[m_index].Name()))
        {
         if(m_position[m_index].Type()==POSITION_TYPE_BUY)
           {
            //--- try to close or modify long position
            if(LongClosed())            return(true);
            if(LongWithoutLoss())       return(true);
            if(LongTrailing())          return(true);
           }
         else
           {
            //--- try to close or modify short position
            if(ShortClosed())           return(true);
            if(ShortWithoutLoss())      return(true);
            if(ShortTrailing())         return(true);
           }
        }
      //--- no opened position identified
      else
       if(MQL5InfoInteger(MQL5_TESTING) && TimeCurrent()>D'2010.06.01') // Запрет на открытие в тестере после 01.06.2010
         return(false);
       else  
        if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
         {
          //--- check for long position (BUY) possibility
          if(LongOpened()) return(true);
          //--- check for short position (SELL) possibility
          if(ShortOpened()) return(true);
         }

Тогда график правильный и все позиции закрываются.

 
stringo:
Ещё раз проверили. Связка эксперт-пользовательский индикатор с общей глобальной переменной работает правильно.

Под связкой "эксперт-пользовательский индикатор" понимать вызов индикатора в советнике через iCustom?

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

 

Файлы:
test.mq5  2 kb