Subj
По результатам обсуждений последних дней увидел непонимание, цель этого текста — прояснить, расставить точки над й.
Непонимание касается того, каким образом я обновляю торговые алгоритмы и почему попытки повторить не увенчиваются успехом.
Напишу последовательность шагов ниже в виде скрипта.
- Создаём много разных стратегий, они же торговые алгоритмы. Если у вас меняются параметры, это один и тот же алгоритм. Я же имею ввиду, что они должны быть принципиально разные. Например: открываемся по пересечению МА, закрываемся по стохастику. Открываемся по RSI, закрываемся скользящим стопом. Открываемся по MACD, закрываемся по пересечению Close AMA и т.д.
- Тестируем их на разных инструментах и разных периодах. Дискретность можно выбрать месяц.
- Успешные запоминаем, даже если они были успешными только на одном инструменте и в одном месяце.
- Далее тестируем скользящим окном. Определяем дату начала, пусть 01.01.2023
- Определяем шаг (7 дн) и размеры окна (14 дн)
- Тестируем всё, что получилось в (3), на периоде в 14 дн до даты из (4), отбираем топ нужного количества по, например, прибыли (у меня сейчас так, и на графике ниже так). Например, вы выделили на инструмент депозит 1000 и хотите, чтобы у вас было 10 алгоритмов в лонг и 10 в шорт. Соответственно, отбираете 10 лучших лонг-алгоритмов по прибыли и 10 лучших шорт-алгоритмов. Понятно, что по части алгоритмов там будут гигантские просадки и вообще в выборку попадёт часть алгоритмов, которые нужно исключить, поскольку мы тут смотрим только на прибыль. Пока что на это забьём, ниже будет понятно, почему.
- После того, как отобрали нужное количество для лонг и шорт, с даты (4) торгуем ими на длину шага (5).
- В конце периода в 23:59 принудительно всё закрываем.
- Добавляем к дате (4) шаг (5) и повторяем с шага (6) до тех пор, пока дата не станет той, до которой хотели тестировать.
При таком подходе имеем на криптовалютных фьючерсах (плечо 10, стартовый депозит 1000, комисс 0,04%) следующий рост чистой эквити (+156% за менее чем полгода):
То есть, даже несмотря на тот ужас, что внутри под капотом (только по прибыли отобранные алгоритмы с большими просадками), видим уже неплохую картину роста. Если подбирать алгоритмы не только по максимальной достигнутой прибыли, но и по гладкости эквити и минимуму просадок, то этот посредственный результат увеличивается почти на порядок, примерно до 1200-1300% за полгода, а кривая становится практически прямой. Это упражнение я как раз и проделывал руками в начале июня на реальном счёте.
Если убрать плечи, то получится соответственно 15% и 120-130% за полгода.
Результаты получаются разными в зависимости от того, что мы зададим в (5). Общее правило — при увеличении длины отрезков доходность падает.
Сомневаюсь, что это будет работать или что вы достигнете сопоставимых результатов, если у вас всего несколько торговых алгоритмов, но это покажет только эксперимент.
Дополнительно отмечу, что это всё работает на минутках. Там очень, очень много шума, но и доходность несопоставима с 15 или, тем более 60 и выше таймфреймами. И в этой концепции шум, как получилось в реальной торговле, не мешает. Нужно просто его правильно отфильтровать.
Для примера приведу описание одного алгоритма:
для покупки (все три сигнала должны стать истинны)
B:AMA/Close_AboveIndicator; — Close должна быть выше AMA
B:DeepExtremumHigh_AbsSpeedFall; — Абсолютное значение скорости индикатора DeepExtremumHigh падает
B:MACDCD_DirectionDown; — значение CD индикатора MACD уменьшается — кривая движется вниз
для продажи (все три сигнала должны стать истинны)
S:DEMA_AbsSpeedGrows; — абсолютная скорость изменения DEMA растёт
S:HMA/DEMA_CrossDown; — HMA пересекла DEMA вниз
S:Stochastic%K/Stochastic%D_CrossUpContinues; — последнее пересечение медленного стохастика быстрым (не важно, сколько свечей назад) было вверх
и это указывает, что этому алгоритму разрешён только лонг
M:LongAllowed;
Прелесть такого описания стратегии в том, что не имеет значения, какой тут инструмент, какая у него цена или волатильность и какой таймфрейм. В нём не зашиты никакие абсолютные или относительные значения. По сути, просто идёт оперирование сигналами. А это значит, что можно запускать одну и ту же стратегию и сравнивать её результаты на разных рынках, разных инструментах и таймфреймах, но я работаю только на минутках, с криптовалютными фьючерсами, фьючерсами МосБиржи и акциями МосБиржи, во всяком случае, пока.
И если после прочтения стало яснее, как я это делаю, то цель поста достигнута.
В 2005 г я познакомился с прогой Нирвана.Там из 400 разных систем и алгоритмов выходил 1 сигнал лонг или шорт. Боюсь тебя обидеть, но ты изобретаешь колесо… перебирая алгоритмы, индикаторы и системы.Проги ВА уже давно есть и они размечают график в любых таймах, но дают сотни вариантов с разной вероятностью и вверх и вниз.Я отказался от любых прог и инд-в в 2010г и советую это сделать всем в пользу VSA и ВА Эллиота.
А главное — я стал очень ленивым, но в хорошем смысле, то есть, если я могу написать код, который будет делать рутинную работу за меня, то лучше я его напишу. Тем более, я знаю VB, C#, SQL, Java, Python, Lua и бог его знает сколько ещё языков, что я, зря это всё учил? Сначала ты работаешь на знания, а потом пусть они работают на тебя.
Вопреки устоявшемуся мнению, хаос гораздо проще для прогноза, чем случайный процесс. И вообще, вложенная размерность приращений биржевых цен обычно сильно больше характерной для хаотического движения. где-то 10-15 против 3-5 для хаоса.
Цикл времени = фрактал Эллиота 3-2 имеет закон своего рисования.Хаос тем сильнее чем меньше ликвидность те в малых таймах или в неликвидах.
Я здесь написал свой кастомный кусок тестера в MT5, и тоже столкнулся с проблемой, что цифра прибыли, выдаваемая этим тестером мне недостаточно говорит о стратегии, а смотреть глазами кучу csv файлов с приращениями эквити некошерно.
в итоге добавил еще одно кастомное значение — R-квадрат. и стало мне счастье :)
мне проще, я сравниваю значения, полученные при оптимизации одного алгоритма, там число сделок отличается, но не критически. более того, при значительном количестве сделок уже практически нет никакого влияния на R-квадрат от увеличения или уменьшения числа сделок.
«Ограничения R-квадрат
R-квадрат даст Вам оценку отношения между движениями зависимой переменной, основанную на движениях независимой переменной. Она не скажет, является ли выбранная модель хорошей или плохой, а также не скажет, являются ли данные и прогнозы предвзятыми. Высокий или низкий квадрат R не обязательно является хорошим или плохим, так как он не передает надежность модели и не говорит вам, правильно ли вы выбрали регрессию. Вы можете получить низкий R квадрат для хорошей модели, или высокий R квадрат для плохо оснащенной модели, и наоборот.»
datascience.eu/ru/%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0-%D0%B8-%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0/r-%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D0%BE%D0%B5-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5/
Далее ставлю оценку по такой формуле:
arr_eq[ — это массив значений эквити
arr_norm_eq[ — это массив идеальной эквити
temp:=0; temp2:=0;
for z:=1 to maxi do begin
temp:=temp+2*arr_eq[z]*arr_norm_eq[z];
temp2:=temp2+
(arr_eq[z]*arr_eq[z]+arr_norm_eq[z]*arr_norm_eq[z]);
end;
OcenkaEquity:=(10*temp/temp2-5)*2;
Значения получаются от 0 до 10 макс.
Работает идиально
Можно для каждого шага суммировать только отрицательные отклонения значения от эталона, а положительные заменять нулём. Будет ещё лучше.
1) максимальное конечное значение эталонной эквити должно быть равно не конечной накопленной прибыли, а максимальной достигнутой за всё время. То есть, если эквити достигала значения 100, а на конец стала 90 — нужно эталонную рисовать до 100.
2) Можно эталон строить по методу наименьших квадратов. Это судя по моим картинкам, должно дать больше интересных (более доходных) стратегий, поскольку МНК учитывает просадки ниже нуля (исходного размера депозита) и более аккуратно рисует среднюю.
На той картинке плохо видно. Эталонная у меня рисуется в макс значение по эквити:
Как может более гладкая эквити (высокий R2) быть хуже менее гладкой? и
да или нет?
если НЕТ, то тогда НЕТ доказательства работоспособности алгоритмов на незнакомых данных… а если его нет, то о чем спич?
внимательно перечитал п.1 и если все так, как описано в нём, плюс к тому, если нет проверки на устойчивость решения, то можно сделать вывод, что все получаемые решения могут являться случайными
и если это так, то однажды звезды могут встать так, что будет очень неприятно
есть довольно точная наука, именуемая математикой, и если её игнорировать, то можно очень сильно раскаяться в будущем
переобученность ещё никто не отменял
не обязательно, что это произойдет, тем более, если человек из 1 рубля умеет делать 441 рубль за 90 дней, но опасность такая всегда будет иметь место
с третьей стороны, если человек умеет делать из 1 рубля целых 441 рубль за 90 дней, то зачем он всем рассказывает об этом?
лучше пусть пришлет через полгода фото с яхты на багамах и это будет самой лучшей рекламой
при этом никого не будет интересовать, как именно он это сделал ))) не так ли?
лично я порадуюсь за него ))) и буду с особенным усердием перечитывать его посты, пытаясь понять то, что он не сказал ))
bascomo,
лично я всегда радуюсь, когда кто-то достигает чего-то необычного!!!
это значит, что на одного счастливого человека стало больше, а это — хорошо!!!
у нас обычно так:
1. Собираем пул робастных систем (очевидно их количество не тысяча).
2. Оптимизируем параметры и таймфреймы за окно.
3. Выбираем по ROA.
4. Запускаем в следующем окне.
Но мысль понял: кидаем случайные параметры, но только один раз.
У MACD, AMA, HMA, DEMA, Stochastic нет параметров????
Рисую вот такой график
На нём три эквити,
— History — это на истории
— Emulate — это на живом потоке цен без исполнения ордеров
— Actual — это реальная торговля (на графике её нет, потому что алгоритм не включён)
Из-за проскальзываний отдельные точки кривых не совпадают, но тренд однообразный.
И это ленивый вариант.
Утончённый — это не неделю ждать и всё рубить, а точечно работать. Обнаружил, что какой-то начал плохо себя вести — пришлёпнул тапком, добавил новый.
Ну и самая главная фишка — чтоб по истории до дня ввода в торговлю мы видели, что эквити стабильно растёт в последнюю неделю. Глазами или кодом, не принципиально.
SD:=180/6;
S1:=Sin(1*180/6)*C;
S2:=Sin(2*180/6)*Ref(C,-1);
S3:=Sin(3*180/6)*Ref(C,-2);
S4:=Sin(4*180/6)*Ref(C,-3);
S5:=Sin(5*180/6)*Ref(C,-4);
Num:=S1+S2+S3+S4+S5;
Den:=Sin(SD)+Sin(2*SD)+Sin(3*SD)+Sin(4*SD)+Sin(5*SD);
Num/Den
На форексе не проверяли?
Отдельно «радуют» комментарии. Человек по сути раскрывает полную рабочую методику. Комментарии ясно показывают, почему 95% людей так никогда ничего и не заработают.