Автооптимизация советника - в поисках алгоритма "Больших Зеленых Пятен" :)

 

Натолкнулся на одну проблему и хочу задать вопрос общественности - возможно, существует в природе готовый алгоритм и не придется делать что-то запредельно кустарное.

Итак, есть советник-полуавтомат (результаты на реале весьма неплохие; наберет 30 сделок - поделюсь стейтом), который на каждом баре подгоняет два своих параметра (два - для простоты) под рынок, строя карту доходности. По одной оси - первый параметр, по другой - второй. Минусовые значения доходности соотвествуют "красной" ячейке, плюсовые - "зеленой". На выходе получается красно-зеленая карта. Очевидно, что нас интересует не просто комбинация двух параметров, которая даст максимальный доход на истории(!), а такая, все "окресности" которой будут зелеными. Т.е. мы должны на цветной карте найти максимальное по площади зеленое пятно и ткнуть в его центр. Этим cпособом мы найдем устойчивую комбинацию параметров, которая, скорее всего, принесет доход даже при неизбежных колебаниях рынка.

Так вот, именно поиск зеленого пятна и его центра я делаю вручную, а хотелось бы этот процесс автоматизировать. Есть ли соображения на этот счет?

 
wmlab:

Натолкнулся на одну проблему и хочу задать вопрос общественности - возможно, существует в природе готовый алгоритм и не придется делать что-то запредельно кустарное.

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

А вот "кустарное" решение у меня, пожалуй, есть. Но сперва посмотрим - может и правда найдётся что дельное у людей - знатоков математики тут хватает.

 
Azzx:

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

А вот "кустарное" решение у меня, пожалуй, есть. Но сперва посмотрим - может и правда найдётся что дельное у людей - знатоков математики тут хватает.



Интересно было бы сравнить нашу "кустарщину". Я обдумываю скользящий квадрат с анализом содержимого.
 

Средний Х и средний Y точек одной области, но если облась в виде восьмерки, попадем на перешеек. Можно позамазывать перешейки, пройтись по X, если размер области по Y сужается, затем расширяется - значит перешеек, закрасить его красным, затем также по Y и X.

Кажется наиболее адекватным вариантом - вписанная окружность с максимальным радиусом, но существует ли какой быстрый способ ее поиска...

 
Integer:

Кажется наиболее адекватным вариантом - вписанная окружность с максимальным радиусом, но существует ли какой быстрый способ ее поиска...

Функция получится, я так думаю, очень простая с небольшим количеством оптимизируемых параметров, поэтому можно и генетическим алгоритмом искать прямо в онлайн. Если, конечно, ТФ не очень мелкий (не на каждом тике и не М1). Начиная с M5 (максимум 5 минут на поиск) должно получится.
 
Алгоритм

0. Определиться с наличием зеленых точек вообще))

1. Для всех зеленых точек поля подсчитать количество зеленых соседей (от 0 до 8).

2. Принять N=0

3. Пока не имеется точек с N зелеными соседями, N++.

4. Закрасить красным все зеленые точки с N зелеными соседями. Пересчитать количество зеленых соседей для всех точек.

5. Подсчитать количество оставшихся зеленых точек М. Если М==1, алгоритм закончен, центр найден. Если M==0, восстановить только что закрашенные точки и перейти к шагу 7.

6. переход к шагу 3.

7. Проверить область из оставшихся M точек на односвязность (каждая точка должна иметь хотя бы одного соседа из оставшихся M-1). Если область односвязна, за центр принять точку, ближайшую к среднему арифметическому всех M координат. Если область многосвязна, подсчитать количество односвязных компонентов, выбрать наибольший по количеству входящих точек (или несколько с одинаковым максимальным количеством) и вычислить среднее арифметическое в нем (них).

8. Конец.



Вроде так, проверяйте.

upd Все, теперь должно быть нормально

 
Надо разок проверить вручную, Мурад
 
alsu:
Надо разок проверить вручную, Мурад

Я как раз прикидываю в уме, как это все будет работать.
 
wmlab:

Я как раз прикидываю в уме, как это все будет работать.
Мы просто на каждом шаге стираем 1 слой границы для каждой зеленой области, в результате должна остаться та, которая изначально имела наибольший радиус, причем прийти должны как раз в серединку. Идея такая.
 
alsu:
Мы просто на каждом шаге стираем 1 слой границы для каждой зеленой области, в результате должна остаться та, которая изначально имела наибольший радиус, причем прийти должны как раз в серединку. Идея такая.
Если область неправильной формы, то первыми будут убираться элементы на "острых" краях, т.к. у них меньше зеленых соседей. В результате алгоритм стремится сначала привести каждую область к форме окружности, а потом шаг за шагом уменьшает ее радиус, пока не придет к центру.
 
alsu:
Мы просто на каждом шаге стираем 1 слой границы для каждой зеленой области, в результате должна остаться та, которая изначально имела наибольший радиус, причем прийти должны как раз в серединку. Идея такая.

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