Микаелян Саро
Микаелян Саро Блог компании TSLab
12 ноября 2020, 12:17

Поговорим немного об оптимизации?!

Приветствую.

Не станем углубляться в философию оптимизации своего алгоритма, и для чего нужен бектест. Могу сказать свое мнение — оптимизировать можно, но только делайте это правильно. В своей практике, бектестинг для меня играет крайне малую роль при создании алгоритма. Но все же некие аспекты и зависимости можно выделить.
Для начала хотелось бы показать как вообще это выглядет все в рамках TSLab.
Два примера — на первом рисунке дефолтно созданный алгоритм под простые индикаторы, RSI 20 поверх SMA20. Купили когда индикатор близок к 100, продали когда близок к нулю. Никаких фильтров и усложнений (так нужно для данного поста). Так же для примера показана таблица результатов под 400проходов. От 5 до 100 с шагом 5 для каждого индикатора. (тоже лишь для примера). В ней можно усмотреть что количество отрицательных результатов — довольно маленькое. (удачный пример, не более)

Поговорим немного об оптимизации?!
На втором рисунке уже прооптимизированный и немного другой вид 3D графика. На точках, проще понимать распределение доходности в зависимости от выбора параметра. Соответственно зеленные точки — профит, красные, убыток.

Поговорим немного об оптимизации?!

Ниже правила, которые я выработал для себя
1 Не подгоняйте свой алгоритм под рынок. Прибыль на истории не гарантирует доход, в реальных торгах. Первая причина — машина подбирает параметры по уже известной истории, которая не изменится. Вторая — не известно как изменится рынок завтра. Мы не говорим даже о глобальных изменениях трендов, что на самом деле естественно для любой ценной бумаги. Так же может измениться техническая сторона, размер комиссии, шаг цены, стоимость шага цены и другие косты.
Один из методов обойти проблему — делать бектестинг и следом форвард тест. Так же можно сгенерировать случайные котировки для своей бумаги и прогнать тест на произвольных котировках.

 2 Анализируя, таблицу результатов оптимизации, оценивайте не только прибыльные параметры, но и убыточные. Недостаточно наблюдать за положительной статистикой, так как может оказаться, что ваш алгоритм эффективен только в 1% случайных параметров, а 99:% статистики — отрицательная. Потому, лучше всего либо оптимизировать параметры поэтапно — либо вести также и статистический анализ результатов. 

3 Метод подбора параметров для оптимизации. Например, создавая алгоритм — я обычно сам задаю параметр. К примеру понимая, что объем торгов в 10 000лотов за час, на ликвидном тикере это очень мало, не стану указывать подбор параметра с 1 до 1000000, а укажу значение от 40к до 100к с шагом 5000. Если понимаю, что мне важна средняя за большой период, то глупо будет оптимизировать этот параметр от 1 до 200, и тд.

4
Не верить, слепо, результатам. Если мы делаем оптимизацию, то не нужно только статистикой пользоваться. К примеру мне под мои риски, не подходит стоп на сделку, в размере 2%. Но я могу проанализировать результаты, для оценки, могу ли я изменить, что то, и принять такие риски. (ну например если таким образом удастся снизить количество убыточных сделок подряд, и более серьезную просадку по счету, исходя из серии убыточних сделок).

 5 Количество сделок, должно быть достаточным для анализа. Самое важное для меня, это количество сделок. ДА, для длинных трендов, когда сделки совершаются не каждый месяц, сложно собрать статистику. И в таком случае я обычно беру алгоритм, адаптирую под локальные тренды, и смотрю, как «теоретически» будет выглядеть система, при большом количестве сделок. Хотя бы 100 сделок в год. Иначе большинство машин, могут подогнать статистику на 10 сделок — купил продал и все — профит. А если тикер в хорошем тренде, то не опередить алгоритм, сценарий купил и держи.

 6 Близкие параметры, но далекие результаты. Если например, мы наблюдаем, что при изменении параметра на один шаг — результаты сильно разнятся — то скорее всего, эти параметры не подходят для оценки качества и устойчивости алгоритма. Например, период индикатора 70 дает профит 1000$ а период 65 дает убыток 200$ то сам алгоритм. Очень слабый. Его нужно насыщать фильтрами и модулями управления денег и рисков.

 7 Диверсификация своей торговли, разными вариациями параметров. Итак, мы сделали большое количество бектестов, и можем выделить себе некий набор параметров, удовлетворяющих нашим требованиям. Дальше не обязательно выбирать какие то конкретные параметры. Можно запустить 2-5-10 сценариев, и наблюдать слабые и сильные зоны параметров, и возможно от каких либо отказаться, а какие то продолжат работу.

 Пишите свои наблюдения и замечания, а так же пожелания!) Спасибо.

28 Комментариев
  • ch5oh
    12 ноября 2020, 12:28
    А вот эта трёхмерная поверхность результатов она в какой версии появилась?
  • Дмитрий Овчинников
    12 ноября 2020, 12:32
    то сам алгоритм. Очень слабый. Его нужно насыщать фильтрами

    Слабый алгоритм никакими фильтрами сильным не сделать, просто подгоните под историю и все.
    Слабый алгоритм надо выбрасывать и писать сильный :)
  • Replikant_mih
    12 ноября 2020, 14:13

    Для меня research при создании и анализе стратегии — ключевой фактор в эффективности всего мероприятия.

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


    >> «6 Близкие параметры, но далекие результаты.»

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

  • T-800
    12 ноября 2020, 15:11
    Пунктов много, некоторые не совсем понял, я попробую сформулировать свои:
    1. Выбор правильного тикера и рынка (например, торгуются тренды и правильных тикеров для этого не так много).
    2. Тест на истории за 5 лет минимум.
    3. Количество сделок от 50, а лучше 100.
    4. Выбор по таким критериям, как лучшее соотношение прибыль в год/макс. просадка, минимальная просадка в днях и оценка кривизны эквити.
    5. Ну и прибыльность при различных значениях параметров.     

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн