11bish 148 Жалоба Опубликовано 12 октября, 2019 Сразу скажу, что в данном вопросе являюсь полным (точнее - пустым)) чайником. К алгоритмической торговле, конечно же, обращался в свое время, но она меня полностью разочаровала ввиду сильно нестабильности результатов, да и, честно скажу, все обычно заканчивалось плачевным сливом. Как демо-счетов, так и реалов. Однако мысли о том, что советниками все-таки можно зарабатывать, не покидала воспаленный мозг. И, учитывая то, что на форуме есть сильная поддержка в лице программиста (кстати, на других ресурсах такого не замечал), решил попробовать возобновить работу в этом направлении. Но здесь стал упираться в вопросы, которые не связаны с программированием, но связаны с проверкой роботоспособности советника. А именно - тестирование и оптимизация. Вот здесь, например, прозвучало такое слова, как "бектест". Сразу отнес его по отношению к советнику, а потом подумал, что мог быть и неправ. В разделе Автоматические торговые системы есть неплохие (на мой взгляд) варианты советников, которые было бы неплохо потестировать по-настоящему. Где-то на форуме уже попытался это сделать (тестер стратегий-выбор советника-выбор тф-выбор инструмента-выбор модели-старт) но навряд ли такое тестирование можно отнести к нормальному, т.к., если правильно понимаю, то у советника стоят в этом случае настройки по умолчанию. Конечно, есть возможность порыть в Гугле, но, скажу я вам, ничего этим не достиг. Во-первых, информация нескольких лет давности, т.е. не особо актуальна, во-вторых - как-то уж замудренно выложена. Да и видно, что выкладывали ее те, кому нужна была просто посещаемость блога/сайта. Тут буду потихоньку выкладывать свои грабли, если кто-то что-то понимает в этом деле, то - просвящайте))) учиться, оно, никогда не поздно) Как скачать правильные котировки: https://forum.ice-fx.com/topic/997-kak-pravilno-testirovat-i-optimizirovat-sovetnik/?tab=comments#comment-3688 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Leo 117 Жалоба Опубликовано 24 октября, 2019 Я тестировал как-то советник один, но там в принципе параметры были известны заранее мне оптимальные для пар определенных. И ужаснулся от результатов на фунте именно, так что надо быть готовым к тому, что на участке определенном советник зальет на полную, особенно речь идет о совах на мартине и о сеточниках, для которых тренд сильный - это смерть. И никакие параметры не спали бы ситуацию, только закрытие сделок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zaharik 46 Жалоба Опубликовано 9 ноября, 2019 Можно выбрать свойства эксперта, это и есть настройки советника, с которыми он будет тестироваться. Там есть пункт оптимизация. При оптимизации выбирается диапазон настроек различных параметров. Советник при тесте протестируется с разными настройками по каждому параметру. Затем выбирается лучший результат и с настройками, показавшими его, тестируем уже на другом участке времени. Цель, подобрать настройки, которые будут оптимальны для различных временных периодов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Jake Green 83 Жалоба Опубликовано 10 ноября, 2019 Тестер МТ4 весьма ограничен по функционалу, поэтому иногда что-то приходится доделывать напильником. Бывает так, что хорошие по мнению тестера варианты оказываются ерундой, где 90% сделок убыточны, и только несколько сделок дают хороший профит. При этом они распределены не равномерно, а где-то с краю теста. График же у хорошей системы должен иметь наклон вверх и быть более-менее равномерен. Но как заставить тестер выбирать именно такие варианты? Благо, у нас есть возможность оптимизировать по критерию "Custom", а сам критерий прописывать в коде с помощью функции OnTester(). Вставьте этот код в начало или конец вашего советника: enum OPTCVAR { OPTCVAR0=0, // Сделки+ПФ+Профит+ДД OPTCVAR1=1, // Сделки+ПФ+Профит+СтД OPTCVAR2=2, // Сделки+ПФ+Профит+М+СтД OPTCVAR3=3, // Сделки+ПФ+Профит+М+СтД+ДД }; input OPTCVAR OptCriteria = 0; double OnTester() { double ret=0.0; if (TesterStatistics(STAT_BALANCE_DD)>0) { if(OptCriteria==0) ret=TesterStatistics(STAT_TRADES)*TesterStatistics(STAT_PROFIT_FACTOR)*TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_BALANCE_DD); if(OptCriteria==1) ret=(MathPow(TesterStatistics(STAT_TRADES),2)*MathPow(TesterStatistics(STAT_PROFIT_FACTOR),3)*TesterStatistics(STAT_PROFIT)/CountStdDev())/100000; if(OptCriteria==2) ret=(MathPow(TesterStatistics(STAT_TRADES),2)*MathPow(TesterStatistics(STAT_PROFIT_FACTOR),3)*TesterStatistics(STAT_PROFIT)*MathAbs(TesterStatistics(STAT_EXPECTED_PAYOFF))/CountStdDev())/100000; if(OptCriteria==3) ret=(MathPow(TesterStatistics(STAT_TRADES),2)*MathPow(TesterStatistics(STAT_PROFIT_FACTOR),3)*TesterStatistics(STAT_PROFIT)*MathAbs(TesterStatistics(STAT_EXPECTED_PAYOFF))/(CountStdDev()*TesterStatistics(STAT_BALANCE_DD)))/1000; } return(ret); } double CountStdDev() { if (TesterStatistics(STAT_TRADES) == 0) return(0.0); double StdDev = 0; for(int pos = 0; pos < TesterStatistics(STAT_TRADES); pos++) { if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { StdDev = StdDev + MathPow((OrderProfit()+OrderCommission()+OrderSwap()-TesterStatistics(STAT_EXPECTED_PAYOFF)),2); } } StdDev = MathSqrt(StdDev/TesterStatistics(STAT_TRADES)); return(StdDev); } У вас появится новая настройка "OptCriteria" во входных параметрах советника. Попросту говоря, советник сам оценивает результат торговли по окончанию прогона и сообщает свою расчетную оценку терминалу. А терминал уже на основе этой оценки понимает, какой прогон был лучше. Примечание: данный код не мой, но решение весьма удачное. Также стоит учитывать еще и время оптимизации. Код не должен быть избыточным, а оптимизацию лучше делать "По ценам открытия" для экономии времени. Убедитесь, что результаты вашего советника не очень отличаются в режимах "По ценам открытия" и "Все тики". Для этого сделайте тест, допустим, за год на стандартных настройках в этих двух режимах и сравните результаты. Сильного отличия быть не должно. Если отличия значительны, то ваш советник не имеет смысла оптимизировать "по ценам открытия". Итак, вы провели оптимизацию по выбранным параметрам и получили множество результатов: Но что же с этим делать? Ставить советник с лучшими настройками? Почти всегда это гарантирует убытки, потому что вы просто подогнали параметры к данному промежутку времени. Как убедиться, что этого не произошло? Вот тут нам и нужен бэк и форвард тесты. Мы прогоняем полученные результаты по периоду больше, чем тот, на котором оптимизировались, и обращаем внимание на хвосты. Допустим, сейчас 31 октября. Мы делаем оптимизацию за 8 месяцев, и условились, что соотношение отрезков тестирования будет 1:4:1. Получаем: - бэктест: 01.11.2018 - 31.12.2019 (2 месяца); - период оптимизации: 01.01.2019 - 31.08.2019 (8 месяцев); - форвард: 01.09.2019 - 31.10.2019 (2 месяца). Теперь в основном окне тестера меняем период: начало - на 01.11.2018, окончание - на 31.10.2019. Сортируем таблицу результатов тестирования по колонке "Результат OnTester". Если кликнуть дважды на какую-либо строчку, тестер установит параметры этого прогона в настройки советника и перебросит нас на свою основную страницу, где останется нажать "Старт". Таким образом мы проверяем самые лучшие результаты оптимизации и находим те, которые не являются "подгонкой" под историю. Начало и окончание теста на кривой баланса не должно значительно отличаться от середины тестирования. В идеале нужно получить примерно равную наклонную линию за весь период. Вы можете использовать любое другое соотношение от 1:2:1 до 1:5:1 и любые другие периоды в месяцах. Но учитывайте, что количество ордеров на периоде оптимизации не должно быть меньше 50. Подобрав нужное соотношение и периоды, подходящие вашей системе, вы можете провести тесты вашего метода оптимизации в прошлом и посмотреть на его актуальность. Откатитесь на год или два назад и проводите оптимизацию с последующей проверкой в будущем. Например, сделаем оптимизацию на периоде 01.01.2018 - 31.08.2018. Выберем настройки с помощью бектеста и форвардтеста за период 01.11.2017 - 31.10.2018. А теперь проверим результаты в будущие 2 месяца: 01.11.2018 - 31.01.2019. Это уже реальные цифры, которые вы можете получить на своем счете. Если они вас устраивают, смещайтесь вперед на 1-2 месяца и проводите такие же тесты. Убедитесь, что ваш метод оптимизации подходит под эту стратегию. Если результаты вам не нравятся, возможно стоит подобрать другой период оптимизации и соотношение периодов. Или отказаться от стратегии ввиду ее убыточности. P.S. Да, оптимизация - это долгий и кропотливый труд. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11bish 148 Жалоба Опубликовано 12 ноября, 2019 В 10.11.2019 в 19:10, Jake Green сказал: за период 01.11.2017 - 31.10.2018 Как-то народ все время искал котировки, помню. Чуть ли не обменивались ими на форумах, типо самые точные. Уж не помню, чьих они были, но считалось хорошим тоном тестироваться именно на них. Самое интересное, что метаквотовские котировки не котировались (масло в масле)) совсем, якобы они кривые (непонятно, правда, почему). Т.е. "чистота" должна гарантировать наиболее приближенный к реальности результат. Это действительно так? как котировки могут быть вообще "кривыми"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Asal 115 Жалоба Опубликовано 12 ноября, 2019 Только что, 11bish сказал: Как-то народ все время искал котировки, помню. Чуть ли не обменивались ими на форумах, типо самые точные. Уж не помню, чьих они были, но считалось хорошим тоном тестироваться именно на них. Самое интересное, что метаквотовские котировки не котировались (масло в масле)) совсем, якобы они кривые (непонятно, правда, почему). Т.е. "чистота" должна гарантировать наиболее приближенный к реальности результат. Это действительно так? как котировки могут быть вообще "кривыми"? Наличие нерыночных свечей может создать Грааль или наоборот Грааль угробить, на практике я ничего особоенного на форексе в плане данных последние годы не наблюдаю вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Jake Green 83 Жалоба Опубликовано 12 ноября, 2019 6 часов назад, 11bish сказал: Как-то народ все время искал котировки, помню. Чуть ли не обменивались ими на форумах, типо самые точные. Уж не помню, чьих они были, но считалось хорошим тоном тестироваться именно на них. Самое интересное, что метаквотовские котировки не котировались (масло в масле)) совсем, якобы они кривые (непонятно, правда, почему). Т.е. "чистота" должна гарантировать наиболее приближенный к реальности результат. Это действительно так? как котировки могут быть вообще "кривыми"? Есть такой момент. MQ (метаквоты) не заинтересованы в дальнейшем развитии MT4 и уже более 10 лет пытаются пропихнуть свой МТ5, думаю по этому с историей на своих серверах они тоже не занимаются. Все усложняется еще тем что и болшинство брокеров не дают скачать с их серверов адекватную историю. Выходит один нормальный способ - брать котировки у поставщиков ликвидности и загружать в МТ4. Например DucasCopy. Я пользуюсь утилитой QuantDataManager которая позволяет скачивать нужные котировки и экспортирует их в формате читаемом терминалом МТ4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11bish 148 Жалоба Опубликовано 13 ноября, 2019 10 часов назад, Jake Green сказал: такой момент Еще две штучки, которыю не нашел как прикрутить к тесту. Называется она - комиссия брокера. Следующая штучка, которая так же больно отзывается на сделке - своп. Ведь отрицательный, как правило, в два (или почти два) раза выше положительного. Например, у нас (Д.Савелко как-то видел, затрагивал данный вопрос где-то). И это при том условии, что нарвешься на положительный. Открываться только ради того, чтобы получить положительный своп - ну как-то не по трейдерски это видится. Но тут еще ладно, подстроиться можно, но вот комиссия - лихое дело. Хорошо так подрезает скальперов-советников. Как в таких случаях протестироваться? Разбежка комиссий, кстати, на демо и реале так же присутствует на некоторых инструментах, к сожалению. Что не может не сказаться на тестировании даже в реальном времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Jake Green 83 Жалоба Опубликовано 13 ноября, 2019 (изменено) 1 час назад, 11bish сказал: Еще две штучки, которыю не нашел как прикрутить к тесту. Называется она - комиссия брокера. Следующая штучка, которая так же больно отзывается на сделке - своп. Ведь отрицательный, как правило, в два (или почти два) раза выше положительного. Например, у нас (Д.Савелко как-то видел, затрагивал данный вопрос где-то). И это при том условии, что нарвешься на положительный. Открываться только ради того, чтобы получить положительный своп - ну как-то не по трейдерски это видится. Но тут еще ладно, подстроиться можно, но вот комиссия - лихое дело. Хорошо так подрезает скальперов-советников. Как в таких случаях протестироваться? Разбежка комиссий, кстати, на демо и реале так же присутствует на некоторых инструментах, к сожалению. Что не может не сказаться на тестировании даже в реальном времени. Тестер сейчас учитывает своп, в том числе тройной. Комиссию не считает, но ее можно добавтиь в ручную, так как она зависит от объема или сразу заложить ее в спред увеличив последний. Изменено 13 ноября, 2019 пользователем Jake Green 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11bish 148 Жалоба Опубликовано 10 декабря, 2019 (изменено) QuantDataManager После установки бесплатной версии в окне нажать следующее После чего появится окошко для выбора пары, по которой необходимо скачать котировки (допускается выбор нескольких пар) После этого они добавятся в программу После этого ставим галочку (только одну) на нужном инструменте, снова нажимаем Дукас, в выпадающем меню - Доунлоад. Появится всплывающее окно, в котором указывается период, за который будут скачаны котировки Дальше - старт и начнется сам процесс Счетчики показывали разную скорость Интернета поэтому тут сложно сказать, какая она была в действительности. Учитывая то, что бесплатная версия имеет самую низкую скорость, скачивание котировок для одной пары за два года заняло примерно около часа. Далее жмем вкладку Экспорт - отмечаем галочкой нужную пару - Экспорт мт4, появится окно, в котором необходимо (если это делается в первый раз, затем настройки сохранятся) указать путь к терминалу, так же период котировок и жмем Старт Попробовал совместить два процесса: скачивания и экспорта Оперативка возмутилась Комп стал подвисать. После такого опыта стал разделять эти два момента. Изменено 10 декабря, 2019 пользователем 11bish 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Jake Green 83 Жалоба Опубликовано 2 января, 2020 (изменено) Столкнулся с интересной ситуацией у одного заказчика, он попросил меня исправить блок выставления стоп лоса в его советнике. В тестере по его словам блок работал без проблем, а вот на реальном счете не всегда удавалось выставить стоп лосс. Так как код был низкого качества, я просто написал блок управления стоп лосом рядом с основным кодом. И тут самое интересное. С моим блоком советник в тестере стал сильно сливать, а без него зарабатывает. Но как такое возможно, ведь блок не должен был повлиять на торговлю в тестере никоим образом? При детальном рассмотрении оказалось что его советник считал стоп лосс не верно, не от той цены. Для бай от цены Bid, для селл от цены Ask. Другим словами стоп лосс был увеличен на спред. Прогнал тест с моим блоком, но стоп лосс увеличил на спред - получились результаты как без блока. А суть тут вот в чем. Какая ценность у оптимизации, если такие крошечные изменения в условиях кардинально меняют результаты теста? Изменение стоп лоса было меньше чем на 10%. На лицо переоптимизация, или подгонка на истории. Отсюда родился еще один важный критерий оптимизации, точнее пост проверки этой самой оптимизации. Небольшие изменения параметров не должны значительно менять результаты торговли. Как это применить? Допустим вы прооптимизировали свой советник с учетом всего что было озвучено в этой теме и получили какие то параметры. Теперь в свойствах тестера убираем галочку "генетический алгоритм". Во входных параметрах оставляем галочки на против каждого параметра который вы оптимизировали, но вилку возможных параметров ставим узкую. Например, какой то параметр какого то индикатора в результате оптимизации у вас оказался равен 45. ставим начальное значение 44, конечное 46, шаг 1. Или 43/47/1 соответственно, и так с каждым параметром. Проводим оптимизации в таком режиме и анализируем результаты всех прогонов вместе взятых. Если нет значительных отклонений от результатов полученных при оптимизации - все отлично, можете смело ставить на реальный счет. Если есть значительные изменения, или даже отрицательные результаты - либо ваша стратегия заведомо убыточная, либо вы переоптимизировали параметры. Ставить такой советник на реальный счет нельзя. Понятно что параметры стоит проверять блоками. Если оптимизируемых параметров было много, скажем более 5, то даже такие незначительные вилки могут привести к сильным отклонениям даже у хороших стратегий. Изменено 2 января, 2020 пользователем Jake Green 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11bish 148 Жалоба Опубликовано 6 марта, 2020 Глядя на торговлю советников сеточников (гридеров) понимаешь, что оставлять его на круглосуточную работу - это значит либо ожидать минимальную прибыль (но слив маловероятен), либо большую прибыль и моментальный слив Если цена, например, пару дней флетит, то затем куда-нибудь выстреливает. И этот самый импульс может вывести из равновесия гридера и загнать его в пересидку (т.к. маржи для открытия новых ордеров уже не будет). Одним из вариантов возможно решения этого вопроса вижу в том, чтобы запретить торговать советнику в те часы, когда этот самый импульс обычно и бывает. Отлистав историю, предположил, что он, как правило, часто происходит в определенные часы. Для того, чтобы это дело как-то систематизировать, использовал несколько индикаторов (Trade_Day подписал дни недели, ant-GUBreakout показал ширину канала за день, Xi-Vlines настроил показывать нужные мне часы) для нанесения необходимой информации на график. Затем вручную прокрутил и сделал выписки в блокнот. Само собой, данные действия не являются панацеей, но, как показала прошедшая неделя - помогает. И, следовательно, дает возможность подработать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты