Микаелян Саро
Микаелян Саро Блог компании 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 какой-нить, например) на плавающем окне и посмотреть что происходит. Шипы при усреднении уйдут, будет видна глазом закономерность или её отсутствие. Если есть сомнения о наличии закономерности можно проводить доп. эксперименты, крутить данные по-разному и т.д. Ну а если закономерность выявлена — понять из какого диапазона брать значения уже не проблема.

      • Replikant_mih
        12 ноября 2020, 14:43
        Микаелян Саро, Дело не только в шаге. В стохастической вселенной случайная величина как-то распределяется, например, нормально. Соответственно, даже если есть закономерность результат может попасть в любую точку этого распределения. Т.е. если при 1 +100, а при 2 -100 — это может быть частью нормы. Мне гораздо больше инфы даст 100 прогонов с шагом 1 пункт чем 2 прогона с шагом 1%.
          • Replikant_mih
            12 ноября 2020, 19:15
            Микаелян Саро, Это да), главное не попасться в ловушку не увидеть общее за частоколом частностей).
      • VladMih
        13 ноября 2020, 23:29
        Микаелян Саро, вот в этом комменте ключ к успеху,
        но пост получился совсем не об этом.
  • T-800
    12 ноября 2020, 15:11
    Пунктов много, некоторые не совсем понял, я попробую сформулировать свои:
    1. Выбор правильного тикера и рынка (например, торгуются тренды и правильных тикеров для этого не так много).
    2. Тест на истории за 5 лет минимум.
    3. Количество сделок от 50, а лучше 100.
    4. Выбор по таким критериям, как лучшее соотношение прибыль в год/макс. просадка, минимальная просадка в днях и оценка кривизны эквити.
    5. Ну и прибыльность при различных значениях параметров.     
      • T-800
        12 ноября 2020, 15:24
        Микаелян Саро, я торгую больше тренды. И системы часто уходят в просадку в одни и те же периоды времени. Поэтому да.
  • Михаил Табаков
    12 ноября 2020, 16:57
    чем вам in sample и  out of sample не нравится, все вопросы сразу отпадут
  • SenSoR
    12 ноября 2020, 19:33
    Кол-во сделок. Для себя выбираю системы от 1000 сделок, не меньше! Период тестирования — не менее 5 лет, лучше 10! Мои системы имеют несколько параметров, потому да, диверсификация по параметрам работает, проверено лично на 6-ти летнем отрезке реальной алго-торговли!)
    • Виталий
      13 ноября 2020, 09:25
      SenSoR, каждое слово плюсую! в 2016 году алгоритм хороший работал с 35 сделками в год где-то и историей бектеста 10лет  — гнался за редкими сделками думал это выгодно и круто, но после того как в марте 2016 среднесрочные тренды ушли на нашем рынке начал сливать.
      в итоге пересмотрел подход и ушел на 100+ сделок, т.е. ловить более мелкие тренды стал.
      и также тестирую на 10+ лет ибо смысл в алгоритме, который работает 2 года из 10)
      кстати при тестинге за 10+ лет круто смотреть график эквити — находил конечно же кучу параметров, когда условно 2 года круто 3 в минус потом 1 год круто 4 в минус. Поэтому многие и нарываются так — протестирую два последних картала и запускают…
      • SenSoR
        13 ноября 2020, 09:58
        Виталий, 100+ сделок — переподгон. 500+ сделок — тоже переподгон. 1000+ сделок уже статистика, хотя и тут может быть переподгон для более глобального масштаба графика)
        • Виталий
          13 ноября 2020, 16:41
          SenSoR, 100+- это в год
          а на тесте 1300+-было
          и с чего это с 35 на 100 переподгон? так-то более мелкие тренды система стала ловить совсем другие, т.е раньше заходить и раньше выходить, в боковике активнее пилиться туда сюда
        • VladMih
          13 ноября 2020, 23:27
          SenSoR, математической логики в вашем комменте ноль.
          1000 — она и в Африке 1000.
          • SenSoR
            14 ноября 2020, 13:02
            VladMih, Я использую в тестах своих систем минимум 1000 сделок. Имхо для меня это работает и приносит прибыль, и мне неважно имеет это математическую логику или нет. Я просто в предыдущем своем комменте забыл вставить слово «Имхо» 
            • VladMih
              14 ноября 2020, 13:51
              SenSoR, 
              во-первых, здесь обсуждается не одна (ваша) система, а принцип;
              во-вторых,… Есть еще и в десятых, но не вижу смысла спорить с человеком, который в бурной радости от профитности своей ТС сделал глобальные выводы и наслаждается ими. 
              Поверьте — это пройдет, вопрос времени. Я тоже такой был.

              И только тогда вы вернетесь к моим предыдущим комментарием — начнете над ними думать. Человек так устроен — он не хочет ничего менять в своих взглядах пока его устраивает результат. А часть, как вы, вообще считает, что обрел истину и она непоколЕбима. ))))
              • SenSoR
                15 ноября 2020, 20:16
                VladMih, Я тоже не собирался спорить о чем-либо, уж поверьте) Тем более с завсегдатаем смартлаба, у которого написано тонны комментов, и часто негативных). И я не радуюсь своим системам как ребенок, т.к. уже прошел через горечь потерь. Я в первую очередь практик и постоянно учусь и совершенствую свои системы, что бы стать лучше. На смартлабе и так очень редко что-либо пишу, а в этом посте просто высказал свою точку зрения на количество сделок в тестировании систем, отчего получил недружелюбный выпад с вашей стороны. Давайте лучше закончим. В который раз убеждаюсь, что лучше быть безмолвным наблюдателем смартлаба, чем участвовать в бессмысленных дискуссиях. Удачи вам)
                • VladMih
                  15 ноября 2020, 22:24
                  SenSoR, да, вам здесь точно лучше не писать.
                  Не умеете общаться в русле даже своей же темы, предпочитаете переходы на личности, да еще и мелочно, чисто по-женски: «Ах, у вас комментарии негативные». 
                  Да, негативные есть и их много — что из того? Я ж не написал, что у вас уши большие — я ваши взгляды критиковал!
                  Не нравится критика, ну так и сидите себе под веником.
                  И под моим ЧС.
      • VladMih
        13 ноября 2020, 23:25
        Виталий, естественно, более короткие тренды (а еще лучше — свинги, грубо говоря — остатки импульсов) ловить проще
        или, как минимум, надежней.
        Здесь на первое место выходят либо трал, либо целеоопределение.
    • VladMih
      13 ноября 2020, 23:30
      SenSoR, где взять 1000 сделок для долгосрочной стратегии?
      В этом вопросе подсказка где искать грааль.
      • SenSoR
        14 ноября 2020, 13:07
        VladMih, Тут не подскажу. У меня более быстрые стратегии, так что 1000 сделок в статистике набрать не сложно)
        • VladMih
          14 ноября 2020, 13:43
          SenSoR, читать учитесь. Или думать над прочитанным.
          Я не просил подсказать, а НАОБОРОТ — давал подсказку ВАМ.

          Открою маленький секрет (уточню подсказку) — можно набрать ЛЯМ сделок, но в будущем робот будет сливать «как все», если в него не заложено нечто более важное. И таких примеров тьма.
  • VladMih
    13 ноября 2020, 23:23
    Саро, очень много вопросов к этому посту, поэтому не плюсую.
    Это впервые за всю историю нашего знакомства, ты знаешь.

    оптимизировать можно, но только делайте это правильно
    Сразу со старта задаешь ноту о том, что оптимизация по сути предосудительна и лишь если она очень правильная (какая???)… В общем «если нельзя, но очень хочется, то можно».
    Может ты и не хотел так сказать, но я хорошо знаю русский. Язык.

    Не подгоняйте свой алгоритм под рынок.
    Не согласится только идиот. НО…
    Что предлагается для решения этой проблемы?
    делать бектестинг и следом форвард тест.
    А еще сгенерить случайные котировки… Вообще бред.
    Форвард понимаю! Но кто считает форвард панацеей, те вообще дебилы. Извини, не обижайся — это про вообще.
    Если сравнивать оптимизацию с форвардом, то для меня чисто логически более надежной выглядит оптимизация с включением «вашего» форварда. Потому, что у неё больше шансов удержаться в рынке дольше, чем без включения в оптимизацию последнего участка рынка.

    Дальше даже читать не стал. Еще раз извини.
    И надеюсь, что этот коммент воспримешь конструктивом.
    Лично к тебе отношусь за ши бись. Точка. )

    PS: не пропусти 2 моих следующих (по времени) коммента (выше) —
    в них четкий ответ на все возможные вопросы.

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

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