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

 

18 секунд на 8-ми ядрах

Вот этот ужас (полный перебор)

sinput double Step = 0.1;
  
double Sphere(const double &vec[])
    {
      int dim = ArraySize(vec);
      double sum = 0;
      for(int i = 0; i < dim; i++) sum += pow(vec[i], 2);
      return -sum;
    }

void OnStart()
{  
  double Vector[3];
  double Max = -DBL_MAX;

  const ulong StartTime = GetMicrosecondCount();
  
  for (double x = -100; x < 100; x += Step)
    for (double y = -100; y < 100; y += Step)
      for (double z = -100; z < 100; z += Step)
      {
        Vector[0] = x;
        Vector[1] = y;
        Vector[2] = z;
        
        const double Tmp = Sphere(Vector);  
        
        if (Tmp > Max)
          Max = Tmp;
      }
      
  Print(Max);

  Print(GetMicrosecondCount() - StartTime);  
}
вычисляется за 12 секунд. Почему ГА штатного оптимизатора медленней даже полного перебора? Неужели синхронизация агентов так тормозит?
 
Ну а MT4-оптимизатор справился за
2016.11.21 16:15:48.323 There were 2876 passes done during optimization
2016.11.21 16:15:48.316 testGA: optimization finished in 0:00:00, 5744 cache records were used, 5572 cache records rejected
2016.11.21 16:15:47.823 testGA: optimization started

0 секунд. Но только не смог найти минимум сферы!

 

Что творится с оптимизаторами?!

 
fxsaber:

Неужели синхронизация агентов так тормозит?

Из восьми ядер (агентов) оставил работать только один. Результат - 20 секунд.

Как так получается, что 8 ядер - 18 секунд, а 1 - 20? ГА-синхронизация сказывается? Если так, то какой смысл тогда в ГА-облаке? Особенно при мат. вычислениях, когда рачет целевой функции на многие порядки быстрее, чем агентская ГА-синхронизация. Собственное пакетирование вычислений - не вариант совсем.

 
fxsaber:

А предложенная реализация Метода Роя Частиц на одном ядре справилась с тем же самым за 850 мкс!

Что я делаю не так?!

Сколько делает запусков FF Рой?

При этом какой лучший результат у оптимизатора МТ и Роя? 

 
Andrey Dik:

Сколько делает запусков FF Рой?

При этом какой лучший результат у оптимизатора МТ и Роя? 

МРЧ: 1490 проходов на интервале [-100, +100] для всех трех координат. При этом могу регулировать заранее количество циклов (Pass), если нужна иная точность или есть ограничения по времени выполнения.

Optimizing Sphere
PSO[3] created: 15/3
PSO Processing...
Pass 0 done, skipped 1 of 15 / -1216.844782161339
Pass 1 done, skipped 2 of 15 / -1216.844782161339
Pass 2 done, skipped 3 of 15 / -1216.844782161339
Pass 3 done, skipped 2 of 15 / -1216.844782161339
Pass 4 done, skipped 1 of 15 / -1216.844782161339
Pass 5 done, skipped 1 of 15 / -1216.844782161339
Pass 6 done, skipped 0 of 15 / -1216.844782161339
Pass 7 done, skipped 0 of 15 / -106.8281345867898
Pass 8 done, skipped 0 of 15 / -106.8281345867898
Pass 9 done, skipped 0 of 15 / -106.8281345867898
Pass 10 done, skipped 0 of 15 / -106.8281345867898
Pass 11 done, skipped 0 of 15 / -106.8281345867898
Pass 12 done, skipped 0 of 15 / -41.75511633195617
Pass 13 done, skipped 0 of 15 / -41.75511633195617
Pass 14 done, skipped 0 of 15 / -41.75511633195617
Pass 15 done, skipped 0 of 15 / -41.75511633195617
Pass 16 done, skipped 0 of 15 / -41.75511633195617
Pass 17 done, skipped 0 of 15 / -41.75511633195617
Pass 18 done, skipped 0 of 15 / -15.37882329165843
Pass 19 done, skipped 0 of 15 / -10.85481435989758
Pass 20 done, skipped 0 of 15 / -10.85481435989758
Pass 21 done, skipped 0 of 15 / -8.561527165496884
Pass 22 done, skipped 0 of 15 / -8.561527165496884
Pass 23 done, skipped 0 of 15 / -8.561527165496884
Pass 24 done, skipped 0 of 15 / -8.561527165496884
Pass 25 done, skipped 0 of 15 / -4.159581158356343
Pass 26 done, skipped 0 of 15 / -3.840244651138437
Pass 27 done, skipped 0 of 15 / -0.5882362559695152
Pass 28 done, skipped 0 of 15 / -0.5882362559695152
Pass 29 done, skipped 0 of 15 / -0.5882362559695152
Pass 30 done, skipped 0 of 15 / -0.5882362559695152
Pass 31 done, skipped 0 of 15 / -0.4905653897259477
Pass 32 done, skipped 0 of 15 / -0.4905653897259477
Pass 33 done, skipped 0 of 15 / -0.4905653897259477
Pass 34 done, skipped 0 of 15 / -0.4224744719165405
Pass 35 done, skipped 0 of 15 / -0.3039683971107092
Pass 36 done, skipped 0 of 15 / -0.3039683971107092
Pass 37 done, skipped 0 of 15 / -0.3039683971107092
Pass 38 done, skipped 0 of 15 / -0.3039683971107092
Pass 39 done, skipped 0 of 15 / -0.04776535589703353
Pass 40 done, skipped 0 of 15 / -0.04776535589703353
Pass 41 done, skipped 0 of 15 / -0.04776535589703353
Pass 42 done, skipped 0 of 15 / -0.04776535589703353
Pass 43 done, skipped 0 of 15 / -0.02848088623334127
Pass 44 done, skipped 0 of 15 / -0.02848088623334127
Pass 45 done, skipped 0 of 15 / -0.02840297552625775
Pass 46 done, skipped 0 of 15 / -0.02840297552625775
Pass 47 done, skipped 0 of 15 / -0.02840297552625775
Pass 48 done, skipped 0 of 15 / -0.02840297552625775
Pass 49 done, skipped 0 of 15 / -0.02306123966974868
Pass 50 done, skipped 0 of 15 / -0.001477531483704371
Pass 51 done, skipped 0 of 15 / -0.001477531483704371
Pass 52 done, skipped 0 of 15 / -0.001477531483704371
Pass 53 done, skipped 0 of 15 / -0.001477531483704371
Pass 54 done, skipped 0 of 15 / -0.001477531483704371
Pass 55 done, skipped 0 of 15 / -0.001477531483704371
Pass 56 done, skipped 0 of 15 / -0.001477531483704371
Pass 57 done, skipped 0 of 15 / -0.001477531483704371
Pass 58 done, skipped 0 of 15 / -0.001477531483704371
Pass 59 done, skipped 0 of 15 / -0.001477531483704371
Pass 60 done, skipped 0 of 15 / -0.00099292815066179
Pass 61 done, skipped 0 of 15 / -0.00099292815066179
Pass 62 done, skipped 0 of 15 / -0.0001923168828579579
Pass 63 done, skipped 0 of 15 / -0.0001923168828579579
Pass 64 done, skipped 0 of 15 / -0.0001923168828579579
Pass 65 done, skipped 0 of 15 / -0.0001923168828579579
Pass 66 done, skipped 0 of 15 / -0.0001923168828579579
Pass 67 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 68 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 69 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 70 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 71 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 72 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 73 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 74 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 75 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 76 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 77 done, skipped 0 of 15 / -5.417787160485262e-05
Pass 78 done, skipped 0 of 15 / -5.417787160485262e-05
Pass 79 done, skipped 0 of 15 / -4.124380700366694e-05
Pass 80 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 81 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 82 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 83 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 84 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 85 done, skipped 0 of 15 / -2.638869084576161e-06
Pass 86 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 87 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 88 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 89 done, skipped 0 of 15 / -1.735891693984063e-06
Pass 90 done, skipped 0 of 15 / -1.588914600224903e-06
Pass 91 done, skipped 0 of 15 / -1.200137850784682e-06
Pass 92 done, skipped 0 of 15 / -2.60906478723283e-07
Pass 93 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 94 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 95 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 96 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 97 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 98 done, skipped 0 of 15 / -3.005678719884437e-08
Pass 99 done, skipped 0 of 15 / -3.005678719884437e-08
PSO Finished 1490 of 1500 planned passes: true
0 1.368379064359672e-06
1 -0.0001682938833832739
2 -4.161830791079343e-05


1568 mcs.

Находит истинный минимум Sphere(0, 0, 0) = 0.

MT5 находит (выше есть пост с логами) тот же минимум, но только в ~10 000 раз медленней.
 

 
fxsaber:

Находит истинный минимум Sphere(0, 0, 0) = 0.

MT5 находит (выше есть пост с логами) тот же минимум, но только в ~10 000 раз медленней.
 

Нет, четко нужно ответить:

Рой - столько то запусков ФФ, лучший результат такой то.

МТ -  столько то запусков ФФ, лучший результат такой то.

То есть так, что бы в двух рядом строчках были цифры которые можно было бы сравнить, что бы не пришлось шарить по длинным портянкам (они интересны разве что сотрудникам СД).  

Только так можно сравнивать время - по запускам ФФ.

На данный момент я вижу, что МТ делает гораздо больше запусков, 9472 против 99 у Роя, то есть в 100 раз больше, плюс накладные расходы по общению с агентами.

Эта задача - просто фантик невесомый, поэтому МТ её выполняет не эффективно быстро. Если же тестировать на более серьёзных задачах, таких как оптимизация советников с десятками параметров, то МТ порвет Рой"я в клочья как тузик грелку.

 
Andrey Dik:

Нет, четко нужно ответить:

Вы увидели цифры.

Эта задача - просто фантик невесомый, поэтому МТ её выполняет не эффективно быстро. Если же тестировать на более серьёзных задачах, таких как оптимизация советников с десятками параметров, то МТ порвет Рой"я в клочья как тузик грелку.

MT4 не справился даже с "фантиком".

Приведите целевую мат. функцию, с которой великолепно справляется MT5 (и результат). Покажу результат МРЧ на ней.

 
fxsaber:

А предложенная реализация Метода Роя Частиц на одном ядре справилась с тем же самым за 850 мкс!

Что я делаю не так?!

Вы наступаете на грабли "частное решение vs универсальный решатель" и делаете вид, что не понимаете.

Требования к решателю много лет назад поднялись выше "счас напишу цикл for и порву всех", чем на наших форумах не один программист хвастался.

Поднимите сложность и объем вычислений выше системного оверхеда в десяток миллисекунд и сразу увидите, кто победитель. А пока вы предлагаете задачи ниже горизонта системного оверхеда на запуск процессов и синхронизации, это никому не интересно.

По сути вы читер, делающий вид, что не понимаете читинга.

 
fxsaber:

Вы увидели цифры.

MT4 не справился даже с "фантиком".

Приведите целевую мат. функцию, с которой великолепно справляется MT5 (и результат). Покажу результат МРЧ на ней.

Возможно - в МТ4 баг какой то...

Задача:

#property library
#property strict

int  countRuns    = 0;

//+------------------------------------------------------------------+
int GetParamCount () export
{
  textLen = StringLen(Code);
  return (textLen);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{
  min = 0.0;
  max = 40.0;
  step = 1.0;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &param []) export
{
  countRuns++;
  
  int sizeArray = ArraySize (param);
  if(sizeArray != textLen)
    return (0.0);
  
  int ffVolue = 0;
  
  for (int i=0; i< textLen; i++)
  {
    if(GetCode(param [i]) == StringSubstr(Code, i, 1))
      ffVolue++;
  }
    
  return (double(ffVolue));
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{
  return (countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void PrintCodeToFile (double &param []) export
{
  int sizeArray = ArraySize (param);
  if(sizeArray != textLen)
  {
    Print ("Неверное количество параметров, печать в файл производится не будет!");
    return;
  }
  
  string code = "";
  
  for(int i=0; i<textLen; i++)
  {
    code+=GetCode (param[i]);
  }
  
  int handle = FileOpen ("decodeFF.csv", FILE_READ|FILE_WRITE|FILE_ANSI|FILE_CSV);
  
  if(handle==INVALID_HANDLE)
  {
    Print ("Ошибка записи в файл востановленного текста ФФ. Ошибка: "+ (string)GetLastError());
    return;
  }
  FileWriteString(handle, code);
  FileClose (handle);
}
//+------------------------------------------------------------------+

string GetCode (double param)
{
  int p = (int) MathRound (param);
  if(p <0)
    p = 0;
  if(p > 40)
    p = 40;

  return (Key [p]);
}

string Key [41] = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", ";", ":", ".", ",", "-", "?", "!", " "};
int textLen = 0;
string Code = "редко научная статья сочетает в себе эти два типа";

Результаты моего алгоритма и МТ.
 

 

По поводу споров "мой ГА делает в десятки раз меньше запусков" - все это обсуждалось тут.

И кастомные ГА для TradeStation обсуждали тут, где лично мне доказывали, что можно в 200 запусков ГА найти приемлемое решение. Конечно, это было просто смешно - автор вручную и в грязную подстраивал/подкручивал свой собственный случай, чтобы показать "у МТ делает 10 000 проходов, а я ~200".

У нас универсальный решатель, который без 5-10 подкруточных параметров может автоматически и более-менее полно просканить область поиска и найти достаточно приемлемые результаты.

Когда задача с областью решений в триллионы проходов, никакими 100-200-1000 проходами даже близко не подойти к решению. Дай бог за 10 000 нащупать, потом сузить границы и еще раз пройтись ГА. Потом, может еще.

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