Оптимизация по двум результатам - страница 2

 

произошло следующее
я ввёл инпут переменные, чтоб они были доступны оптимизатору
и перечислил эти переменные при получении хендла индикатора
вот так:


в результате проходы были без единого трейда.
тогда в скобках функций iMA и iStochastic я исправил как было до этого, то есть вместо инпут переменной я выставил обратно цыфры, означающие периоды для индюков, 
тогда оптимизатор по любому проходу выполнил прописанный в онТик алгоритм. на всех проходах один алгоритм, с одними и теми же параметрами индикатора, потому что хэндлы получены в онИнит. их нельзя получить в инпут переменных,
вот об этом я и пытаюсь у вас спросить... как объявить в инпут параметры моих индикаторов


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Оптимизация по двум результатам

Sergey Lobzankin, 2019.02.17 19:11

У вас нигде не завалялось банального примера, ну с той же машкой, как к ней обращаться, по хенду? или фунция соответствующая для обращения?
ААААаааааа,... погодите, так можно же код советника в терминале той же МА посмотреть)))))
спасибо)))

А.. нет))) во встроенном советнике нет онТестер
зато на глобальном уровне ещё до онИнит есть:
double TradeSizeOptimized(void)

и прочее бла бла бла



я не увидел там в коде, как разработчик дал понять оптимизатору, что именно перебирать.
допустим, вот кратчайший путь. CopyBuffer скопировал периоды индюков и записал их в массивы, вы все отправляете читать справку, читаем, массивы не могут выступать в качестве инпут переменных, 
кратчайший путь привёл в тупик)))
 
Sergey Lobzankin:

произошло следующее
я ввёл инпут переменные, чтоб они были доступны оптимизатору
и перечислил эти переменные при получении хендла индикатора
вот так:


в результате проходы были без единого трейда.
тогда в скобках функций iMA и iStochastic я исправил как было до этого, то есть вместо инпут переменной я выставил обратно цыфры, означающие периоды для индюков, 
тогда оптимизатор по любому проходу выполнил прописанный в онТик алгоритм. на всех проходах один алгоритм, с одними и теми же параметрами индикатора, потому что хэндлы получены в онИнит. их нельзя получить в инпут переменных,
вот об этом я и пытаюсь у вас спросить... как объявить в инпут параметры моих индикаторов



Проверяйте и проверьте получение хэндла индикатора

//Хендаль объявляем handle_MA_TF
   handle_MA_TF=iMA(Symbol(),Filter_MA_TF,Filter_MA_Period,0,Filter_MA_Metod,0);
   if(handle_MA_TF==INVALID_HANDLE)
     {
      PrintFormat("Failed to create handle of the handle_MA_TF indicator for the symbol %s/%s, error code %d",
                  Symbol(),EnumToString(Period()),GetLastError());
      return(INIT_FAILED);
     }

А значение индикатора уже получаю через функцию

double MA_TF(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(handle_MA_TF,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the handle_MA_TF indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }
 
Aleksey Vyazmikin:

Проверяйте и проверьте получение хэндла индикатора

ключ в вашем ответе оказался
проверка не вернула ошибку, то есть хендаль получен верно, но сам факт проверки запустил процесс и теперь всё нормально, даже вторую часть кода не использовал, просто проверку нужно было выставить,
спасибо

 
Sergey Lobzankin:

ключ в вашем ответе оказался
проверка не вернула ошибку, то есть хендаль получен верно, но сам факт проверки запустил процесс и теперь всё нормально, даже вторую часть кода не использовал, просто проверку нужно было выставить,
спасибо

Пожалуйста.

 

Сильно не углублялся в проблему, но решение вижу такое. Вы из двух параметров сделайте один посредством простой математической операции в итоге вы получите общую переменную, которая будет одна останется только выбрать в какую сторону её оптимизировать. Как пример:

У меня две функции оценки ошибок обе изменяются от 0 до 100, но при этом одна изменяется линейно, а вторя имеет вид параболы. то есть сначала растёт незначительно а потом всё быстрее и быстрее. Но обе приходят ко 100 одновременно. Что я сделал?? Да очень просто я вычел одну функцию из другой и стал оптимизировать не сами эти функции, а разницу между ними которая естественно должна уменьшатся. Уменьшая разницу между ними  всё равно заставляю их обе двигаться к 100 процентам. Тем самым оптимизируя один параметр "разница" в которой задействованы обе функции. Как то так...