Фильтрация условий тестирования

 
Привет All,

не знаешь ли ты, существует ли возможность из кода эксперта прервать тестирование этого самого эксперта. Но не весь процесс тестирования, а лишь данного прохода. Например, я задаю параметры х1 (0...1...10 000) и х2 (0...1...10 000). Имеем 100 000 000 вариантов на перебор. Но значения х1 > 5 000 меня интересуют, только когда х2 делится на 31. Итого интересующих меня вариантов N, при этом N << 100 000 000. Теоретически, это сильно уменьшает время оптимизации. А практически, когда я пишу

extern int x1;
extern int x2;

int start()   {
   if (IsTesting() && (x1 > 5000 && x2 % 31 != 0)) {
      return(0);
   }   
... 
} 
// просьба за код не пинать, 
// т.к. он написан прямо в браузере :) 
// главное - смысл, надеюсь, передан :) 

то это не приводит к существенному ускорению процесса, т.к. старт все равно вызывается несколько миллионов раз.
Так вот, каков корректный метод (и существует ли такой) прервать итерацию тестирования на первом вызове Start() либо в Init()?

BRGDS,
magiXpert
 
А почему параметр не заменить на _х1, а в коде делать например х1=_x1*31;
 
Vinin:
А почему параметр не заменить на _х1, а в коде делать например х1=_x1*31;

Ну например потому, что я написал "например". А в реальном случае выразить их один через другой нельзя. Я пробовал, но единственный выход - именно управляемое прерывание.
 
Скажем так: параметры вообще не связаны, и отбираю их для тестирования я по условиям комбинирования.
В каком-то случае это их сравнение, в другом - проверка условий,  включающих математические операции. 
Вобщем все не так банально, как я привел в примере, и об их взаимосокращении можно даже не задумываться.
В таком случае уж проще делать миллионы return'ов.
 
magiXpert:
Скажем так: параметры вообще не связаны, и отбираю их для тестирования я по условиям комбинирования.
В каком-то случае это их сравнение, в другом - проверка условий, включающих математические операции.
Вобщем все не так банально, как я привел в примере, и об их взаимосокращении можно даже не задумываться.
В таком случае уж проще делать миллионы return'ов.

Я ответил как знал. Если будут другие ответы, то хорошо. Но остановить тестирование или оптимизацию из советника (или прервать с этими параметрами) невозможно. Единственный способ - предусмотеть эту ситуацию в эксперте и не создавать ненужных ситуаций, но это совсем другой вопрос.
 

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

 
Vinin:

Я ответил как знал. Если будут другие ответы, то хорошо. Но остановить тестирование или оптимизацию из советника (или прервать с этими параметрами) невозможно. Единственный способ - предусмотеть эту ситуацию в эксперте и не создавать ненужных ситуаций, но это совсем другой вопрос.

Спасибо :) Но предусмотреть все ситуации нельзя, я ведь думаю как человек, а компьютеру сложно меня понимать. Когда я начал думать как компьютер - понял,  что такое прерывание нужно. Но сделать не могу... Я уж подумал - если из Init что-нить не то вернуть,  может получится, но тут уже без разработчиков сложно что-то придумывать.
 
Figar0:

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



Прихода по времени нет, т.к. условия на проверку - один из самых "тяжелых" элементов в текущей реализации :) А генетике пофиг, при желании в добавок к стандартным ее терминам можно еще дописать "несчастный случай", для варианта непрохождения условий. Так или иначе, генетический оптимизатор у меня выключен.
 

Вообще-то все это возможно, нужно только несколько изменить угол зрения, тоесть управлять не из того советника который в данный момент оптимизируется, а управлять его клоном запущеным в тестере. Все это реализовано в представленной программе 'TestCommander (autooptimization) Инструмент трейдера'

Программа предназначена для облегчения рутинной работы трейдера
по тестированию и оптимизации экспертов, проведения последовательного мультивалютного,
мультипериодного и др. типов тестов и оптимизаций.
Перед началом теста или оптимизации программа проверяет наличие и состояние доступной истории.
Для проведения специализированных оптимизаций в программу заложена возможность
передачи комманд эксперту и получения от него ответной информации непосредственно во время проведения оптимизации
Реализована возможность проведения автооптимизации в указанное время запуская её из эксперта.
Доступно для оптимизации и тестирования одновременно до 10 переменных.
В программу заложена возможность добавления собственных макропрограмм тестирования и оптимизации.

 
Не совсем понял про угол, но на программку посмотрю на досуге. А все же интересно, какую роль играет код возврата Init'а. Может кто в курсе?
 
magiXpert:
Не совсем понял про угол, но на программку посмотрю на досуге. А все же интересно, какую роль играет код возврата Init'а. Может кто в курсе?
Никакую. Я несколько раз предлагал тут на форуме, чтобы его учитывали, но в ответ тишина.
Попробуйте в init или в start поделить на 0 - не проверял, но, возможно, поможет
Причина обращения: